millionchart
English

روز معاملاتی و سشن‌ها

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

بیشتر منطق معامله به ساعت بسته است: سقف سشن لندن، ساعت اول روز، محدودهٔ دیروز، یک هشدار در زمان بسته شدن. این صفحه اجزای کار را نشان می‌دهد. همه از یک تعریف از روز معاملاتی استفاده می‌کنند، برای همین از همان شروع می‌کنیم.

روز معاملاتی#

روز معاملاتی همان روز تقویم نیست. هر نماد روز خودش را دارد:

منبع دادهروز از چه ساعتی شروع می‌شود
فارکس، فلزات، شاخص‌ها، انرژی، فیوچرز و بقیهٔ نمادهای بروکرساعت 17:00 به وقت نیویورک، که بسته به ساعت تابستانی 21:00 یا 22:00 UTC است
کریپتو از منبع داده یک صرافی، و داده‌های آرشیوشده00:00 UTC

هفته با اولین روز معاملاتی هفته شروع می‌شود و ماه با اولین روز ماه. هفته‌ها و ماه‌ها با روز معاملاتیِ کامل شمرده می‌شوند، پس هفته‌ای که یک تغییر ساعت تابستانی در آن باشد 167 یا 169 ساعت طول دارد، نه دقیقاً 168. هر چیزی در این صفحه، یعنی state day، prior(day)، هفته یا ماه، روزها را به همین شکل می‌شمارد، برای همین اسکریپت برای یک نماد در هر جا که اجرایش کنید همان جواب را می‌دهد.

trading_day زمانی است که روز معاملاتیِ کندل فعلی باز شده:

Cuprel
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)

سشن‌ها#

سشن یک بازهٔ روزانه در یک منطقهٔ زمانی با نام است. آن را در یک خط جداگانه در بالاترین سطح فایل تعریف کنید، بعد اجزایش را بخوانید.

Cuprel
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.index0، 1، 2 … شمارهٔ آخرین نوبت؛ پیش از اولین نوبت na است
london.high, london.lowبالاترین سقف و پایین‌ترین کفِ آخرین نوبت؛ بعد از پایان نوبت تا شروع نوبت بعد مقدارشان را نگه می‌دارند

اگر سشن زودتر از زمان شروعش تمام شود، می‌تواند از نیمه‌شب رد شود:

Cuprel
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 به وقت لندن می‌ماند.

Cuprel · خطا E1022
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)

نام سشن همیشه از طریق یکی از اجزایش خوانده می‌شود و هرگز به‌تنهایی نه؛ سشن فقط در بالاترین سطح تعریف می‌شود:

Cuprel · خطا E3260
indicator "A session by itself"
    edition = 1

session london = 08:00 .. 16:00 @ "UTC"
plot(london)

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

state day یک مقدار را در اولین اجرای دستورش در هر روز معاملاتی از نو شروع می‌کند، دستور هر جا که باشد. state session همین کار را با هر نوبت از یک سشن می‌کند. وقتی اسکریپت چند سشن دارد، باید سشن را نام برد.

Cuprel
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)
Cuprel · خطا E3280
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 بسته می‌شود، یعنی اولین کندلی که می‌تواند بداند.

Cuprel
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.

Cuprel
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) روی کندلی که نادرست می‌شود. این‌ها شرط را از کندلی به کندل بعد به خاطر می‌سپارند، برای همین آن‌ها را روی هر کندل فراخوانی کنید.

Cuprel
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,
)

نگاه کنید به: متغیرها، واحدها و لیترال‌ها، تایم‌فریم‌ها و نمادهای دیگر.