millionchart
English

درس 2: تنظیماتی که دیگران می‌توانند تغییر دهند

قدم‌به‌قدم به اسکریپتتان تنظیم بدهید: عدد با حد مجاز، کلید روشن و خاموش، رنگ، قیمتی که می‌خواند، فهرست گزینه‌ها و گروه‌ها.

درس 2 از 18. تنظیم به شما، یا هر کسی که از اسکریپت استفاده می‌کند، اجازه می‌دهد بدون باز کردن کد آن را از پنل تنظیمات تغییر دهد. در زبان، تنظیم همان input (ورودی) است. در این درس قدم‌به‌قدم به یک اندیکاتور کانال کوچک ورودی اضافه می‌کنید.

عددی با حد مجاز#

Cuprel
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 برابرِ این اندازه.

یک کلید، یک رنگ و قیمتی که می‌خواند#

Cuprel
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 یک انتخابگر رنگ باز می‌کند.

فهرستی از گزینه‌ها#

Cuprel
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.

گروه‌ها و راهنماهای کوچک#

Cuprel
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 مرتب کنید و با /// به یک ورودی راهنمای کوچک بدهید.

ببینید هم: ورودی‌ها، اولین اسکریپت شما.

بعدی: درس 3: خط‌ها، رنگ‌ها و سطح‌ها