疑難排解 · OKX Webhook

OKX 錯誤碼 54094
冷靜期擴到 REST/WebSocket,webhook 被 server-side 拒單

2026-07-31·9 分鐘閱讀

你把 TradingView alert 接到 OKX,某天開始 webhook 送過去只拿回一個 54094API key 沒過期、IP 白名單沒動、額度也還在——但 OKX 冷靜期 API 拒單這件事從 2026-07-07 起就是系統設計上的預期行為,不是你哪裡設錯。這篇把 OKX 官方《Notice on Upgrade to the Futures Cool-off Period》與 OKX API v5 changelog 那兩份原文,跟你的 webhook payload 對到欄位,把「哪些單會被拒、哪些不會、既有用戶要不要擔心」講清楚。

這篇不評論 OKX 這個機制設計得好不好——冷靜期本身是保護散戶的功能,我們沒有立場否定它。這篇也不教你怎麼繞過去,因為它是 server-side 執行的,沒有任何客戶端做法可以繞。範圍縮在這裡:告訴你 54094 是什麼、你的 webhook 為什麼會踩到、以及可以怎麼調整流程。

先講結論
三件事,重要性排序:第一,只有「開倉/加倉」的非 reduce-only 單會被拒回 54094,你原本要走 reduce-only 的平倉單一律放行;第二,策略單(Strategy Order)與跟單(Copy Trading)不管開平都會被拒——這比 REST 一般單嚴——所以走 OKX 內建策略下單的 bot 完全動不了;第三,如果你是在 2026-07-07 升級前就已經設過冷靜期的舊用戶,你會沿用舊制,只擋 web/app 的手動下單,API 不受影響,直到你主動重設冷靜期為止。

症狀長什麼樣子:HTTP 200 但單沒進去

這個錯誤最容易把人繞暈的地方,是它的 HTTP status code200——不是 4xx、也不是 5xx。你的 HTTP client 會告訴你「請求成功」,但 OKX 回的 JSON body 裡的 sCode(下單細項狀態碼)是 54094,訊息是官方 changelog 原文寫的一句:

text
Order rejected. The cool-off period is active for the current instId.

意思是:這根本不是一筆訂單。OKX 收到你的請求、驗過簽章、跑過風控、然後在下單那一層被冷靜期擋掉——所以整個 HTTP request 的 lifecycle 是「成功」的,但你以為的那筆單根本沒送進撮合。這種情況如果你的 webhook consumer 只看 HTTP status code 就當成成功,就會出現「回應碼是 200,但持倉沒動」——這種錯不會吵,它會安靜地壞掉,一直安靜地壞到你去對帳才發現。

這是不是 OKX 特有的行為?
是。Binance、Bybit、Bitget 目前都沒有把「冷靜期/cool-off」擴到 REST API 的官方公告——它們的冷靜期(如果有)通常只是 UI 上不給你按下單按鈕。OKX 是我們查證過的交易所裡,第一個把這件事拉進 API server-side 拒單邏輯的。要看跨交易所的 webhook 支援情況,可以看 哪些交易所真的支援 TradingView Webhook 訊號?

為什麼會這樣:機制在 API 層,不在你的程式裡

OKX 在 2026-07-03 貼出公告2026-07-07 生效2026-07-16 起在特定地區逐步啟用,把原本只在 web/app 上生效的冷靜期擴到「REST API, WebSocket, third-party authorization (including Broker OAuth, Agent Trade Kit, etc.), trading bots」這幾個管道(原文出自公告第二段)。這意味著:只要你在 OKX 帳號上主動開了冷靜期,這段時間內從任何管道送進來的開倉/加倉單都會被 server-side 拒掉。

官方公告講到哪裡為止?公告白紙黑字寫的是「any orders to open or increase positions submitted through the above channels will be rejected. Orders to reduce or close positions are not affected.」——open/increase 拒、reduce/close 放行。策略單與跟單另有一句「Strategy orders and copy trading orders will be rejected regardless of whether they are for opening or closing positions.」——不管開平一律拒。這兩句是本篇所有推導的基礎,其他都是我們把它跟 webhook payload 對到欄位得出的結論,不是官方原文另外寫的一句。

