Webhook 自動下單#

TradingView 的警報系統支援 Webhook,當訊號觸發時自動向指定 URL 發送 HTTP POST 請求。搭配中介伺服器,即可實現 Pine Script 策略的全自動下單。

整體架構#

TradingView 圖表
    ↓ 策略訊號觸發
Pine Script alert()
    ↓ HTTP POST + JSON
中介伺服器(Webhook 接收端)
    ↓ 解析訊息、呼叫 API
券商下單 API
    ↓
實際成交

TradingView 本身不直接與券商連線,你需要自架或使用第三方的 Webhook 中介服務來橋接兩者。

Pine Script 端:設計 Webhook 訊息#

Webhook 訊息通常使用 JSON 格式,由 alert()strategy.entryalert_message 參數發送:

//@version=6
strategy("Webhook 自動下單示範", overlay=true,
         default_qty_type=strategy.fixed,
         default_qty_value=1)

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

// 黃金交叉做多
if ta.crossover(ma5, ma20)
    strategy.entry("Long", strategy.long,
        alert_message='{"action":"buy","symbol":"{{ticker}}","qty":1,"price":{{close}},"time":"{{timenow}}"}')

// 死亡交叉平倉
if ta.crossunder(ma5, ma20)
    strategy.close("Long",
        alert_message='{"action":"sell","symbol":"{{ticker}}","qty":1,"price":{{close}},"time":"{{timenow}}"}')

TradingView 會自動將 {{ticker}}{{close}}{{timenow}} 等佔位符替換為實際數值後,再發送 POST 請求。

設定 Webhook 警報#

  1. 將策略腳本套用到圖表
  2. 點選右上角 鬧鐘圖示新增警報
  3. 條件設為該策略的「任何 strategy() 函式呼叫」
  4. 觸發設定:每次觸發條件時
  5. 通知方式:勾選 Webhook URL
  6. 輸入你的中介伺服器 URL(例如 https://your-server.com/webhook
  7. 點選 儲存

注意:Webhook 功能需要 TradingView Essential 以上方案(免費方案不支援)。

中介伺服器範例(Python)#

以下是一個使用 Python + Flask 接收 Webhook 的最簡範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from flask import Flask, request, jsonify
import json

app = Flask(__name__)

@app.route("/webhook", methods=["POST"])
def webhook():
    data = request.json
    print(f"收到訊號: {data}")

    action = data.get("action")
    symbol = data.get("symbol")
    qty    = data.get("qty", 1)
    price  = data.get("price")

    if action == "buy":
        # 呼叫券商 API 下買單
        place_order(symbol, "buy", qty)
        print(f"下買單:{symbol} x {qty} @ {price}")
    elif action == "sell":
        # 呼叫券商 API 下賣單
        place_order(symbol, "sell", qty)
        print(f"下賣單:{symbol} x {qty} @ {price}")

    return jsonify({"status": "ok"})

def place_order(symbol, side, qty):
    # 實作呼叫券商 API 的邏輯
    pass

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

安全性注意事項#

自動下單系統直接涉及真實資金,以下安全措施不可忽略:

1. 驗證來源#

TradingView 的 Webhook 不包含簽名驗證,任何人都能向你的伺服器發送請求。建議在訊息中加入 密鑰 (Token)

// Pine Script 端加入密鑰
alert_message='{"token":"YOUR_SECRET_TOKEN","action":"buy","symbol":"{{ticker}}"}'
1
2
3
4
5
6
7
8
9
# 伺服器端驗證密鑰
SECRET_TOKEN = "YOUR_SECRET_TOKEN"

@app.route("/webhook", methods=["POST"])
def webhook():
    data = request.json
    if data.get("token") != SECRET_TOKEN:
        return jsonify({"error": "unauthorized"}), 401
    # ...

2. 使用 HTTPS#

伺服器必須使用 HTTPS,TradingView 不接受 HTTP 的 Webhook URL。

3. 設定下單上限#

在伺服器端限制單次最大下單數量,防止異常訊號造成大量下單。

4. 記錄所有訊號#

保留完整的訊號日誌,方便事後檢查異常。

台灣券商串接#

目前提供 API 的台灣券商(各券商條件不同,請自行確認最新狀況):

券商API 類型備註
永豐金證券FuBon API / SinoPac API需開通程式交易帳戶
富邦證券富邦 API需申請 API 授權
元大證券元大 API需洽業務申請
第一金證券第一金 API需申請

各券商的 API 申請條件和費用持續變動,建議直接聯繫各券商確認最新規定。

常見問題#

Q:Webhook 可靠嗎?會漏訊號嗎?

TradingView 的 Webhook 並非 100% 保證送達,在網路不穩或伺服器忙碌時可能有延遲或遺失。建議:

  • 在伺服器端記錄每筆訊號的時間戳,定期與持倉狀態比對
  • 實作重試機制
  • 不要完全依賴 Webhook 做單,保持人工監控

Q:可以在免費方案使用 Webhook 嗎?

不行。Webhook 功能需要 Essential 以上付費方案。

Q:Pine Script 策略和指標都能用 Webhook 嗎?

都可以。策略用 alert_message 參數,指標用 alertcondition()alert() 函式,在設定警報時填入 Webhook URL 即可。

Reference#