ورودیها
تنظیماتی که در پنل اندیکاتور میآیند. همهٔ نوعهای ورودی، گزینههای هر کدام، گروهها و راهنماهای کوچک، و ویژگیهایی که هنوز در دسترس نیستند.
input یک تنظیم است. در پنل تنظیمات اندیکاتور ظاهر میشود، عضو بدون دست زدن به کد میتواند آن را عوض کند، و اسکریپت با مقدار جدید دوباره اجرا میشود. ورودیها در بالاترین سطح فایل و نزدیک بالای آن میروند، یا داخل یک group.
تعریف یک ورودی#
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 |
bool | true یا 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 | یک عضو | بهصورت فهرست کشویی با برچسب عضوها نشان داده میشود |
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 یک عدد یا یک متن را به فهرستی از گزینهها تبدیل میکند. مقدار پیشفرض را یکی از همانها بگذارید.
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 = بهعنوان مقدار دوم بنویسید:
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" را بنویسید تا مقداری که با نام قدیمی ذخیره شده منتقل شود. شناسهها این را پوشش میدهد.
اشتباههایی که ویرایشگر میگیرد#
گزینهای که ورودی نمیشناسد خطاست، همراه با فهرست گزینههایی که میشناسد:
indicator "Misspelled option"
edition = 1
input length: int = 20, name = "Length", minimum = 1
plot(length)ورودیای که نه نوع دارد نه مقدار پیشفرض، چیزی ندارد که به آن تکیه کند:
indicator "Nothing to go on"
edition = 1
input length
plot(length)ورودی را فقط وقتی نشان بدهید که به کار میآید#
show_if یک ورودی را در تنظیمات فقط تا وقتی نشان میدهد که یک قاعده درست باشد. قاعده میتواند نام ورودیهای دیگر (حتی ورودیهایی که پایینتر تعریف شدهاند)، ثابتها و عضوهای یک enum را بیاورد؛ نمیتواند قیمت، یک سری یا مقداری را که خود اسکریپت حساب میکند بیاورد. ورودیِ پنهان هم مقدارش را به اسکریپت میدهد.
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 میگیرند:
indicator "A rule that names a price"
edition = 1
input depth: int = 3, "Depth", show_if = close > 0
plot(depth)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 را دارد.
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 متنی چندخطی است.
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 به نسخهای بعدی از زبان تعلق دارند. فعلاً رد میشوند، تا اسکریپتی که برای آنها نوشته شده با معنای اشتباه اجرا نشود:
indicator "Not available yet"
edition = 1
preset p
plot(close)نگاه کنید به: شناسهها، مقدارها و نوعها، اولین استراتژی شما.