錯誤碼 54094 本身是 2026-07-07 API changelog 新加進去的,changelog 的 Cool-off period order rejection 段落原文寫著「While a user's cool-off period is active, non reduce-only orders on SWAP and FUTURES instruments covered by the cool-off are rejected server-side.」——所以受影響的品種也框好了:SWAP(永續)與 FUTURES(交割合約)。現貨與選擇權在原文裡沒被列進去。

哪些單會被拒、哪些不會

這張表是把公告與 changelog 兩份原文交叉出來的結果——第一欄是下單管道,後面三欄是三種常見場景。你可以拿它對照自己的部署,看每一條路徑會不會被 54094 擋。

下單管道/類型開倉/加倉reduce-only 平倉策略單(含止盈止損掛單)
Web/App 手動被拒(原本就是這樣)放行被拒
REST API(TradingView webhook → 你的 server → OKX)被拒回 54094放行被拒
WebSocket 下單被拒回 54094放行被拒
Broker OAuth/Agent Trade Kit(第三方授權)被拒回 54094放行被拒
OKX 內建 Trading Bot被拒回 54094放行被拒
Copy Trading(跟單)被拒(不論開平)被拒(不論開平)被拒(不論開平)

OKX 冷靜期升級後受影響範圍。來源:OKX Help Center《Notice on Upgrade to the Futures Cool-off Period》(2026-07-03 發布)+ OKX API v5 changelog 2026-07-07《Cool-off period order rejection》段落。品種:SWAP 與 FUTURES,spot 與 options 不在原文範圍內。查證日期 2026 年 7 月。

策略單為什麼比一般單嚴?
一般 REST 單只擋開/加倉、放行 reduce-only,這裡有明確的例外邏輯可以走。但策略單(含條件單、止盈止損、trailing stop 這類要放在交易所端等觸發的掛單)是「不管開平一律拒」——原文用了 「regardless of whether they are for opening or closing positions」。實務意義是:你如果依賴 OKX 端的止盈止損掛單,冷靜期一開,你不只是「開不了新倉」,連「用 OKX 端保護單去平舊倉」這條路也會斷。所以冷靜期期間,你的止損只能靠客戶端偵測價格 + 主動送 reduce-only market 單這條備援路徑。

TVSBot/TradingView webhook 的 payload 對到哪個欄位

TVSBot 的 webhook payload schema 裡有一個欄位叫 reduce_only,型別 bool、預設 false。這個欄位就是決定 OKX 端會不會把這筆單當「reduce-only 平倉」放行的關鍵——是不是布林 true,效果差非常多:

payload 寫法OKX 冷靜期期間會發生什麼事
action=buy/sell、沒指定 reduce_only{ "action": "buy", "symbol": "BTC-USDT-SWAP" }被拒回 54094——因為 reduce_only 預設是 false
action=close(TVSBot 會自動把它翻成 reduce_only){ "action": "close", "symbol": "BTC-USDT-SWAP" }放行——TVSBot 的下單 service 對 action=close 一律強制帶 reduce_only=true
action=buy/sell、payload 明確帶 reduce_only=true{ "action": "sell", "reduce_only": true }放行——直接寫死是 reduce-only 的平倉單
action=buy/sell、payload 帶 reduce_only=false{ "action": "buy", "reduce_only": false }被拒回 54094——顯式的開/加倉單

對 Pine Script 策略作者的意義是:你如果在 strategy.entry() 觸發的 alert 裡送 webhook,它天然是開/加倉,冷靜期會擋。strategy.close()strategy.exit() 觸發的 alert 如果你在 payload 模板裡有把 action 設成 "close"(或直接寫 reduce_only: true),那條路就會通。這篇講 qty_type 的陷阱裡有 payload 完整欄位對照,一起看比較快。

檢查你自己的 payload 模板
現在打開 TradingView 上一個你在用的 alert,看 Message 那格的 JSON。如果裡面沒有 reduce_only 這個 key,代表你送過去是 false(TVSBot 端的預設值)——冷靜期期間所有這種 alert 都會被 OKX 拒。這件事沒有任何錯誤訊息會提前告訴你,要嘛你自己現在補起來,要嘛下次冷靜期一開你才會用對帳單的形式知道。

三種修法,選一個

收到 54094 之後你只有三種選擇:撤掉冷靜期、等它自然到期、或者把整個下單流程改成「用 reduce-only 平倉為主」的模式。沒有第四種選項——這是 OKX server-side 拒單,客戶端做什麼都沒用。

