millionchart
English

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

کندل‌های قبلی را با [n] بخوانید، مقداری را با state از کندلی به کندل بعد نگه دارید، آن را هر روز از نو شروع کنید و کندل‌های پس از یک رویداد را بشمارید.

درس 5 از 18. اسکریپت برای هر کندل یک بار اجرا می‌شود، از بالای فایل تا پایین آن، و هر چه را حساب کرده با پایان کندل فراموش می‌کند. این درس دو راهی را نشان می‌دهد که اسکریپت با آن‌ها چیزی را به یاد نگه می‌دارد: خواندن تاریخچهٔ یک مقدار، و نگه داشتن یک مقدار با state.

کندل‌های قبلی#

close[1] قیمت بسته‌شدن کندل قبلی است و close[5] قیمت بسته‌شدن پنج کندل عقب‌تر. هر نامی همین‌طور کار می‌کند، حتی نامی که خودتان ساخته‌اید.

Cuprel
indicator "Change over a few bars"
    edition = 1
    display = pane

input back: int = 5, name = "Bars back", min = 1, max = 100
let change = close - close[back]
plot(
    change,
    name = "Change",
    style = histogram,
    color = if change >= 0 then color.green else color.red,
)
level(0, name = "Zero", color = color.gray)

در back کندل اول، کندلی به آن فاصله در گذشته وجود ندارد؛ پس close[back] برابر na (بی‌مقدار) است، تغییر هم na می‌شود و آنجا چیزی رسم نمی‌شود. ورودی یک max دارد: موتور می‌خواهد بداند اسکریپت حداکثر چقدر به عقب می‌خواند.

مقداری که از کندلی به کندل بعد نگه داشته می‌شود#

نامی که با let ساخته شود، در هر کندل دوباره ساخته می‌شود. نامی که با state ساخته شود، یک بار، در اولین کندل، مقدار می‌گیرد و بعد نگه داشته می‌شود: هر کندل با همان مقداری شروع می‌کند که کندل قبلی با آن تمام کرد.

Cuprel
indicator "Up streak"
    edition = 1
    display = pane

state streak = 0
if close > close[1]
    streak += 1
else
    streak = 0
plot(streak, name = "Bars up in a row", style = columns, color = color.teal)

streak += 1 یکی به مقدار نگه‌داشته‌شده اضافه می‌کند. در اولین کندل close[1] برابر na است، مقایسه نادرست می‌شود و شمارش از 0 شروع می‌شود.

مقداری برای یک کندل، و مقداری برای یک روز#

mut نامی است که می‌توانید مقدارش را عوض کنید، اما فقط در طول اجرای یک کندل: در کندل بعد از نو شروع می‌شود. state day مثل state نگه داشته می‌شود، اما در اولین کندل هر روز معاملاتی از نو شروع می‌شود.

Cuprel
indicator "Largest body today"
    edition = 1
    display = pane

mut body = close - open
if body < 0
    body = -body
state day largest = 0.0
if body > largest
    largest = body
plot(body, name = "Body", style = columns, color = color.gray)
plot(largest, name = "Largest body today", color = color.orange)

body اندازهٔ بدنهٔ همین کندل است که در هر کندل دوباره حساب می‌شود. largest بزرگ‌ترین بدنه‌ای را که امروز تا این لحظه دیده شده نگه می‌دارد و با شروع روز معاملاتی تازه به 0 برمی‌گردد. آن را روی نمودار درون‌روزی به کار ببرید؛ روی نمودار روزانه هر کندل یک روز تازه است.

کندل‌ها از وقتی چیزی رخ داد#

مقدار نگه‌داشته‌شده می‌تواند کندل‌های بعد از یک رویداد را بشمارد. اینجا مقدار با na شروع می‌شود، پس تا اولین تقاطع چیزی رسم نمی‌شود:

Cuprel
indicator "Bars since the last cross"
    edition = 1
    display = pane

let fast = tech.ema(close, 10)
let slow = tech.ema(close, 30)
let up = tech.crosses_above(fast, slow)
let down = tech.crosses_below(fast, slow)
state since: int = na
if up or down
    since = 0
else if not is_na(since)
    since += 1
plot(since, name = "Bars since the last cross", style = columns, color = color.blue)

دو آزمون تقاطع، هر کدام در یک خط جدا و در هر کندل حساب می‌شوند و فقط بعد از آن با or ترکیب می‌شوند. تابعی مثل tech.crosses_above کندل‌هایی را که دیده به یاد دارد؛ اگر مستقیم در سمت راست or نوشته شود، بعضی کندل‌ها را از دست می‌دهد و بررسی‌کننده آن را نمی‌پذیرد (صفحهٔ خواندن پیام‌های ویرایشگر این پیام را نشان می‌دهد).

امتحان کنید#

  • در «Change over a few bars»، Bars back را روی 1 بگذارید: هیستوگرام تغییر هر کندل نسبت به کندل قبلی می‌شود.
  • در «Up streak»، به جای close > close[1] بنویسید close > open: حالا شمارش، کندل‌های سبزِ پشت سر هم را می‌شمارد.
  • در «Largest body today»، state day را به state تغییر دهید: خط نارنجی دیگر هیچ‌وقت پایین نمی‌آید، چون بزرگ‌ترین بدنهٔ کل نمودار را نگه می‌دارد.
  • در «Bars since the last cross»، or down را حذف کنید: شمارش فقط با تقاطع‌های رو به بالا از نو شروع می‌شود.

نقطهٔ بررسی#

  • می‌توانید مقدار یک نام را چند کندل عقب‌تر با [n] بخوانید و می‌دانید که در آغاز نمودار na است.
  • می‌توانید مقداری را با state از کندلی به کندل بعد نگه دارید و با state day هر روز از نو شروعش کنید.
  • می‌دانید کی let، کی mut و کی state به کار می‌رود.
  • می‌توانید کندل‌های پس از یک رویداد را بشمارید.

بعدی: درس 6: تابع‌های خودتان