訂閱WebSocket
訂閱地址:
WebSocket公共頻道:
主網:
USDT合約: wss://stream.bybit.com/contract/usdt/public/v3
反向合約: wss://stream.bybit.com/contract/inverse/public/v3
USDC合約: wss://stream.bybit.com/contract/usdc/public/v3
期權: wss://stream.bybit.com/option/usdc/public/v3測試網:
USDT合約: wss://stream-testnet.bybit.com/contract/usdt/public/v3
反向合約: wss://stream-testnet.bybit.com/contract/inverse/public/v3
USDC合約: wss://stream-testnet.bybit.com/contract/usdc/public/v3
期權: wss://stream-testnet.bybit.com/option/usdc/public/v3
WebSocket私有頻道:
主網:
統一保證金帳戶: wss://stream.bybit.com/unified/private/v3
合約: wss://stream.bybit.com/contract/private/v3測試網:
統一保證金帳戶: wss://stream-testnet.bybit.com/unified/private/v3
合約: wss://stream-testnet.bybit.com/contract/private/v3
鑒權/認證
公共頻道不需要鑒權,以下部分僅適用於私有頻道的訂閱。
構建連接時,創建鑒權請求。
注意: 如果您正在使用pybit, bybit-api或者其他第三方庫, 您可以忽略此項-因為鑒權已經內建。
{
"req_id": "10001", // 可選項
"op": "auth",
"args": [
"api_key",
1662350400000, //過期時間應當大於當前時間戳
"singature"
]
}
# 基於: https://github.com/bybit-exchange/pybit/blob/master/pybit/_http_manager.py
import hmac
import json
import time
import websocket
api_key = ""
api_secret = ""
# Generate expires.
expires = int((time.time() + 1) * 1000)
# Generate signature.
signature = str(hmac.new(
bytes(api_secret, "utf-8"),
bytes(f"GET/realtime{expires}", "utf-8"), digestmod="sha256"
).hexdigest())
ws = websocket.WebSocketApp(
url=url,
...
)
# Authenticate with API.
ws.send(
json.dumps({
"op": "auth",
"args": [api_key, expires, signature]
})
)
鑒權成功的響應示例
- 合約
- 統保
{
"success": true,
"ret_msg": "",
"op": "auth",
"conn_id": "ced97gevha793pjs1t30-ob"
}
{
"success": true,
"conn_id": "1e4335fffebbf409-00000001-00001a94-b5385accb911ee54-5032c2b9",
"ret_msg": "0",
"type": "AUTH_RESP"
}
簽名生成的示例可以參考這裡。
由於網絡的複雜性,您可能隨時遇到斷連。請參考以下建議確保您能即時接收到推送:
- 通過發送心跳
- 遇到斷連時,立即重新連接
IP限頻
- 不要嘗試頻繁地構建連接與斷開連接
- 不要在5分鐘內構建超過500個連接
如何發送心跳
發送ping的示例
// req_id是可選參數
ws.send(JSON.stringify({"req_id": "100001", "op": "ping"}));
接收到pong的響應示例
- 私有(合約)
- 統保(私有)
- 公有(期貨)
- 公有(期權)
{
"req_id": "test",
"op": "pong",
"args": [
"1671163042443"
],
"conn_id": "ce3e06kfnonvuu2e3j4g-2t5w"
}
{
"args": [
"1671162870671"
],
"op": "pong"
}
{
"success": true,
"ret_msg": "pong",
"conn_id": "13271fcb-53ed-4e80-948e-2bdbe3a6587d",
"req_id": "",
"op": "ping"
}
{
"args": [
"1671117705244"
],
"op": "pong"
}
為了維持連接,我們推薦您每20秒發送一次心跳。
如何訂閱topic
理解Websocket裡的args
通過傳入args來訂閱指定topic
// 訂閱1檔深度推送
{
"req_id": "test", // 可選
"op": "subscribe",
"args": [
"orderbook.1.BTCUSDT"
]
}
通過逗號隔開,可以同時訂閱多個topic或者多個symbol
{
"req_id": "test", // 可選
"op": "subscribe",
"args": [
"orderbook.1.BTCUSDT",
"publicTrade.BTCUSDT",
"orderbook.1.ETHUSDT",
]
}
理解如何取消訂閱
您可以通過發送請求來動態地停止訂閱
{
"op": "unsubscribe",
"args": [
"publicTrade.ETHUSD"
],
"req_id": "customised_id"
}
理解訂閱的響應
訂閱成功後的響應示例
- 私有(合約)
- 私有(統保)
- 公有(期貨)
- 公有(期權)
{
"success": true,
"ret_msg": "",
"op": "subscribe",
"conn_id": "ced97gevha793pjs1t30-ob"
}
{
"success": true,
"conn_id": "1e4335fffebbf409-00000001-00001a94-b5385accb911ee54-5032c2b9",
"type": "COMMAND_RESP"
}
{
"success": true,
"ret_msg": "",
"conn_id": "8876a25d-f0e5-46e0-bccf-313a3c4ad731",
"req_id": "",
"op": "subscribe"
}
{
"success": true,
"conn_id": "aa01fbfffe80af37-00000001-0002fc0c-abef9d34758eb879-2505dda0",
"type": "COMMAND_RESP"
}
訂閱成功後,您將收到結果信息。可以根據響應判斷訂閱是否成功。