警報設定#
TradingView 的警報系統可以在條件觸發時透過 推播通知、電子郵件、Webhook 等方式通知你,甚至自動觸發下單。本章介紹如何在 Pine Script 中定義警報條件,以及如何設定 Webhook 訊息格式。
alertcondition — 定義警報條件#
alertcondition() 在腳本中預先定義一個可供使用者訂閱的警報條件:
alertcondition(condition, title, message)| 參數 | 說明 |
|---|---|
condition | 觸發警報的布林條件(true 時觸發) |
title | 在「新增警報」對話框中顯示的名稱 |
message | 警報觸發時發送的訊息內容(必須是常數字串) |
alertcondition() 有三個重要限制:
message必須是常數字串:訊息內容在編譯時就必須確定,不能隨 K 棒動態改變。可以使用{{close}}等佔位符在觸發時注入數值。- 只能在全域範圍呼叫:
alertcondition()必須寫在腳本頂層,不能放在if區塊或函式內部。 - 只適用於指標:策略腳本雖可寫入不會報錯,但無法從策略建立
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}} | 當前週期(如 1D、60) |
{{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.entry、strategy.exit、strategy.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 訊息內容。
設定警報的步驟#
- 將腳本加到圖表
- 點選右上角 鬧鐘圖示(新增警報)
- 條件:選擇腳本名稱及對應的警報條件
- 觸發:選擇「一次」或「每次觸發條件時」
- 通知方式:勾選 App 通知、Email 或 Webhook URL
- 輸入 Webhook URL(若使用 Webhook)
- 點選 儲存