Data Streaming API
Data Streaming API 使用 MQTT 協議(v3.1.1)透過 TCP/IP 或 WebSocket 推送即時行情數據。用於接收即時報價、快照和逐筆成交數據。
如需按需 HTTP 查詢,請參閱 Data API。
SDK 用戶
Webull SDK 會自動處理 MQTT 連接、認證和訊息解析。請參閱快速入門中的即時串流範例。以下步驟適用於不使用 SDK 的手動整合。
支援的數據
| 市場 | 標的類型 |
|---|---|
| 香港 | 股票、ETF |
| 美國 | 股票、ETF |
| 中國大陸 | A 股(滬深港通) |
| 數據類型 | 說明 |
|---|---|
| QUOTE | 即時買賣盤 |
| SNAPSHOT | 市場快照 |
| TICK | 逐筆成交明細 |
步驟 1:建立 MQTT 連接
連接端點
| 環境 | 協議 | 端點 |
|---|---|---|
| 正式環境 | TCP/IP | data-api.webull.hk:1883 |
| 正式環境 | WebSocket | wss://data-api.webull.hk:8883/mqtt |
| 沙盒環境 | TCP/IP | data-api.sandbox.webull.hk:1883 |
| 沙盒環境 | WebSocket | wss://data-api.sandbox.webull.hk:8883/mqtt |
MQTT 客戶端庫
CONNECT 封包欄位
| 欄位 | 值 |
|---|---|
| ClientId | 您建立的唯一 session_id(也用於訂閱/取消訂閱呼叫) |
| User Name | 您的 App Key |
| Password | 任意值 |
連接規則
- 不要在同一個 App Key 下的多個連接中重用相同的
session_id。使用相同session_id的新連接會斷開前一個連接。 - 每個 App Key 最多支援 5 個並發連接。超過此限制將返回錯誤碼
105。 - 斷開連接後,伺服器會保留連接狀態約 1 分鐘。如果已達到 5 個連接上限,請等待 1 分鐘後再重新連接。
- 伺服器每個連接每秒最多推送 3 次訊息。
連接錯誤碼
| 錯誤碼 | 說明 |
|---|---|
| 0 | 連接已接受 |
| 1 | 不可接受的協議版本 |
| 2 | 無效的 ClientId |
| 3 | App Key 為空 |
| 7 | 連接丟失 |
| 16 | 心跳超時 |
| 100 | 未知錯誤 |
| 101 | 內部錯誤 |
| 102 | 連接已認證 |
| 103 | 認證失敗 |
| 104 | 無效的 App Key |
| 105 | 超過連接限制 |
步驟 2:訂閱行情數據
建立 MQTT 連接後,使用 HTTP API 管理訂閱:
警告
如果連接因網路問題斷開,之前的訂閱不會自動恢復。重新連接後必須重新訂閱。
步驟 3:解析傳入訊息
伺服器推送的每條訊息包含:
- 主題(Topic) — 標識數據類型
- 負載(Payload) — 實際數據,使用 Protocol Buffers 或 JSON 序列化
主題與負載對應關係
| 數據類型 | 主題 | 負載格式 | 說明 |
|---|---|---|---|
| QUOTE | quote | Protobuf | 即時買賣盤 |
| SNAPSHOT | snapshot | Protobuf | 市場快照 |
| TICK | tick | Protobuf | 逐筆成交明細 |
| NOTICE | notice | JSON | 伺服器通知 |
| ECHO | echo | Null | 在線檢查(心跳) |
Protobuf 訊息定義
Basic(所有類型共用)
message Basic {
string symbol = 1;
string instrument_id = 2;
string timestamp = 3;
}
Quote(即時買賣盤)
message Quote {
Basic basic = 1;
repeated AskBid asks = 2;
repeated AskBid bids = 3;
}
message AskBid {
string price = 1;
string size = 2;
repeated Order order = 3;
repeated Broker broker = 4;
}
message Order {
string mpid = 1;
string size = 2;
}
message Broker {
string bid = 1;
string name = 2;
}
Snapshot(市場快照)
message Snapshot {
Basic basic = 1;
string trade_time = 2;
string price = 3;
string open = 4;
string high = 5;
string low = 6;
string pre_close = 7;
string volume = 8;
string change = 9;
string change_ratio = 10;
string ext_trade_time = 11;
string ext_price = 12;
string ext_high = 13;
string ext_low = 14;
string ext_volume = 15;
string ext_change = 16;
string ext_change_ratio = 17;
string ovn_trade_time = 18;
string ovn_price = 19;
string ovn_high = 20;
string ovn_low = 21;
string ovn_volume = 22;
string ovn_change = 23;
string ovn_change_ratio = 24;
}
Tick(逐筆成交明細)
message Tick {
Basic basic = 1;
string time = 2;
string price = 3;
string volume = 4;
string side = 5;
}
通知(JSON)
{
"type": "status",
"rtt": 100,
"drop": 0,
"sent": 0
}
下一步
MQTT 連接建立並完成訂閱後,您將即時接收行情數據。使用 SDK 的完整範例請參閱 Market Data API 快速入門指南。
如果遇到連接或數據傳輸問題,請參閱更多資源獲取支援渠道。