millionchart
English

ورودی‌ها

تنظیماتی که در پنل اندیکاتور می‌آیند. همهٔ نوع‌های ورودی، گزینه‌های هر کدام، گروه‌ها و راهنماهای کوچک، و ویژگی‌هایی که هنوز در دسترس نیستند.

input یک تنظیم است. در پنل تنظیمات اندیکاتور ظاهر می‌شود، عضو بدون دست زدن به کد می‌تواند آن را عوض کند، و اسکریپت با مقدار جدید دوباره اجرا می‌شود. ورودی‌ها در بالاترین سطح فایل و نزدیک بالای آن می‌روند، یا داخل یک group.

تعریف یک ورودی#

Cuprel
indicator "Input forms"
    edition = 1

input length: int = 20, name = "Length", min = 1, max = 200, tooltip = "Bars the average looks at"
input mult: float = 2.0, name = "Multiplier", min = 0.1, step = 0.1
input smooth: bool = true, name = "Smooth"
let average = tech.sma(close, length)
let smoothed = tech.ema(average, 3)
plot(if smooth then smoothed else average, name = "Average")
plot(average * mult, name = "Scaled")

شکل کلی این است: input name: type = default, option = value, .... مقدار پیش‌فرض باید ثابت باشد: مقداری که خودتان می‌نویسید (عدد، متن، رنگ، true، false، زمان) یا حساب روی چنین مقدارهایی، نه چیزی که از کندلی به کندل دیگر عوض می‌شود مثل bar.index. داخل اسکریپت، نام یک مقدار معمولی است: length تا وقتی عضو آن را عوض نکرده 20 است.

نوع‌ها#

نوعمقدارتوضیح
intعدد صحیحmin، max، step، options
floatعددmin، max، step، options
booltrue یا falseیک کلید روشن/خاموش
textمتنoptions برای فهرست کشویی، multiline = true برای کادر متن
colorیک رنگانتخاب‌گر رنگ
sourceیک سری قیمتیکی از open، high، low، close، hl2، hlc3، ohlc4، hlcc4
timeframe (یا tf)یک تایم‌فریم مثل "60" (دقیقه) یا "1D"options
symbolنام یک نماد
sessionساعت‌هایی مثل "0800-1600"options
timeیک لحظهمثل @2026-01-01T00:00Z نوشته می‌شود
priceعددی به واحد قیمت
یک enumیک عضوبه‌صورت فهرست کشویی با برچسب عضوها نشان داده می‌شود
Cuprel
indicator "Several types"
    edition = 1
    display = price

enum Mode
    fast = "Fast"
    slow = "Slow"
input mode: Mode = Mode.fast, name = "Mode"
input src: source = close, name = "Source"
input line_color: color = #2962ff, name = "Line colour"
input tf: tf = "60", name = "Other timeframe"
let length = match mode
    Mode.fast => 10
    Mode.slow => 40
let other = data.series(tf, tech.ema(src, length), symbol = symbol.id)
plot(other, name = "Average on the other timeframe", color = line_color)

ورودی source راهی است که اندیکاتور به عضو اجازه می‌دهد انتخاب کند اندیکاتور روی چه چیزی اعمال شود. ورودی timeframe را می‌شود مستقیم به data.series داد.

فهرست کشویی#

options یک عدد یا یک متن را به فهرستی از گزینه‌ها تبدیل می‌کند. مقدار پیش‌فرض را یکی از همان‌ها بگذارید.

Cuprel
indicator "Dropdown"
    edition = 1

input kind: text = "EMA", name = "Kind", options = ["EMA", "SMA", "WMA"]
input length: int = 20, name = "Length", options = [10, 20, 50, 100]
let ema = tech.ema(close, length)
let sma = tech.sma(close, length)
let wma = tech.wma(close, length)
let average = match kind
    "EMA" => ema
    "SMA" => sma
    _ => wma
plot(average, name = "Average")

گروه‌ها، راهنماهای کوچک و شکل‌های کوتاه#

group "Name" یک بلاک است. ورودی‌هایی که زیر آن تورفتگی دارند با هم زیر آن عنوان نشان داده می‌شوند. خط /// بالای یک ورودی راهنمای کوچک آن است. وقتی نوع را بشود از مقدار پیش‌فرض فهمید می‌توانید آن را ننویسید، و برچسب (همان name) را می‌توانید بدون name = به‌عنوان مقدار دوم بنویسید:

Cuprel
indicator "Grouped inputs"
    edition = 1

group "Signal"
    /// How many bars the oscillator looks back
    input length = 14, "Length"
    input src: source = close, name = "Source"
group "Levels"
    input upper = 70.0, "Overbought"
    input lower = 30.0, "Oversold"
let osc = tech.rsi(src, length)
plot(osc, name = "RSI", color = color.purple)
level(upper, name = "Upper level")
level(lower, name = "Lower level")

شکل کوتاهی مثل input length = 14 یک عدد صحیح است، پس نوعش int است. اگر عدد اعشاری می‌خواهید 14.0 بنویسید یا float را بگویید.

ورودی‌ها زنده‌اند#

