روز معاملاتی و سشنها
نمودار روزها را چطور میشمارد؛ چطور یک سشن تعریف کنید و محدودهٔ آن را بخوانید، مقداری را هر روز از نو شروع کنید، به ساعت روز واکنش نشان دهید و روز، هفته و ماه قبل را بخوانید.
بیشتر منطق معامله به ساعت بسته است: سقف سشن لندن، ساعت اول روز، محدودهٔ دیروز، یک هشدار در زمان بسته شدن. این صفحه اجزای کار را نشان میدهد. همه از یک تعریف از روز معاملاتی استفاده میکنند، برای همین از همان شروع میکنیم.
روز معاملاتی#
روز معاملاتی همان روز تقویم نیست. هر نماد روز خودش را دارد:
| منبع داده | روز از چه ساعتی شروع میشود |
|---|---|
| فارکس، فلزات، شاخصها، انرژی، فیوچرز و بقیهٔ نمادهای بروکر | ساعت 17:00 به وقت نیویورک، که بسته به ساعت تابستانی 21:00 یا 22:00 UTC است |
| کریپتو از منبع داده یک صرافی، و دادههای آرشیوشده | 00:00 UTC |
هفته با اولین روز معاملاتی هفته شروع میشود و ماه با اولین روز ماه. هفتهها و ماهها با روز معاملاتیِ کامل شمرده میشوند، پس هفتهای که یک تغییر ساعت تابستانی در آن باشد 167 یا 169 ساعت طول دارد، نه دقیقاً 168. هر چیزی در این صفحه، یعنی state day، prior(day)، هفته یا ماه، روزها را به همین شکل میشمارد، برای همین اسکریپت برای یک نماد در هر جا که اجرایش کنید همان جواب را میدهد.
trading_day زمانی است که روز معاملاتیِ کندل فعلی باز شده:
indicator "Bars in the trading day"
edition = 1
state day bars_today = 0
bars_today += 1
plot(bars_today, name = "Bars so far today", style = histogram)
plot(trading_day, name = "Trading day opened at", display = none)سشنها#
سشن یک بازهٔ روزانه در یک منطقهٔ زمانی با نام است. آن را در یک خط جداگانه در بالاترین سطح فایل تعریف کنید، بعد اجزایش را بخوانید.
indicator "London session"
edition = 1
display = price
session london = 08:00 .. 16:30 @ "Europe/London"
plot(london.high, name = "Session high", color = color.green)
plot(london.low, name = "Session low", color = color.red)
chart.background(
if london.start then color.fade(color.blue, 80) else if london.active then color.fade(
color.blue,
94,
) else na,
)| جزء | معنا |
|---|---|
london.active | روی کندلهایی که داخل سشن باز میشوند درست است |
london.start | روی اولین کندلِ یک نوبت از سشن درست است |
london.end | روی آخرین کندلِ یک نوبت درست است: کندلی که داخل بازه باز میشود و در پایان آن بسته میشود |
london.index | 0، 1، 2 … شمارهٔ آخرین نوبت؛ پیش از اولین نوبت na است |
london.high, london.low | بالاترین سقف و پایینترین کفِ آخرین نوبت؛ بعد از پایان نوبت تا شروع نوبت بعد مقدارشان را نگه میدارند |
اگر سشن زودتر از زمان شروعش تمام شود، میتواند از نیمهشب رد شود:
indicator "Tokyo night"
edition = 1
display = price
session night = 22:00 .. 06:00 @ "Asia/Tokyo"
chart.background(if night.active then color.fade(color.purple, 92) else na, name = "Night")سشن با خط session اعلام میشود، مثل نمونهٔ بالا. سشن دقیقاً دو زمان و یک منطقه است. روزهای هفته ندارد و بازهٔ دوم هم ندارد. منطقه متنی از پایگاه داده منطقههای زمانی است، مثل "Europe/London"؛ منطقهای که نمودار نشناسد خطاست. ساعتها از ساعت تابستانی منطقه پیروی میکنند، برای همین سشن لندن چه تابستان چه زمستان ساعت 08:00 به وقت لندن میماند.
indicator "A zone that does not exist"
edition = 1
session london = 08:00 .. 16:00 @ "Mars/Olympus"
plot(if london.active then 1 else 0)نام سشن همیشه از طریق یکی از اجزایش خوانده میشود و هرگز بهتنهایی نه؛ سشن فقط در بالاترین سطح تعریف میشود:
indicator "A session by itself"
edition = 1
session london = 08:00 .. 16:00 @ "UTC"
plot(london)مقدارهایی که از نو شروع میشوند#
state day یک مقدار را در اولین اجرای دستورش در هر روز معاملاتی از نو شروع میکند، دستور هر جا که باشد. state session همین کار را با هر نوبت از یک سشن میکند. وقتی اسکریپت چند سشن دارد، باید سشن را نام برد.
indicator "Opening range of two sessions"
edition = 1
display = price
session london = 08:00 .. 16:30 @ "Europe/London"
session newyork = 09:30 .. 16:00 @ "America/New_York"
state session london london_high = high
state session newyork newyork_high = high
if london.active
london_high = math.max(london_high, high)
if newyork.active
newyork_high = math.max(newyork_high, high)
plot(london_high, name = "London high so far", color = color.green)
plot(newyork_high, name = "New York high so far", color = color.orange)indicator "Which session?"
edition = 1
session london = 08:00 .. 16:30 @ "Europe/London"
session newyork = 09:30 .. 16:00 @ "America/New_York"
state session high_so_far = high
plot(high_so_far)ساعت روز#
clock.reached(time @ zone) روی اولین کندل هر تاریخی درست است که بسته شدنش در آن منطقه در آن ساعت یا بعد از آن باشد. روزی یک بار درست است. در هر تایمفریمی کار میکند: روی کندلهای 15 دقیقهای کندلی است که ساعت 16:45 بسته میشود؛ روی کندلهای ساعتی کندلی است که ساعت 17:00 بسته میشود، یعنی اولین کندلی که میتواند بداند.
indicator "Close of New York"
edition = 1
display = price
if clock.reached(16:45 @ "America/New_York")
alert.send("New York is closing", key = "ny-close", once = "bar_close")
plot(close)ساعت و منطقهاش یک آرگوماناند. clock.reached(16:45) خطاست (E3271)، چون ساعت بدون منطقه روی هر دستگاه به لحظهای متفاوت اشاره میکند.
این مثال یک هشدار میفرستد تا ببینید هشدار کجا قرار میگیرد. در این انتشار هشدارِ اسکریپت خودتان به شما نمیرسد: کلیدها و گزینههای هشدار را ببینید.
روز، هفته و ماه قبل#
prior(period) آخرین دورهٔ کامل است و prior(period, n) به اندازهٔ n دوره عقب میرود، که n عددی صحیح از 1 تا 64 است و در خود اسکریپت نوشته میشود. current(period) دورهای است که الان در حال شکلگیری است. دوره day، week یا month است، و بعد از آن نام فیلد را میآورید: open، high، low، close، volume یا time.
indicator "Yesterday and last week"
edition = 1
display = price
plot(prior(day).high, name = "Yesterday high", color = color.green)
plot(prior(day).low, name = "Yesterday low", color = color.red)
plot(prior(week).high, name = "Last week high", color = color.gray)
plot(current(day).open, name = "Open of today", color = color.orange)اینها از کندلهای خود نمودار ساخته میشوند، بدون درخواست اضافه. یک دوره فقط بعد از دیده شدن اولین مرزش به حساب میآید، پس prior(day) برای روزهای اول تاریخچهٔ بارگذاریشده na است. دوره باید از یک کندل نمودار طولانیتر باشد: روی نمودار روزانه prior(day) خطاست. موتور اسکریپت را با E-PERIOD-TF متوقف میکند و میگوید روی کدام نمودار است. روی نمودار روزانه از prior(week) یا prior(month) استفاده کنید.
وقتی یک شرط درست میشود#
rises(condition) روی کندلی درست است که شرط بعد از نادرست بودن درست میشود، و falls(condition) روی کندلی که نادرست میشود. اینها شرط را از کندلی به کندل بعد به خاطر میسپارند، برای همین آنها را روی هر کندل فراخوانی کنید.
indicator "Edges of a trend"
edition = 1
display = price
let uptrend = close > tech.sma(close, 50)
mark.shape(
rises(uptrend),
name = "Trend starts",
shape = triangle_up,
place = below,
color = color.green,
)
mark.shape(
falls(uptrend),
name = "Trend ends",
shape = triangle_down,
place = above,
color = color.red,
)نگاه کنید به: متغیرها، واحدها و لیترالها، تایمفریمها و نمادهای دیگر.