修改委託單
important
- Bybit 使用
AtomicReplaceRequest (XAR)進行委託修改。不支援 FIX 標準的OrderCancelReplaceRequest (G)。 - 提供
OrderID (37)或ClOrdID (11)其中之一來識別委託單。若兩者均提供且不一致,以OrderID為準。 - 僅包含需要修改的欄位,未填寫的欄位保持原值。
- 僅可修改未成交或部分成交的委託單。
- 隊列優先級: 將價格改往更靠近盤口的方向可提高隊列優先級;增加
OrderQty會失去當前隊列位置;減少OrderQty不影響撮合優先級。
訊息類型
AtomicReplaceRequest — MsgType XAR
請求欄位
| Tag | 欄位 | 必填 | 類型 | 說明 |
|---|---|---|---|---|
| 30010 | Category | Y | String | 產品類型,目前僅支援 spot |
| 55 | Symbol | Y | String | 交易對名稱,例如 BTCUSDT |
| 37 | OrderID | N | String | 伺服器委託單 ID,OrderID 或 ClOrdID 至少填一個 |
| 11 | ClOrdID | N | String | 用戶端委託單 ID,OrderID 或 ClOrdID 至少填一個 |
| 38 | OrderQty | N | Qty | 新的委託數量 |
| 44 | Price | N | Price | 新的委託價格 |
| 99 | StopPx | N | Price | 條件委託的新觸發價格 |
| 30026 | TakeProfitPrice | N | Price | 新的止盈觸發價格,當傳"0"時, 表示取消當前訂單上設置的止盈 |
| 30027 | StopLossPrice | N | Price | 新的止損觸發價格,當傳"0"時, 表示取消當前訂單上設置的止損 |
| 30030 | TpLimitPrice | N | Price | 新的止盈限價 |
| 30031 | SlLimitPrice | N | Price | 新的止損限價 |
回應
伺服器回應 OrderAmendAck (XAA):
| Tag | 欄位 | 必填 | 說明 |
|---|---|---|---|
| 37 | OrderID | N | 伺服器委託單 ID。拒絕時不返回 |
| 11 | ClOrdID | N | 原始訂單的 ClOrdID(orderLinkId)。拒絕時不返回,需依照發送順序關聯請求與拒絕回應 |
| 150 | ExecType | N | 受理成功時為 E(PendingReplace)。拒絕時不返回 —— 收到 XAA 但缺少 150/39、且帶有 103/58,即代表本次改單被拒 |
| 39 | OrdStatus | N | 受理成功時為 E(PendingReplace)。拒絕時不返回 |
| 103 | OrdRejReason | N | Bybit 內部錯誤碼(例如 10001)。僅在拒絕時存在 |
| 58 | Text | N | 可讀的拒絕說明。僅在拒絕時存在 |
信息
OrderAmendAck 僅為受理確認(ExecType=E PendingReplace),僅包含最小狀態欄位,不返回完整委託資訊(數量、價格等)。最終修改狀態由後續 ExecutionReport (35=8) 推送給出(在 ResponseMode=1 模式下),或可透過 REST API 查詢。
請求範例
8=FIX.4.4|9=239|35=XAR|34=3|49=FIX_CLIENT|52=20260824-10:37:21.002|56=BYBIT_FIX_SERVER|
30002=1787567841002|30001=5000|
30010=spot|55=BTCUSDT|30006=50fe3e28-f97c-487d-8f5d-8651acde7bc1|
37=2288679064669883136|11=e05649fe-e1a5-482a-821e-68cc25ed8254|38=0.002|10=140|
注意:| 在實際傳輸格式中代表 SOH(0x01)字元。
PendingReplace Ack(ExecType=E)
ExecType=E(PendingReplace)與 OrdStatus=E(PendingReplace)代表伺服器已收到並排隊處理改單,尚未進入終態。
OnlyAcks模式下這是唯一的回應。Everything模式下這條先到,隨後會推送ExecutionReport (35=8)攜帶修改後的訂單狀態。- 速率限制標頭(
30005TraceId、30007BapiLimit、30008BapiLimitStatus、30009BapiLimitResetTimestamp)僅出現在這條 ack 上,後續狀態推播不再攜帶。 - 若請求攜帶
30006 ReqId,此 ack 會原樣回帶;後續狀態推送則不會攜帶30006。
8=FIX.4.4|9=264|35=XAA|34=2|49=BYBIT_FIX_SERVER|52=20260824-10:37:21.258|56=FIX_CLIENT|
30005=6bf19e217c37870d49032dbf7cda90dc|30006=50fe3e28-f97c-487d-8f5d-8651acde7bc1|30007=10|30008=9|30009=1787567841257|
11=e05649fe-e1a5-482a-821e-68cc25ed8254|37=2288679064669883136|150=E|39=E|10=140|
改單後訂單狀態推送範例(ExecType=5)
Everything 模式下,PendingReplace Ack 之後由 ExecutionReport (35=8) 推送修改後的訂單狀態:150=5(Replaced)表示本 report 承載的是 Replace 事件;39=0(New)表示改單後訂單持續狀態仍為 New(UTA 的 OrdStatus 不包含 Replaced)。OrderID 保持不變(改單為原子替換);38 OrderQty/44 Price 等反映改單後的最新值;30039 CreateTime 仍為原始下單時間,60 TransactTime 為改單事件時間。此推送不再攜帶速率限制標頭與 30006 ReqId。
8=FIX.4.4|9=360|35=8|34=3|49=BYBIT_FIX_SERVER|52=20260824-10:37:21.263|56=FIX_CLIENT|
11=e05649fe-e1a5-482a-821e-68cc25ed8254|37=2288679064669883136|150=5|39=0|
30010=spot|55=BTCUSDT|54=1|40=2|38=0.002000|44=50000.0|59=1|30013=UNKNOWN|30014=N|
151=0.002|30041=100.0000000|14=0|30038=0.0000000|
60=20260824-10:37:21.258|30039=20260824-10:36:45.309|
30018=None|30019=N|30046=77307.8|10=213|
失敗回應範例(已拒絕)
客戶端需依發送順序關聯本次改單請求,並透過 103 內部錯誤碼與 58 錯誤描述判斷失敗原因。
8=FIX.4.4|9=239|35=XAA|34=2|49=BYBIT_FIX_SERVER|52=20260820-03:47:07.284|56=FIX_CLIENT|
30005=43a6c52966d9c0f137d9fedf7e8c12a0|30007=10|30008=9|30009=1787197627283|
58=The order remains unchanged as the parameters entered match the existing ones.|103=10001|10=085|