TradingView Webhook 延遲有多嚴重?
官方規格、常見成因與能修好的地方
你設了 TradingView alert 自動下單,結果訊號來得比想像慢很多——有時候是幾秒, 有時候感覺像過了好幾分鐘。先講結論:你感受到的「延遲」,十次有八次不是 TradingView 端真的慢,而是三件事之一——(1) 你自己選的觸發頻率設定本來就要等、 (2) 你的接收伺服器回應太慢被判定逾時、(3) 你的方案根本沒有 webhook 功能。
先誠實講在最前面:TradingView 官方從未公開承諾過 webhook 的送達時間,也沒有 SLA(服務水準協議)。這篇不會生一個「平均延遲 XX 秒」的數字給你,而是把官方文件 裡真正寫明的規格、方案限制、社群回報,以及哪些延遲你能自己修、哪些是架構上修不掉的, 誠實拆開來講。
Once Per Bar Close 設定本來就要等 K 棒收盤;官方真正寫明的規格是接收端 3 秒內沒回應就取消、不重試;免費方案完全沒有 webhook; 真正修不了的是 TradingView 從訊號成立到送出 webhook 之間的內部耗時,這段官方沒有 公開任何數字。先破解最大的誤會:「Once Per Bar Close」不是慢,是故意等
官方文件對觸發頻率的定義很清楚:Once per bar 是「每根 K 棒都檢查, 條件符合就觸發,同一根最多一次,不等收盤」;Once per bar close 則是「同樣邏輯,但一定要等 K 棒收盤才觸發」。這兩個字的差異,決定了你的訊號會不會 「感覺慢」。
再加一個容易被忽略的區分:以上是「Create Alert」對話框 UI 的 Frequency 選項, 適用於 price/technical/alertcondition() alert。但 Pine alert() 函式的 freq 參數只有三個值:alert.freq_once_per_bar(預設)、alert.freq_once_per_bar_close、alert.freq_all—— 沒有「Once Only」也沒有「Once per minute」這兩個選項,很多教學文章會混用。
另外,strategy 預設在 K 棒收盤才重新計算:除非你在程式裡開啟 calc_on_every_tick = true,否則 alert() 就算填了 alert.freq_all,實際上也只會在收盤時觸發一次。這是很多人以為「即時策略 結果卻等收盤」的真正原因。
官方到底承諾了什麼延遲?
查遍 TradingView 官方 Help Center、Pine Script 文件與 status page,都沒有找到 任何對「webhook 延遲」或「送達時間」的量化承諾或 SLA。官方文件裡真正寫明、跟時間 有關的規格,其實是下面這幾個「接收端」規格,而不是「TradingView 內部處理耗時」:
換句話說,官方明確承諾的是「你的伺服器要多快回應」,而不是「TradingView 自己從條件成立到送出 webhook 要多快」。後者完全沒有 公開數字可查。
你的方案本身可能就沒有 webhook
在懷疑延遲之前,先確認一件更根本的事:免費 Basic 方案完全不支援 webhook 通知,這在 pricing 頁的比較表裡是叉號,不是「比較慢」,是根本沒有。
| Basic(免費) | Essential | Plus | Premium | Ultimate | |
|---|---|---|---|---|---|
| Webhook 通知 | |||||
| Price alert 數量 | 3 | 20 | 100 | 400 | 1,000 |
| Technical alert 數量 | 0 | 20 | 100 | 400 | 1,000 |
| Alert 有效期上限 | 1 個月 | 2 個月 | 2 個月 | 可不過期 | 可不過期 |
哪些延遲你能自己修,哪些修不了
把上面官方規格和常見坑整理成一張表,分成「你能動手改」跟「架構上修不了、只能繞道」:
| 問題 | 你能做什麼 |
|---|---|
| 頻率選了 Once per bar close 卻想要即時 | 改成 Once per bar;strategy 想要逐 tick 觸發要開 calc_on_every_tick |
| 伺服器 3 秒沒回應被取消,不會重試 | 收到請求先立刻回 200,下單邏輯丟到背景處理,不要在同一個請求裡等交易所回應 |
| 訊息或 request body 太大出錯 | 手動訊息上限 4000 字元,alert() / alert_message 上限 40960 字元,精簡 payload |
| 改了 Pine 程式碼但 alert 沒反應 | alert 建立當下會把腳本快照下來,改完程式碼要刪除舊 alert 重建 |
| 方案沒有 webhook 或 alert 數量不夠用 | 升級到 Essential 以上;數量還不夠可申請額外的 active alert 額度 |
| TradingView 從條件成立到送出 webhook 的內部耗時 | 修不了——官方無 SLA、無公開數字,只能靠自己的 signal log/replay 監控實際狀況 |
| 3 分鐘內觸發超過 15 次被系統停用 | 修不了頻率上限本身,只能重新設計訊號邏輯降低觸發次數 |
| 只接受 80/443 port、不支援 IPv6 | 修不了規格,接收服務要用標準 port、IPv4 |
收訊端(你的伺服器)也會拖慢——這是我們的做法
前面說「3 秒沒回應就取消、不重試」,這條規則常被低估。如果你的接收伺服器在同一個 請求裡做完「驗證訊號 → 呼叫交易所 API 下單 → 等成交回應」整套流程,很容易在真倉環境 下超過 3 秒,導致這筆訊號直接被 TradingView 判定失敗丟棄,而且不會重試——你可能完全不知道自己漏接了一筆訊號。
TVSBot 的做法是先收到 webhook 就立刻回應,實際下單邏輯丟到背景非同步處理,避免撞到 TradingView 這條 3 秒逾時規則。我們自己的 FAQ 頁對這段「收到訊號到實際下單」的 延遲寫的是:目標 P95 落在 500ms 以內,實際延遲一般加總在 1-3 秒內——這是我們自己文件上的目標值與一般經驗值,不是有公開方法論、逐筆量測的實測報告, 寫在這裡是想誠實說明「接收端能做到什麼程度」,而不是包裝成精確 benchmark。
想更完整了解怎麼把 webhook 接起來、payload 要帶哪些欄位,可以看 TradingView Webhook 完整教學這篇;如果你的下單金額跟預期對不上,很可能是另一個常見坑,可以看 qty_type 語意陷阱那篇。
來源驗證:IP 白名單 vs SSL 憑證
官方目前公布的 webhook 來源 IP 清單(截至 2026 年 7 月查證)是:
52.89.214.238
34.212.75.30
54.218.53.128
52.32.178.7但官方文件並沒有承諾這份清單永久不變。更穩妥的做法是驗證 TradingView 送請求時附帶的 SSL 憑證(CN = webhook-server@tradingview.com),這是官方自己提供、 比單純 IP 白名單更可靠的驗證方式。
診斷你的 alert 為什麼「感覺很慢」
上線前檢查清單
- 確認方案支援 webhook(Essential 以上),免費 Basic 完全沒有
- 觸發頻率選對:要即時用 Once per bar,要等收盤確認用 Once per bar close
- 伺服器收到請求先立刻回 200,絕不在 3 秒內做完整套下單流程
- 用 SSL 憑證或至少 IP 白名單驗證請求真的來自 TradingView
- 改了 Pine 程式碼記得刪除舊 alert 重建,而不是以為會自動更新
- 定期檢查 Alert Manager 有沒有紅色「Stopped — Expired」
為什麼我的 TradingView alert 要等好幾分鐘才觸發?
Once per bar close——這種設定本來就要等 K 棒收盤才觸發,1 小時線最長可能要等接近 1 小時, 不是 bug,是設計如此。如果要更即時的反應,改用 Once per bar。TradingView 官方有承諾 webhook 多久內送達嗎?
免費方案可以用 webhook 嗎?
官方公布的 webhook 來源 IP 清單是什麼?
CN = webhook-server@tradingview.com) 作為更穩妥的驗證方式。我的 alert 完全沒有觸發,是什麼原因?
Get started
TVSBot 是非託管的 TradingView → 交易所自動下單平台,支援 Binance / OKX / Bitget / Bybit / Gate.io / BingX / Hyperliquid 共 7 家。我們用背景非同步處理避開 TradingView 的 3 秒逾時規則,收到訊號先立刻確認、下單邏輯再交給背景處理。
免費開始