millionchart
English

کلیدها و گزینه‌های هشدار

قاعده‌های کامل alert.when و alert.send: کلیدها، دفعات به صدا درآمدن، cooldown، سقف‌ها و پیام JSON. هشدار روی اسکریپت در این نسخه خاموش است.

هشدارهایی که چیزی می‌گویند نسخهٔ کوتاه ماجراست. این صفحه کتاب قاعده‌هاست.

دو راه برای ساختن هشدار#

alert.whenalert.send()
چیستیک شرط نام‌دار که پنجرهٔ هشدار می‌تواند آن را انتخاب کندفراخوانی‌ای که با پیامی که اسکریپت می‌سازد به صدا درمی‌آید
کجادر بالاترین سطح اسکریپتهر جایی، معمولاً داخل یک if
پیاممتنی که برای کل اسکریپت ثابت است و جانگهدار می‌پذیردروی همان کندل و با مقدارهای همان کندل ساخته می‌شود
به صدا درمی‌آیدروی کندلی که شرط در آن درست می‌شود (یا با on = "level" روی هر کندلی که شرط برقرار است)هر بار که اجرا به این فراخوانی می‌رسد، با رعایت once و cooldown

alert.when#

alert.when(condition, name, message = ..., on = "rises")

Cuprel
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 که از مقدارهای کندل ساخته می‌شود.

Cuprel
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 را با هم شریک‌اند؛ دو فراخوانی با کلیدهای متفاوت جداگانه به صدا درمی‌آیند، حتی روی یک کندل.

Cuprel
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 خطاست:

Cuprel · خطا E3211
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 می‌فرستند که پر از آکولاد است. در یک متن ساده آکولادها فقط نویسه‌اند و جانگهدارها همچنان کار می‌کنند:

Cuprel
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 که از مقدارها ساخته می‌شود این شکل است:

Cuprel
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() می‌نشیند.

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