修法適合的場景限制
撤掉冷靜期你其實不需要冷靜期,是之前為了測試或誤觸開的如果你是 2026-07-07 升級後才設的新版冷靜期,可以主動關掉;如果是升級前設的舊版冷靜期,官方公告明講 current cool-off period cannot be terminated early(現行的冷靜期無法提前中止)——要等
等它自然到期冷靜期本來就是你為了保護自己開的期間內開/加倉一律回 54094,除非改走 reduce-only
改成「客戶端持倉狀態機」+ reduce-only 平倉策略跑久了、無法每次踩到 54094 都手動處理寫程式的成本;並且不能再靠 OKX 端的策略掛單(止盈止損)做保護,要自己在 client 端追行情並送 reduce-only market 單去平——類似 備援設計那篇講的模式

收到 54094 之後的三種修法選擇。實務上大多數 TVSBot 用戶會走第三條——把 payload 改成明確帶 action=close 或 reduce_only=true 的方向,讓平倉路徑不受影響,開倉那邊只能等或關掉冷靜期。查證日期 2026 年 7 月。

既有用戶會不會被影響?

不會,但有條件。官方公告的第三段寫著「Users who configured the cool-off period before this upgrade will remain on the existing service, which only restricts orders placed via the web and app. These users will not be subject to the expanded restrictions introduced in this upgrade.」——2026-07-07 升級前就設過冷靜期的用戶,會沿用舊制(只擋 web/app)直到本輪冷靜期結束。

但接下來會有一個切換點:如果你想要新的完整保護,官方建議「we recommend re-enabling the cool-off period after your current one expires」——舊冷靜期到期後再重新開一次,就會套用新規則。所以「我以前設過冷靜期、我 API 一直正常」這件事,會在你下一次重設冷靜期那一刻自動轉成新制。如果你想維持 API 不被冷靜期影響,就不要重設。

這個「舊制沿用」的保證會持續多久?
官方原文沒有寫終止日。這是官方目前的過渡承諾,不是永久保證——類似的過渡條款過去在其他交易所常常在半年到一年內悄悄消失,實際動手前建議自己再去 OKX 公告頁確認一次是不是還這樣寫。這一段判斷是我們的推論,不是 OKX 白紙黑字寫出來的一句話。

收到 54094 時的排查順序

這張清單是給你收到 54094 時照順序跑一遍用的——不用背,卡在哪一步就停在那裡處理。前三條先確認是不是這件事,後三條決定要怎麼修。

  • 看 HTTP body,不是只看 status code。 OKX 對這個錯回 HTTP 200 + sCode: "54094",只信 HTTP status 的 consumer 一定會漏掉。你的 webhook consumer 一定要 parse JSON body 拿 sCode
  • 確認你的 OKX 帳號目前有冷靜期在跑。 進 OKX web 端 Account > Trading > Cool-off Period,看 status 是不是 Active、剩餘時間多少。如果是 Inactive,那 54094 不是這個原因,去查子帳號設定或 Broker OAuth 的授權範圍。
  • 確認品種是 SWAP 或 FUTURES。 Changelog 只把這兩類寫進覆蓋範圍。如果你的 instIdBTC-USDT(spot)或 options,看到 54094 可能是別的原因,不是這裡討論的機制——回頭去 OKX 官方 API 文件的 sCode 表查一次那個代號目前的最新定義。
  • 看你這筆單是不是 reduce-only。 Payload 裡的 reduce_only 有沒有帶、值是不是 true。TVSBot 用戶把 action 改成 "close" 也算——下單 service 會自動翻成 reduce_only=true
  • 看是不是策略單/跟單。 走 OKX 內建策略下單、或跟單交易的 sub-account,冷靜期期間開平都會被拒。這種情況要嘛切換去自己的 REST 下單、要嘛等冷靜期過。
  • 決定要撤冷靜期還是改流程。 如果是舊版冷靜期,官方明講不能提前中止,只能等;新版可以主動關。長期解法是把策略邏輯拆成「開倉可能被冷靜期擋、平倉一律 reduce-only」,之後再遇到就不會全流程停擺。

誠實的一段:我們也擋不掉這件事

