درس 4: سیگنالها، فلشها و ناحیهها
کندلهایی را که دو میانگین در آنها همدیگر را قطع میکنند علامت بزنید، پسزمینه را بر اساس شرط رنگ کنید و دو خط سطح با ناحیهٔ سایهدار بین آنها بکشید.
درس 4 از 18. اندیکاتور وقتی به کار میآید که لحظههای مهم را علامت بزند. این درس نشان میدهد چطور یک سیگنال را به شکل فلش، یک شرط را به شکل پسزمینهٔ رنگی، و ناحیهٔ بین دو سطح را نشان بدهید.
شرط یعنی بله یا نه#
مقایسهای مثل fast > slow روی هر کندل true یا false میدهد. تابعهایی مثل tech.crosses_above(a, b) به پرسشی دقیقتر جواب میدهند: آیا a روی این کندل از b بالاتر رفت، در حالی که کندل قبل بالاتر نبود؟
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 ... یک عبارت است: مقدار دارد. هر دو شاخه لازم است، چون عبارت باید همیشه جوابی داشته باشد.
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 باشد بدون رنگ میماند:
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 را نگذارید، ویرایشگر جلویتان را میگیرد:
indicator "Missing else"
edition = 1
let tint = if close > open then color.green
plot(close)سطحها و ناحیهٔ سایهدار#
level(price) یک خط افقی در یک سطح ثابت میکشد. shade(a, b) فاصلهٔ بین دو خط یا دو سطح را سایه میزند. نتیجهٔ level یا plot را در یک نام نگه دارید تا بتوانید آن را به shade بدهید.
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لازم است. - میتوانید دو سطح بکشید و ناحیهٔ میان آنها را سایه بزنید.
نگاه کنید به: خطها و ترسیمها، انتخابها و حلقهها، مقدارها و نوعها.