millionchart
English

درس 9: سشن‌ها و یک جدول کوچک

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

درس 9 از 18. بازارها ساعت کاری دارند. این درس یک سشن را نام‌گذاری می‌کند، آن را اندازه می‌گیرد، یک شمارنده را در هر روز معاملاتی از نو شروع می‌کند، نتیجه را در جدولی در گوشهٔ نمودار می‌نویسد، و با مقدارهای خالی کار می‌کند که هر اندیکاتور روی کندل‌های اولش دارد.

یک سشن#

سشن یک بازهٔ روزانه از زمان در یک منطقهٔ زمانی است. آن را یک بار در بالای فایل تعریف می‌کنید و بعد از راه عضوهایش می‌خوانید.

Cuprel
indicator "London range"
    edition = 1
    display = price

session london = 08:00 .. 16:30 @ "Europe/London"
plot(london.high, name = "London high", color = color.green)
plot(london.low, name = "London low", color = color.red)
chart.background(if london.active then color.fade(color.blue, 92) else na, name = "London open")
  • london.active روی کندل‌هایی که درون سشن باز می‌شوند درست است.
  • london.high و london.low بالاترین قیمتِ بالا و پایین‌ترین قیمتِ پایین آخرین سشن هستند. تا وقتی سشن باز است ادامه پیدا می‌کنند و بعد از پایان آن تا شروع سشن بعدی مقدارشان را نگه می‌دارند.
  • منطقهٔ زمانی در خود اسکریپت نوشته می‌شود. ساعت زمستانی و تابستانی از منطقه پیروی می‌کند، پس سشن در تمام سال ساعت 08:00 به وقت لندن می‌ماند.

مقداری که هر روز از نو شروع می‌شود#

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

Cuprel
indicator "Change since the day opened"
    edition = 1

state day day_open = close
plot(close - day_open, name = "Change today", style = histogram)

state day day_open = close بسته‌شدن اولین کندل روز را می‌گیرد و تا شروع روز بعد نگه می‌دارد. یک state ساده، اولین قیمت بسته‌شدنِ کل نمودار را نگه می‌داشت. روز معاملاتی و سشن‌ها می‌گوید روز معاملاتی از کجا شروع می‌شود.

یک جدول کوچک#

جدول یک بار، روی آخرین کندل، در یک گوشهٔ نمودار رسم می‌شود.

Cuprel
indicator "Range table"
    edition = 1
    display = price

session asia = 00:00 .. 08:00 @ "Asia/Tokyo"
if bar.is_last
    let t = table.new(top_right, 2, 3)
    table.cell(t, 0, 0, "Asia high")
    table.cell(t, 1, 0, f"{asia.high:price}")
    table.cell(t, 0, 1, "Asia low")
    table.cell(t, 1, 1, f"{asia.low:price}")
    table.cell(t, 0, 2, "Range")
    table.cell(t, 1, 2, f"{asia.high - asia.low:price}")
plot(close)

table.new(position, columns, rows) جدول را می‌سازد؛ table.cell(table, column, row, text) یک خانه را می‌نویسد. ستون‌ها و ردیف‌ها از 0 شمرده می‌شوند. bar.is_last فقط روی آخرین کندل درست است، پس جدول یک بار ساخته می‌شود، نه روی هر کندل.

کندل‌های بدون مقدار#

میانگین متحرک 20 کندلی در 19 کندل اول چیزی برای گفتن ندارد. آن کندل‌ها na دارند، یعنی «بدون مقدار». خط در جایی که مقدار na است فاصله می‌اندازد.

سه ابزار با آن کار می‌کنند:

  • is_na(x) وقتی درست است که x برابر na باشد.
  • در متن قالب‌دار (f-text)، {x:.2f?'n/a'} به جای عددی که na است یک متن می‌نویسد (جدول پایین از آن استفاده می‌کند).
  • a ?? b همان a است، یا b وقتی a برابر na باشد.
Cuprel
indicator "Distance from average"
    edition = 1

input length: int = 50, name = "Length", min = 2
let average = tech.sma(close, length)
let distance = close - average
plot(distance ?? 0, name = "Distance (0 until there is an average)")
if bar.is_last
    let t = table.new(top_right, 2, 1)
    table.cell(t, 0, 0, "Distance")
    table.cell(t, 1, 0, f"{distance:.2f?'n/a'}")

در جدول، {distance:.2f?'n/a'} عدد را با دو رقم اعشار می‌نویسد، یا اگر عددی نباشد متن n/a را.

Cuprel · هشدار W-NA-COMPARE
indicator "Wrong na test"
    edition = 1

let average = tech.sma(close, 20)
plot(if average == na then 0 else average)

امتحان کنید#

  • در برنامهٔ «London range»، به جای لندن نیویورک را دنبال کنید: session new_york = 09:30 .. 16:00 @ "America/New_York"، و در سه خط زیرش new_york.high، new_york.low و new_york.active بنویسید.
  • در برنامهٔ «Change since the day opened»، state day_open = close (بدون day) بنویسید: حالا مقدار از اولین کندل کل نمودار حساب می‌شود.
  • در برنامهٔ «Range table»، جدول را با table.new(bottom_left, 2, 4) جابه‌جا کنید و ردیف چهارمی اضافه کنید: table.cell(t, 0, 3, "Close") و table.cell(t, 1, 3, f"{close:price}").
  • در برنامهٔ «Distance from average»، به جای distance ?? 0 خود distance را رسم کنید: حالا خط در کندل‌های اول با یک فاصلهٔ خالی شروع می‌شود.

نقطهٔ بررسی#

  • می‌توانید یک سشن را با ساعت‌ها و منطقهٔ زمانی‌اش اعلام کنید و .active، .high و .low را بخوانید.
  • می‌توانید با state day مقداری نگه دارید که هر روز معاملاتی از نو شروع می‌شود.
  • می‌توانید جدولی را یک بار، روی آخرین کندل، بسازید و عددها را در خانه‌هایش بنویسید.
  • می‌توانید na را با is_na، ?? و جایگزینِ f-text مدیریت کنید.

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

بعدی: درس 10: تایم‌فریم‌ها و نمادهای دیگر