警報設定#

TradingView 的警報系統可以在條件觸發時透過 推播通知、電子郵件、Webhook 等方式通知你,甚至自動觸發下單。本章介紹如何在 Pine Script 中定義警報條件,以及如何設定 Webhook 訊息格式。

alertcondition — 定義警報條件#

alertcondition() 在腳本中預先定義一個可供使用者訂閱的警報條件:

alertcondition(condition, title, message)
參數說明
condition觸發警報的布林條件(true 時觸發)
title在「新增警報」對話框中顯示的名稱
message警報觸發時發送的訊息內容(必須是常數字串)

alertcondition() 有三個重要限制:

  1. message 必須是常數字串:訊息內容在編譯時就必須確定,不能隨 K 棒動態改變。可以使用 {{close}} 等佔位符在觸發時注入數值。
  2. 只能在全域範圍呼叫alertcondition() 必須寫在腳本頂層,不能放在 if 區塊或函式內部
  3. 只適用於指標:策略腳本雖可寫入不會報錯,但無法從策略建立 alertcondition 警報,策略請改用 alert_message 參數。
//@version=6
indicator("均線交叉警報", overlay=true)

ma5  = ta.sma(close, 5)
ma20 = ta.sma(close, 20)

goldenCross = ta.crossover(ma5, ma20)
deathCross  = ta.crossunder(ma5, ma20)

plot(ma5,  "MA5",  color=color.blue)
plot(ma20, "MA20", color=color.orange)

// alertcondition 必須在頂層(不能在 if 區塊內)
alertcondition(goldenCross, "黃金交叉", "MA5 向上突破 MA20,可考慮做多")
alertcondition(deathCross,  "死亡交叉", "MA5 向下跌破 MA20,可考慮做空")

腳本套用後,點選右上角的 鬧鐘圖示新增警報,就能在「條件」下拉選單中看到上方定義的警報名稱。

alert() — 動態觸發警報#

alert() 可以在腳本執行過程中直接觸發警報,並支援動態訊息內容:

alert(message, freq)
freq 參數說明
alert.freq_once_per_bar每根 K 棒最多觸發一次(預設)
alert.freq_once_per_bar_close只在 K 棒收盤時觸發
alert.freq_all每次條件成立都觸發(即時 K 棒中可能多次)
//@version=6
indicator("動態警報訊息", overlay=true)

rsiValue = ta.rsi(close, 14)

if ta.crossunder(rsiValue, 30)
    alert("RSI 跌破 30!目前 RSI = " + str.tostring(math.round(rsiValue, 2)) +
          ",收盤價 = " + str.tostring(close),
          alert.freq_once_per_bar_close)

訊息中的動態佔位符#

TradingView 提供內建的佔位符,在警報訊息中自動替換為實際數值:

佔位符替換內容
{{ticker}}商品代碼(如 TSMC
{{exchange}}交易所(如 TWSE
{{interval}}當前週期(如 1D60
{{open}}觸發時的開盤價
{{high}}觸發時的最高價
{{low}}觸發時的最低價
{{close}}觸發時的收盤價
{{volume}}觸發時的成交量
{{time}}觸發時間(Unix 時間戳)
{{timenow}}當前時間
{{plot_0}} ~ {{plot_19}}腳本中第 1 至第 20 個 plot 的數值
{{plot("標題名稱")}}依 plot 的 title 參數取值
alertcondition(goldenCross, "黃金交叉",
    "{{ticker}} 黃金交叉!收盤:{{close}},時間:{{timenow}}")

Webhook 訊息格式#

Webhook 警報可以向指定 URL 傳送 HTTP POST 請求,常用於串接自動下單系統。訊息通常採用 JSON 格式:

//@version=6
strategy("Webhook 策略", overlay=true)

ma5  = ta.sma(close, 5)
ma20 = ta.sma(close, 20)

// 進場訊號
if ta.crossover(ma5, ma20)
    strategy.entry("Long", strategy.long)
    alert('{"action":"buy","symbol":"{{ticker}}","price":{{close}},"qty":1}',
          alert.freq_once_per_bar_close)

// 出場訊號
if ta.crossunder(ma5, ma20)
    strategy.close("Long")
    alert('{"action":"sell","symbol":"{{ticker}}","price":{{close}},"qty":1}',
          alert.freq_once_per_bar_close)

詳細的 Webhook 自動下單整合流程,請參考 CH16:Webhook 自動下單

策略的內建警報#

使用 strategy() 腳本時,TradingView 會自動為每個 strategy.entrystrategy.exitstrategy.close 建立對應的警報條件。在「新增警報」中選擇「任何 strategy() 函式呼叫」可以接收所有進出場訊號。

//@version=6
strategy("策略警報示範", overlay=true)

ma5  = ta.sma(close, 5)
ma20 = ta.sma(close, 20)

if ta.crossover(ma5, ma20)
    strategy.entry("Long", strategy.long,
                   alert_message='{"action":"buy","ticker":"{{ticker}}","price":{{close}}}')

if ta.crossunder(ma5, ma20)
    strategy.close("Long",
                   alert_message='{"action":"sell","ticker":"{{ticker}}","price":{{close}}}')

alert_message 參數可為每個進出場指令指定專屬的 Webhook 訊息內容。

設定警報的步驟#

  1. 將腳本加到圖表
  2. 點選右上角 鬧鐘圖示(新增警報)
  3. 條件:選擇腳本名稱及對應的警報條件
  4. 觸發:選擇「一次」或「每次觸發條件時」
  5. 通知方式:勾選 App 通知、Email 或 Webhook URL
  6. 輸入 Webhook URL(若使用 Webhook)
  7. 點選 儲存

Reference#