訂單
訂閱訂單數據推送
All-In-One Topic: order
Categorised Topic: order.spot, order.linear, order.inverse, order.option
信息
- All-In-One topic 和 Categorised topic 不能放在同一個訂閱請求裡
- All-In-One topic: 允許您監聽所有業務線的websocket更新(現貨, 正向合約, 反向合約, 期權)
- Categorised Topic: 您只能監聽您指定的那個業務的websocket更新
提示
當您提交了撤單請求後, 恰巧此時訂單被撮合了, 那麼您可能會接收到兩條orderStatus=Filled的消息推送。常見的情況是, 一條消息裡包含 "orderStatus=Filled, rejectReason=EC_NoError", 然後另一條消息包含"orderStatus=Filled, cancelType=CancelByUser, rejectReason=EC_OrigClOrdIDDoesNotExist"。
前者表示訂單成交了, 後者表示由於訂單已成交, 導致對應的撤單請求被拒絕了。
響應參數
| 參數 | 類型 | 說明 |
|---|---|---|
| id | string | 消息id |
| topic | string | Topic名 |
| creationTime | number | 消息數據創建時間 |
| data | array | Object |
| > category | string | 產品類型
|
| > orderId | string | 訂單ID |
| > orderLinkId | string | 用戶自定義ID |
| > isLeverage | string | 是否借貸. 僅統一帳戶spot有效0: 否1: 是0 |
| > blockTradeId | string | 大宗交易訂單Id |
| > symbol | string | 合約名稱 |
| > price | string | 訂單價格 |
| > brokerOrderPrice | string | EU流動性經紀商專有字段 |
| > qty | string | 訂單數量 |
| > side | string | 方向. Buy,Sell |
| > positionIdx | integer | 倉位標識。用戶不同倉位模式 |
| > orderStatus | string | 訂單狀態 |
| > createType | string | 訂單創建類型 |
| > cancelType | string | 訂單被取消類型 經典帳戶現貨交易不支持 |
| > rejectReason | string | 拒絕原因 經典帳戶現貨交易不支持 |
| > avgPrice | string | 訂單平均成交價格 "", 以及經典帳戶下部分成交但最終被手動取消的訂單"" |
| > leavesQty | string | 訂單剩餘未成交的數量, 經典帳戶現貨交易不支持 |
| > leavesValue | string | 訂單剩餘未成交的價值, 經典帳戶現貨交易不支持 |
| > cumExecQty | string | 訂單累計成交數量 |
| > cumExecValue | string | 訂單累計成交價值 |
| > cumExecFee | string | inverse, option: 訂單累計成交的手續費.linear, spot: 已棄用. 用cumFeeDetail替代.spot: 表示的是最近一次成交的手續費.execFee字段來獲取每次成交的手續費 |
| > closedPnl | string | 平倉單盈虧, 部分平倉時, 減去了平攤的開倉手續費和期間產生的資金費以及平倉手續費. 該數據和查詢平倉盈虧接口裡的"closedPnl"保持一致 |
| > feeCurrency | string | 已棄用. 現貨交易的手續費幣種. 可以從這裡了解現貨交易的手續費幣種規則 |
| > timeInForce | string | 執行策略 |
| > orderType | string | 訂單類型. Market,Limit. 對於止盈止損單, 則表示為觸發後的訂單類型 |
| > stopOrderType | string | 條件單類型 |
| > ocoTriggerBy | string | 現貨OCO訂單的觸發類型.OcoTriggerByUnknown, OcoTriggerByTp, OcoTriggerBySl經典帳戶現貨不支持該字段 |
| > orderIv | string | 隱含波動率 |
| > marketUnit | string | 統一帳戶現貨交易時給入參qty選擇的單位. baseCoin, quoteCoin |
| > slippageToleranceType | string | 市價單滑點容差類型, TickSize, Percent, UNKNOWN(默認值) |
| > slippageTolerance | string | 滑點容差數值 |
| > triggerPrice | string | 觸發價格. 若stopOrderType=TrailingStop, 則這是激活價格. 否則, 它是觸發價格 |
| > takeProfit | string | 止盈價格 |
| > stopLoss | string | 止損價格 |
| > tpslMode | string | 止盈止損模式 Full: 全部倉位止盈止損, Partial: 部分倉位止盈止損現貨不返回該字段, 期權總是返回"" |
| > tpLimitPrice | string | 觸發止盈後轉換為限價單的價格 |
| > slLimitPrice | string | 觸發止損後轉換為限價單的價格 |
| > tpTriggerBy | string | 觸發止盈的價格類型 |
| > slTriggerBy | string | 觸發止損的價格類型 |
| > triggerDirection | integer | 觸發方向. 1: 上漲, 2: 下跌 |
| > triggerBy | string | 觸發價格的觸發類型 |
| > lastPriceOnCreated | string | 下單時的市場價格 |
| > reduceOnly | boolean | 只減倉. true表明這是只減倉單 |
| > closeOnTrigger | boolean | 觸發後平倉委託. 什麼是觸發後平倉委託? |
| > placeType | string | 期權下單方式. iv, price |
| > smpType | string | SMP執行類型 |
| > smpGroup | integer | 所屬Smp組ID. 如果uid不屬於任何組, 則默認為0 |
| > smpOrderId | string | 觸發此SMP執行的交易對手的 orderID |
| > createdTime | string | 創建訂單的時間戳 (毫秒) |
| > updatedTime | string | 訂單更新的時間戳 (毫秒) |
| > cumFeeDetail | json | linear, spot: 累積交易費詳情, 替代cumExecFee |
訂閱示例
{
"op": "subscribe",
"args": [
"order"
]
}
from pybit.unified_trading import WebSocket
from time import sleep
ws = WebSocket(
testnet=True,
channel_type="private",
api_key="xxxxxxxxxxxxxxxxxx",
api_secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
)
def handle_message(message):
print(message)
ws.order_stream(callback=handle_message)
while True:
sleep(1)
推送示例
{
"id": "5923240c6880ab-c59f-420b-9adb-3639adc9dd90",
"topic": "order",
"creationTime": 1672364262474,
"data": [
{
"symbol": "ETH-30DEC22-1400-C",
"orderId": "5cf98598-39a7-459e-97bf-76ca765ee020",
"side": "Sell",
"orderType": "Market",
"cancelType": "UNKNOWN",
"price": "72.5",
"qty": "1",
"orderIv": "",
"timeInForce": "IOC",
"orderStatus": "Filled",
"orderLinkId": "",
"lastPriceOnCreated": "",
"reduceOnly": false,
"leavesQty": "",
"leavesValue": "",
"cumExecQty": "1",
"cumExecValue": "75",
"closedPnl": "0",
"avgPrice": "75",
"blockTradeId": "",
"positionIdx": 0,
"cumExecFee": "0.358635",
"createdTime": "1672364262444",
"updatedTime": "1672364262457",
"rejectReason": "EC_NoError",
"stopOrderType": "",
"tpslMode": "",
"triggerPrice": "",
"takeProfit": "",
"stopLoss": "",
"tpTriggerBy": "",
"slTriggerBy": "",
"tpLimitPrice": "",
"slLimitPrice": "",
"triggerDirection": 0,
"triggerBy": "",
"closeOnTrigger": false,
"category": "option",
"placeType": "price",
"smpType": "None",
"smpGroup": 0,
"smpOrderId": "",
"feeCurrency": "",
"cumFeeDetail": {
"MNT": "0.00242968"
}
}
]
}