کلیدها و گزینههای هشدار
قاعدههای کامل alert.when و alert.send: کلیدها، دفعات به صدا درآمدن، cooldown، سقفها و پیام JSON. هشدار روی اسکریپت در این نسخه خاموش است.
هشدارهایی که چیزی میگویند نسخهٔ کوتاه ماجراست. این صفحه کتاب قاعدههاست.
دو راه برای ساختن هشدار#
alert.when | alert.send() | |
|---|---|---|
| چیست | یک شرط نامدار که پنجرهٔ هشدار میتواند آن را انتخاب کند | فراخوانیای که با پیامی که اسکریپت میسازد به صدا درمیآید |
| کجا | در بالاترین سطح اسکریپت | هر جایی، معمولاً داخل یک if |
| پیام | متنی که برای کل اسکریپت ثابت است و جانگهدار میپذیرد | روی همان کندل و با مقدارهای همان کندل ساخته میشود |
| به صدا درمیآید | روی کندلی که شرط در آن درست میشود (یا با on = "level" روی هر کندلی که شرط برقرار است) | هر بار که اجرا به این فراخوانی میرسد، با رعایت once و cooldown |
alert.when#
alert.when(condition, name, message = ..., on = "rises")
indicator "Two conditions"
edition = 1
display = price
let fast = tech.ema(close, 12)
let slow = tech.ema(close, 26)
alert.when(
tech.crosses_above(fast, slow),
"Bullish cross",
message = "{{ticker}} bullish cross at {{close}}",
)
alert.when(
close > tech.highest(high, 50)[1],
"New 50-bar high",
message = "{{ticker}} made a new 50-bar high",
on = "level",
)
plot(fast, name = "Fast")
plot(slow, name = "Slow")nameهمان چیزی است که شرط با آن در فهرست میآید. شناسهٔ شرط هم از آن ساخته میشود؛ برای انتخاب شناسه ازkey = "name"و بعد از تغییر نام ازwas = "old"استفاده کنید، درست مثل ورودیها.on = "rises"(پیشفرض) روی اولین کندلی که شرط برقرار است به صدا درمیآید و بعد صبر میکند تا شرط یک بار نادرست و دوباره درست شود.on = "level"روی هر کندلی که شرط برقرار است به صدا درمیآید.- پیام یک متن ساده است، برای هر بار به صدا درآمدن یکسان، و میتواند از جانگهدارهای زیر استفاده کند. پیامی که با f-text ساخته شود خطا نیست، اما ذخیره نمیشود: آنوقت شرط پیامی ندارد، پس متن را کامل بنویسید.
جانگهدارها#
سرور اینها را در پیام جایگزین میکند، هم در alert.when و هم در متن سادهٔ alert.send():
{{ticker}} {{exchange}} {{interval}} {{open}} {{high}} {{low}} {{close}} {{volume}} {{price}} {{time}} {{clock.now}} {{alert_name}} {{script_message}} و {{plot("Name")}} که مقدار همان کندل از خطی است که این نام را دارد. جانگهداری که در این فهرست نباشد همانطور که نوشته شده میماند.
alert.send#
alert.send(message, key = ..., once = ..., cooldown = ...). پیام یک متن است، معمولاً یک f-text که از مقدارهای کندل ساخته میشود.
indicator "Alert with a message"
edition = 1
display = price
let top = tech.highest(high, 20)[1]
if close > top
alert.send(
f"{symbol.ticker} closed above the 20-bar high {top:price}",
key = "breakout",
once = "bar_close",
)
plot(top, name = "20-bar high")key#
هر فراخوانی alert.send() یک کلید دارد که اسمش را مشخص میکند. اگر کلیدی ندهید، کلید از جای فراخوانی در اسکریپت ساخته میشود. کلیدی که مینویسید به حرفهای ASCII یعنی A-Z a-z، رقمها و _ . : - پاکسازی میشود (هر نویسهٔ دیگر به _ تبدیل میشود) و حداکثر 28 کاراکتر میتواند باشد: کلید بلندتر با یک کلید ساختهشده عوض میشود، پس کوتاهش کنید. کلیدی که نویسهٔ غیر ASCII داشته باشد، مثلاً با حرفهای فارسی یا عربی، شکل پاکسازیشدهاش (حداکثر 20 کاراکتر اولش) را نگه میدارد، بعد یک . و شش کاراکتر که از کل کلید ساخته میشود؛ بنابراین دو کلید از این دست هرگز یکی نمیشوند و یک کلید در هر اجرا همان میماند. سرور فقط کلیدهای لاتین را میپذیرد، برای همین خودِ حرفها نگه داشته نمیشوند. کلید با حرفهای لاتین خوانا میماند. دو فراخوانی با یک کلید، یک کلیدند و once و cooldown را با هم شریکاند؛ دو فراخوانی با کلیدهای متفاوت جداگانه به صدا درمیآیند، حتی روی یک کندل.
indicator "Two keys"
edition = 1
display = price
if close > open
alert.send("up bar", key = "up", once = "bar_close")
if close < open
alert.send("down bar", key = "down", once = "bar_close")
plot(close)کلیدی بنویسید که بشود تشخیصش داد. کلید همان چیزی است که پیام با آن بایگانی میشود و بهکمکش چند هشدار تکراری از هم جدا میشوند.
once#
once میگوید یک کلید کِی دوباره اجازهٔ به صدا درآمدن دارد.
| مقدار | کلید به صدا درمیآید |
|---|---|
"bar" (پیشفرض) | حداکثر یک بار برای هر کندل |
"bar_close" | حداکثر یک بار برای هر کندل، و فقط بعد از بسته شدن کندل |
"per_day" | حداکثر یک بار برای هر روز معاملاتی |
"on_change" | وقتی پیامش با آخرین پیامی که این کلید فرستاده فرق کند |
"all" | در هر فراخوانی |
پیام تنها آرگومانی است که با جایگاه داده میشود؛ once و cooldown با نام نوشته میشوند. هر مقدار دیگری برای once خطاست:
indicator "An unknown once"
edition = 1
if close > open
alert.send("up", key = "up", once = "sometimes")
plot(close)cooldown#
cooldown = n کلید را ساکت نگه میدارد تا n کندل از آخرین بار به صدا درآمدنش بگذرد: با cooldown = 12 میتواند روی کندل 0 به صدا دربیاید و بعد زودتر از کندل 12 نه. این شرط به once اضافه میشود: هر دو باید اجازه بدهند.
key، once و cooldown باید در خودِ اسکریپت، بهصورت یک متن یا یک عدد، نوشته شوند. مقداری که از یک ورودی خوانده شود یا در مسیر محاسبه شود رد میشود.
پیامهای دارای JSON#
وبهوکها معمولاً بدنهٔ JSON میفرستند که پر از آکولاد است. در یک متن ساده آکولادها فقط نویسهاند و جانگهدارها همچنان کار میکنند:
indicator "A JSON body"
edition = 1
display = price
if close > open
alert.send(
'{"symbol":"{{ticker}}","side":"buy","price":' + text.of(close) + "}",
key = "hook",
once = "bar_close",
)
plot(close)در f-text برای یک آکولاد واقعی باید آن را دو بار نوشت؛ پس بدنهٔ JSON که از مقدارها ساخته میشود این شکل است:
indicator "A JSON body from values"
edition = 1
display = price
if close > open
alert.send(
f'{{"symbol":"{symbol.ticker}","price":{close:.2f}}}',
key = "hook",
once = "bar_close",
)
plot(close)ابزاری که از یک رکورد JSON بسازد، یعنی alert.send(json(...))، هنوز در دسترس نیست.
سقفها#
- یک اسکریپت روی یک کندل حداکثر 20 بار و در یک اجرا حداکثر 5,000 بار میتواند به صدا دربیاید؛ نمودار از یک اجرای طولانی فقط جدیدترین رکوردها را نگه میدارد.
- پیام در 4,096 کاراکتر بریده میشود، همراه با یک اخطار.
- یک کلید حداکثر 28 کاراکتر دارد؛ کلید بلندتر با یک کلید ساختهشده عوض میشود.
هشدارها به کجا میروند#
در این انتشار چیزی فرستاده نمیشود: هشدار روی اسکریپت خودتان ساخته نمیشود (هشدار بالای صفحه را ببینید). در پیام یک هشدار، جاینگهدار {{script_message}} به جای متن فراخوانی alert.send() مینشیند.
نگاه کنید به: هشدارهایی که چیزی میگویند، قالببندی متن و عدد، سقفها و بودجهٔ اجرا.