درس 2: تنظیماتی که دیگران میتوانند تغییر دهند
قدمبهقدم به اسکریپتتان تنظیم بدهید: عدد با حد مجاز، کلید روشن و خاموش، رنگ، قیمتی که میخواند، فهرست گزینهها و گروهها.
درس 2 از 18. تنظیم به شما، یا هر کسی که از اسکریپت استفاده میکند، اجازه میدهد بدون باز کردن کد آن را از پنل تنظیمات تغییر دهد. در زبان، تنظیم همان input (ورودی) است. در این درس قدمبهقدم به یک اندیکاتور کانال کوچک ورودی اضافه میکنید.
عددی با حد مجاز#
indicator "Channel"
edition = 1
display = price
input length: int = 20, name = "Length", min = 2, max = 500
input width: float = 1.5, name = "Width", min = 0.1, step = 0.1
let middle = tech.sma(close, length)
let band = width * tech.atr(length)
plot(middle + band, name = "Upper", color = color.blue)
plot(middle - band, name = "Lower", color = color.blue)
plot(middle, name = "Middle", color = color.gray)input length: int = 20تنظیمی به نامlengthاعلام میکند.intعدد صحیح است وfloatعددی که اعشار دارد.name = "Length"برچسبی است که در پنل تنظیمات دیده میشود.minوmaxکوچکترین و بزرگترین مقداریاند که پنل میپذیرد.stepمقداری است که فلشهای کنار فیلد با هر بار زدن اضافه یا کم میکنند.- داخل اسکریپت،
lengthوwidthعددهای سادهاند. وقتی تنظیمی را عوض میکنید، اسکریپت با مقدار تازه از اولین کندل دوباره اجرا میشود.
tech.atr(length) میانگین دامنهٔ واقعی (ATR) است، یعنی اندازهٔ معمول یک کندل. کانال همان میانگین است بهاضافه و منهای width برابرِ این اندازه.
یک کلید، یک رنگ و قیمتی که میخواند#
indicator "Channel"
edition = 1
display = price
input src: source = close, name = "Source"
input length: int = 20, name = "Length", min = 2, max = 500
input width: float = 1.5, name = "Width", min = 0.1, step = 0.1
input show_middle: bool = true, name = "Show the middle line"
input band_color: color = color.blue, name = "Band colour"
let middle = tech.sma(src, length)
let band = width * tech.atr(length)
plot(middle + band, name = "Upper", color = band_color)
plot(middle - band, name = "Lower", color = band_color)
plot(if show_middle then middle else na, name = "Middle", color = color.gray)- ورودی
sourceبه عضو اجازه میدهد انتخاب کند میانگین کدام قیمت را بخواند:close،open،high،low،hl2(وسط کندل) و بقیهای که در ورودیها فهرست شدهاند. - ورودی
boolیک کلید است،trueیاfalse. عبارتif show_middle then middle else naخط وسط را فقط وقتی کلید روشن است رسم میکند:naیعنی «بدون مقدار»، و خط رسمشده هرجا مقدارشnaباشد چیزی نمیکشد. - ورودی
colorیک انتخابگر رنگ باز میکند.
فهرستی از گزینهها#
indicator "Channel"
edition = 1
display = price
input kind: text = "SMA", name = "Average", options = ["SMA", "EMA"]
input length: int = 20, name = "Length", min = 2, max = 500
input width: float = 1.5, name = "Width", min = 0.1, step = 0.1
let sma = tech.sma(close, length)
let ema = tech.ema(close, length)
let middle = if kind == "SMA" then sma else ema
let band = width * tech.atr(length)
plot(middle + band, name = "Upper", color = color.blue)
plot(middle - band, name = "Lower", color = color.blue)
plot(middle, name = "Middle", color = color.gray)options = [...] یک تنظیم را به فهرست کشویی تبدیل میکند. مقدار پیشفرض باید یکی از گزینهها باشد. هر دو میانگین روی همهٔ کندلها حساب میشوند و فهرست کشویی فقط انتخاب میکند کدام یکی رسم شود: تابعی مثل tech.ema از کندلی به کندل بعد حافظهٔ خودش را نگه میدارد، برای همین در خطی جداگانه نوشته میشود، نه داخل if.
گروهها و راهنماهای کوچک#
indicator "Channel"
edition = 1
display = price
group "Average"
/// How many bars the average and the band look at
input length: int = 20, name = "Length", min = 2, max = 500
input src: source = close, name = "Source"
group "Band"
input width: float = 1.5, name = "Width", min = 0.1, step = 0.1
input band_color: color = color.blue, name = "Colour"
let middle = tech.sma(src, length)
let band = width * tech.atr(length)
plot(middle + band, name = "Upper", color = band_color)
plot(middle - band, name = "Lower", color = band_color)
plot(middle, name = "Middle", color = color.gray)group "Average" ورودیهایی را که زیرش با تورفتگی آمدهاند زیر همین عنوان کنار هم میگذارد. خطی که با /// شروع شود و درست بالای یک ورودی بیاید، راهنمای کوچک آن است، یعنی توضیح کوتاهی که کنار فیلد نشان داده میشود.
امتحان کنید#
- در برنامهٔ اول،
max = 500را بهmax = 50تغییر دهید، ذخیره کنید و تنظیمات را باز کنید: فیلد روی 50 میایستد. - در «یک کلید، یک رنگ و قیمتی که میخواند»، به
show_middleمقدار پیشفرضfalseبدهید: خط وسط پنهان میماند تا کلید روشن شود. - در «فهرستی از گزینهها»، گزینهٔ سومی اضافه کنید:
options = ["SMA", "EMA", "WMA"]بنویسید،let wma = tech.wma(close, length)را اضافه کنید و باif kind == "SMA" then sma else if kind == "EMA" then ema else wmaانتخاب کنید. - در «گروهها و راهنماهای کوچک»،
input srcرا زیرgroup "Band"ببرید و دوباره به پنل تنظیمات نگاه کنید. - خط راهنمای
/// The colour of both band linesرا درست بالایinput band_colorاضافه کنید.
نقطهٔ بررسی#
- میتوانید ورودیهای
int،float،bool،color،sourceوtextاعلام کنید. - میتوانید عدد را با
min،maxوstepمحدود کنید و باoptionsگزینه بدهید. - میتوانید با
if ... then ... else naیک خط را فقط وقتی کلیدی روشن است نشان دهید. - میتوانید تنظیمات را با
groupمرتب کنید و با///به یک ورودی راهنمای کوچک بدهید.
ببینید هم: ورودیها، اولین اسکریپت شما.