ورودی ثابت نیست. وقتی عضو آن را عوض می‌کند، اسکریپت از اولین کندل دوباره اجرا می‌شود. این شامل تنظیمات سرآیند استراتژی (کمیسیون، حجم، اسپرد) هم می‌شود، پس عضو می‌تواند یک هزینه را امتحان کند و نتیجه را ببیند. چند گزینهٔ فراخوانی هنوز باید در خود اسکریپت نوشته شوند و ورودی نمی‌گیرند: key، once و cooldown یک هشدار، و ضخامت، سبک و جابه‌جایی یک خط. موتور گروه اول را رد می‌کند و برای گروه دوم مقدار پیش‌فرض را نگه می‌دارد و اخطار می‌دهد.

شناسهٔ یک ورودی#

شناسه (id) هر ورودی همان نام آن است. نمودار ذخیره‌شده مقدار را با شناسه دوباره پیدا می‌کند، پس عوض کردن برچسب آن (متن name) یا زبانش هرگز تنظیمی را از بین نمی‌برد. برای شناسهٔ دیگر id = "other" بدهید، و بعد از تغییر نام یک ورودی was = "old_name" را بنویسید تا مقداری که با نام قدیمی ذخیره شده منتقل شود. شناسه‌ها این را پوشش می‌دهد.

اشتباه‌هایی که ویرایشگر می‌گیرد#

گزینه‌ای که ورودی نمی‌شناسد خطاست، همراه با فهرست گزینه‌هایی که می‌شناسد:

Cuprel · خطا E3130
indicator "Misspelled option"
    edition = 1

input length: int = 20, name = "Length", minimum = 1
plot(length)

ورودی‌ای که نه نوع دارد نه مقدار پیش‌فرض، چیزی ندارد که به آن تکیه کند:

Cuprel · خطا E2030
indicator "Nothing to go on"
    edition = 1
input length
plot(length)

ورودی را فقط وقتی نشان بدهید که به کار می‌آید#

show_if یک ورودی را در تنظیمات فقط تا وقتی نشان می‌دهد که یک قاعده درست باشد. قاعده می‌تواند نام ورودی‌های دیگر (حتی ورودی‌هایی که پایین‌تر تعریف شده‌اند)، ثابت‌ها و عضوهای یک enum را بیاورد؛ نمی‌تواند قیمت، یک سری یا مقداری را که خود اسکریپت حساب می‌کند بیاورد. ورودیِ پنهان هم مقدارش را به اسکریپت می‌دهد.

Cuprel
indicator "Show only when it applies"
    edition = 1

enum Style
    manual = "Manual"
    auto = "Auto"

input style: Style = Style.auto, "Style"
input smoothing: int = 5, "Smoothing", min = 1, max = 50, show_if = style == Style.manual
plot(tech.sma(close, smoothing))

قاعده‌ای که چیز دیگری را نام ببرد خطای E3133 است، و ورودی‌هایی که قاعدهٔ show_ifشان به هم برمی‌گردد E3134 می‌گیرند:

Cuprel · خطا E3133
indicator "A rule that names a price"
    edition = 1

input depth: int = 3, "Depth", show_if = close > 0
plot(depth)
Cuprel · خطا E3134
indicator "Two inputs that wait for each other"
    edition = 1

input a: int = 1, "A", show_if = b > 0
input b: int = 1, "B", show_if = a > 0
plot(a + b)

یک مقدار را بررسی کنید#

check = rule, "message" تا وقتی قاعده نادرست است پیام را زیر فیلد نشان می‌دهد. در این انتشار check فقط یک پیام است: اسکریپت باز هم اجرا می‌شود، پس مقداری که check نمی‌پذیرد متوقف نمی‌شود. قاعده همان محدودیت‌های show_if را دارد.

Cuprel
indicator "Check a value"
    edition = 1

input stop: float = 1.5, "Stop", min = 0.1, check = stop <= limit, "The stop is above the limit"
input limit: float = 3, "Limit"
plot(close - stop)

فهرست، و متن چندخطی#

list<T> ورودی‌ای است که چند مقدار را نگه می‌دارد؛ T یکی از int، float، text یا time است. پیش‌فرض یک فهرستِ نوشته‌شده است، با حداکثر 200 عضو. در اسکریپت این ورودی یک آرایه است: عضو را با .at(i) بخوانید. ورودی متنی با multiline = true متنی چندخطی است.

Cuprel
indicator "A list as an input"
    edition = 1

input levels: list<float> = [1.5, 2.5], "Levels"
input note: text = "first line", "Notes", multiline = true
plot(close + levels.at(0), name = "First level")

تنظیمات فهرست را به‌صورت متن نگه می‌دارند، حداکثر 2,000 نویسه. اگر فهرستِ ذخیره‌شده را نشود به‌صورت فهرست خواند، اسکریپت یک فهرست خالی می‌گیرد و موتور این را با اخطار W-ENGINE-LIST-INPUT می‌گوید.

هنوز در دسترس نیست#

ورودی‌های preset، bind و secret به نسخه‌ای بعدی از زبان تعلق دارند. فعلاً رد می‌شوند، تا اسکریپتی که برای آن‌ها نوشته شده با معنای اشتباه اجرا نشود:

Cuprel · خطا E9002
indicator "Not available yet"
    edition = 1
preset p
plot(close)

نگاه کنید به: شناسه‌ها، مقدارها و نوع‌ها، اولین استراتژی شما.