درس 9: سشنها و یک جدول کوچک
یک سشن معاملاتی را علامت بزنید، مقداری نگه دارید که هر روز از نو شروع شود، عددها را در جدول نشان بدهید و با کندلهایی که هنوز مقدار ندارند کار کنید.
درس 9 از 18. بازارها ساعت کاری دارند. این درس یک سشن را نامگذاری میکند، آن را اندازه میگیرد، یک شمارنده را در هر روز معاملاتی از نو شروع میکند، نتیجه را در جدولی در گوشهٔ نمودار مینویسد، و با مقدارهای خالی کار میکند که هر اندیکاتور روی کندلهای اولش دارد.
یک سشن#
سشن یک بازهٔ روزانه از زمان در یک منطقهٔ زمانی است. آن را یک بار در بالای فایل تعریف میکنید و بعد از راه عضوهایش میخوانید.
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 آن را در شروع هر روز معاملاتی از نو شروع میکند، که روز خود نماد است، نه نیمهشب.
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 ساده، اولین قیمت بستهشدنِ کل نمودار را نگه میداشت. روز معاملاتی و سشنها میگوید روز معاملاتی از کجا شروع میشود.
یک جدول کوچک#
جدول یک بار، روی آخرین کندل، در یک گوشهٔ نمودار رسم میشود.
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باشد.
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 را.
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، خطاها و حساب.