任何跑在 OKX 上的自動化交易系統——包括我們自己的 TVSBot——遇到冷靜期都只能照規則走。這是 OKX server-side 執行的規則,不在客戶端;沒有任何 SaaS、broker、bot 服務能替你繞過去。舉例來說,TVSBot 的做法是在下單前不做冷靜期的預先檢查(OKX 也沒開這種查詢 API),拒單回來後把 54094 的原始訊息保留在該次下單紀錄裡,讓你在 dashboard 上直接看到「這筆為什麼沒進去」——但這只解決了「你比較快知道」的問題,沒有解決「這筆單真的沒下去」的事實。冷靜期就是為了讓你冷靜,任何「幫你自動繞過冷靜期」的服務都跟這個功能設計初衷相反,我們不做,你也不該用做這件事的第三方服務。

常見問題

我沒有主動開過冷靜期,為什麼還會收到 54094?
OKX 官方原文只寫「冷靜期 active 時觸發拒單」,沒有寫「使用者從未設定過冷靜期時會不會誤觸」。如果你確定自己從沒進 Cool-off Period 那一頁按過,先進去確認 status——有可能是子帳號授權時被總帳號代設、或是 Broker OAuth/Agent Trade Kit 授權時附帶開的。這件事查證日期 2026 年 7 月,官方文件目前沒有列出「代設冷靜期」的完整路徑,實務上遇到就是自己去 dashboard 一格一格看。
現貨(spot)會不會被 54094 擋?
不會。API changelog 的原文明確寫 「non reduce-only orders on SWAP and FUTURES instruments covered by the cool-off are rejected server-side」——只包 SWAP(永續)與 FUTURES(交割)。現貨與 options 不在這句話的範圍裡。但這是「目前查證日期為止」的狀態,OKX 之後如果把冷靜期擴到更多品種也不會意外——冷靜期本身是保護功能,擴大是自然方向。
TVSBot 的 dry-run 模式會踩到 54094 嗎?
不會,因為 dry-run 本來就不打真實下單 API——它只在本機模擬 payload 解析、風控、qty 計算,不會走到 OKX server。你要驗證冷靜期期間的行為,唯一的方法是真的送一筆非 reduce-only 的 open 單去測試環境(demo trading)或用小額真實下單。OKX demo 環境的冷靜期是否跟真實環境行為一致,我們沒實測過,這篇不會做判斷。
OKX 端的止盈止損掛單(TP/SL algo order)冷靜期時能不能新增?
不能。這類掛單屬於官方公告分類的「Strategy Order」,原文寫的是「regardless of whether they are for opening or closing positions」——不管你要新增的是保護開倉的止損、還是保護平倉的策略單,冷靜期期間都會被拒。你在冷靜期開始前設好的止盈止損不受影響,OKX 只擋「新增/修改」,不擋既有的觸發。所以進冷靜期前先把該掛的保護單掛好。
既然舊用戶會沿用舊制,我要不要現在就趕快去設一個冷靜期把自己「鎖」在舊制?
不建議。這麼做等於用「開一段冷靜期」的成本去換「未來沿用舊制」的期望——但這個期望是官方過渡承諾,沒有終止日、也沒有承諾永久(見上面「這個舊制沿用的保證會持續多久?」那段的推論)。而且冷靜期期間你自己的手動下單也會被擋。比較實際的做法是把 payload 改成明確標示 reduce_only 的平倉路徑——不管新舊制、不管將來 OKX 怎麼改,你的平倉單都會通。
Binance/Bybit/Bitget 會跟進嗎?
沒有官方公告。這件事沒有任何預告,通常這種 API 層的行為改動會在 changelog 悄悄出現、生效日往前推一到兩週——查證日期 2026 年 7 月,Binance/Bybit/Bitget 三家的 API changelog 都沒有類似機制的預告或 hint。不代表官方承諾永遠都會這樣,只是目前觀察到的現狀。要跟進的話,訂閱它們各自的 API changelog RSS 是最省事的做法。

Get started

想把今天學到的東西自動化跑起來?

把 TradingView 訊號接到 OKX 自動下單——TVSBot 非託管、用你自己的 API key、payload 支援 reduce_only 精細控制、下單前 dry-run、每筆錯誤原文都保留在紀錄裡,收到 54094 你能直接看到是冷靜期還是別的原因。

免費開始使用