millionchart
English

درس 4: سیگنال‌ها، فلش‌ها و ناحیه‌ها

کندل‌هایی را که دو میانگین در آن‌ها همدیگر را قطع می‌کنند علامت بزنید، پس‌زمینه را بر اساس شرط رنگ کنید و دو خط سطح با ناحیهٔ سایه‌دار بین آن‌ها بکشید.

درس 4 از 18. اندیکاتور وقتی به کار می‌آید که لحظه‌های مهم را علامت بزند. این درس نشان می‌دهد چطور یک سیگنال را به شکل فلش، یک شرط را به شکل پس‌زمینهٔ رنگی، و ناحیهٔ بین دو سطح را نشان بدهید.

شرط یعنی بله یا نه#

مقایسه‌ای مثل fast > slow روی هر کندل true یا false می‌دهد. تابع‌هایی مثل tech.crosses_above(a, b) به پرسشی دقیق‌تر جواب می‌دهند: آیا a روی این کندل از b بالاتر رفت، در حالی که کندل قبل بالاتر نبود؟

Cuprel
indicator "Cross arrows"
    edition = 1
    display = price

input fast_length: int = 10, name = "Fast length", min = 1
input slow_length: int = 30, name = "Slow length", min = 2
let fast = tech.sma(close, fast_length)
let slow = tech.sma(close, slow_length)
let buy = tech.crosses_above(fast, slow)
let sell = tech.crosses_below(fast, slow)
plot(fast, name = "Fast", color = color.blue)
plot(slow, name = "Slow", color = color.red)
mark.shape(buy, name = "Buy", shape = triangle_up, place = below, color = color.green)
mark.shape(sell, name = "Sell", shape = triangle_down, place = above, color = color.red)

mark.shape(condition, ...) روی هر کندلی که شرط در آن برقرار است یک علامت رسم می‌کند. shape شکل را انتخاب می‌کند و place آن را زیر یا بالای کندل می‌گذارد. tech.crosses_above کندل قبلی را به خاطر می‌سپارد، و فقط کندل‌هایی را می‌تواند به خاطر بسپارد که روی آن‌ها اجرا شده است. آن را، مثل اینجا، در بالای اسکریپت و روی هر کندل صدا بزنید و if را برای کاری نگه دارید که با جواب می‌کنید. متغیرها نشان می‌دهد در غیر این صورت چه اشتباهی پیش می‌آید.

بین دو مقدار یکی را انتخاب کنید#

if ... then ... else ... یک عبارت است: مقدار دارد. هر دو شاخه لازم است، چون عبارت باید همیشه جوابی داشته باشد.

Cuprel
indicator "Trend background"
    edition = 1
    display = price

input length: int = 50, name = "Length", min = 2
let trend = tech.sma(close, length)
let tint = if close > trend then color.fade(color.green, 88) else color.fade(color.red, 88)
chart.background(tint, name = "Trend")
plot(trend, name = "Trend line", color = color.gray)

color.fade(color, percent) یک نسخهٔ شفاف از یک رنگ می‌سازد: 0 کاملاً پررنگ و 100 نامرئی است. chart.background پس‌زمینهٔ هر کندل را با رنگی که به آن داده شده رنگ می‌کند. کندلی که رنگش na باشد بدون رنگ می‌ماند:

Cuprel
indicator "Only strong bars"
    edition = 1
    display = price

let range = high - low
let strong = range > tech.sma(range, 20) * 1.5
chart.background(if strong then color.fade(color.orange, 80) else na, name = "Strong bar")

اگر else را نگذارید، ویرایشگر جلویتان را می‌گیرد:

Cuprel · خطا E2001
indicator "Missing else"
    edition = 1
let tint = if close > open then color.green
plot(close)

سطح‌ها و ناحیهٔ سایه‌دار#

level(price) یک خط افقی در یک سطح ثابت می‌کشد. shade(a, b) فاصلهٔ بین دو خط یا دو سطح را سایه می‌زند. نتیجهٔ level یا plot را در یک نام نگه دارید تا بتوانید آن را به shade بدهید.

Cuprel
indicator "RSI with zones"
    edition = 1
    display = pane

input length: int = 14, name = "Length", min = 2
input upper: float = 70, name = "Upper level"
input lower: float = 30, name = "Lower level"
let value = tech.rsi(close, length)
let top = level(upper, name = "Upper", color = color.red, style = dashed)
let bottom = level(lower, name = "Lower", color = color.green, style = dashed)
shade(top, bottom, color = color.fade(color.purple, 92), name = "Zone")
plot(value, name = "RSI", color = color.purple, width = 2)
chart.background(
    if value > upper then color.fade(color.red, 85) else if value < lower then color.fade(
        color.green,
        85,
    ) else na,
)

RSI (شاخص قدرت نسبی) سنجه‌ای از مومنتوم است، عددی بین 0 و 100، برای همین اسکریپت پنل مخصوص خودش را دارد (display = pane). خط آخر دو if ... then ... else را زنجیر می‌کند: اولین شاخه‌ای که درست باشد برنده است.

امتحان کنید#

  • در برنامهٔ «Cross arrows»، در هر دو میانگین tech.sma را با tech.ema عوض کنید: تقاطع‌ها کمی زودتر می‌آیند.
  • علامت خرید را به shape = circle, place = bottom تغییر دهید: دایره‌ها به جای زیر کندل‌ها به پایین پنل می‌روند.
  • یک حرف هم اضافه کنید: mark.char(buy, name = "B", char = "B", place = below, color = color.green).
  • در برنامهٔ «Only strong bars»، 1.5 را به 2.0 تغییر دهید: کندل‌های کمتری رنگ می‌شوند.
  • در برنامهٔ «RSI with zones»، از پنل تنظیمات سطح بالا و پایین را 80 و 20 بگذارید و ببینید پس‌زمینه کمتر رنگ می‌گیرد.

نقطهٔ بررسی#

  • می‌توانید یک مقایسه یا یک تقاطع را به شرطی true/false تبدیل کنید.
  • می‌توانید کندل‌هایی را که شرط در آن‌ها برقرار است با mark.shape و mark.char علامت بزنید.
  • می‌توانید با if ... then ... else مقداری انتخاب کنید و می‌دانید چرا else لازم است.
  • می‌توانید دو سطح بکشید و ناحیهٔ میان آن‌ها را سایه بزنید.

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

بعدی: درس 5: مقدارهایی که به خاطر می‌مانند