數據格式
WebSocket 行情推送使用 JSON 消息。客户端應先按頂層 type 字段區分消息類型,再根據 symbol 和 data 解析具體行情數據。
INFO
不同市場、品類和行情權限下,字段可能缺省、置 0、為空字符串,或只返回部分數組內容。客户端解析時應保持兼容:未知字段忽略,可選字段判空,不要假設所有消息都包含相同字段集合。
通用消息結構
大多數標的級行情推送使用以下結構:
{
"type": "QUOTE",
"symbol": "US.AAPL",
"data": {}
}| 字段 | 類型 | 說明 |
|---|---|---|
type | string | 推送消息類型,例如 QUOTE、ORDER_BOOK、TICKER、KLINE。 |
symbol | string | 標的代碼,格式為 {market}.{code},例如 HK.00700、US.AAPL。部分市場維度消息沒有該字段。 |
data | object | 推送數據主體。不同 type 的結構不同。 |
客户端建議按如下方式分發:
收到 WebSocket message
-> JSON decode
-> switch message.type
-> QUOTE: 解析基礎報價
-> ORDER_BOOK: 解析買賣盤
-> TICKER: 解析逐筆成交
-> KLINE: 解析 K 線
-> BROKER_QUEUE: 解析經紀隊列
-> MARKET_STATE: 解析市場狀態
-> default: 記錄日誌並忽略消息類型
| type | 說明 | 是否綁定標的 |
|---|---|---|
QUOTE | 基礎報價。 | 是 |
ORDER_BOOK | 買賣盤。 | 是 |
TICKER | 逐筆成交。 | 是 |
KLINE | 當前 K 線。 | 是 |
BROKER_QUEUE | 經紀隊列。 | 是 |
MARKET_STATE | 市場狀態。 | 否 |
BROKER_QUEUE 和 MARKET_STATE 通常由服務端基於已訂閲標的、市場和權限決定是否推送,客户端不需要單獨傳入對應訂閲字段。
時間與數值
| 類型 | 約定 |
|---|---|
| 時間戳 | 字段名以 _ms 結尾時,通常表示 Unix 毫秒時間戳。 |
| 價格 | 使用十進制數值。展示時請結合市場價格精度處理。 |
| 成交量 | 使用數值類型。不同市場的單位可能不同,請按市場規則展示。 |
| 金額 | 成交額、成交金額等字段使用數值類型。 |
| 布爾值 | 例如 suspension 表示是否停牌。 |
| 枚舉 | 例如 direction、type、status 等字段使用字符串枚舉。 |
QUOTE 基礎報價
基礎報價推送標的的實時報價和狀態信息。
示例
{
"type": "QUOTE",
"symbol": "US.AAPL",
"data": {
"data_time_ms": 1710000000000,
"last_price": 180.12,
"open_price": 178.5,
"high_price": 181.2,
"low_price": 177.9,
"prev_close_price": 179.66,
"volume": 12345678,
"turnover": 2223456789.12,
"suspension": false,
"sec_status": "NORMAL"
}
}字段說明
| 字段 | 類型 | 說明 |
|---|---|---|
data.data_time_ms | integer | 行情數據時間,Unix 毫秒時間戳。 |
data.last_price | number | 最新價。 |
data.open_price | number | 開盤價。 |
data.high_price | number | 最高價。 |
data.low_price | number | 最低價。 |
data.prev_close_price | number | 昨收價。 |
data.volume | number | 成交量。 |
data.turnover | number | 成交額。 |
data.suspension | boolean | 是否停牌。 |
data.sec_status | string | 證券狀態。 |
data.option_data | object | 期權相關字段。僅適用於期權品類。 |
data.pre_market | object | 盤前行情字段。僅在適用市場和時段返回。 |
data.after_market | object | 盤後行情字段。僅在適用市場和時段返回。 |
data.overnight | object | 夜盤行情字段。僅在適用市場和時段返回。 |
data.future_data | object | 期貨相關字段。僅適用於期貨品類。 |
TIP
QUOTE 字段與 REST 實時報價 的 Quote 基礎報價語義對齊。需要一次性獲取當前完整狀態時,可使用 REST 接口補齊。
ORDER_BOOK 買賣盤
買賣盤推送標的的實時盤口列表。返回檔數由市場、品類和用户行情權限檔(LV1/LV2/LV3)共同決定。
示例
{
"type": "ORDER_BOOK",
"symbol": "HK.00700",
"data": {
"data_time_ms": 1710000000000,
"ask_list": [
{
"price": 320.2,
"volume": 1000,
"order_count": 3
}
],
"bid_list": [
{
"price": 320.0,
"volume": 800,
"order_count": 2
}
]
}
}字段說明
| 字段 | 類型 | 說明 |
|---|---|---|
data.data_time_ms | integer | 買賣盤數據時間,Unix 毫秒時間戳。 |
data.ask_list | object[] | 賣盤列表,按檔位排序。 |
data.bid_list | object[] | 買盤列表,按檔位排序。 |
data.ask_list[].price | number | 賣盤價格。 |
data.ask_list[].volume | number | 賣盤數量。 |
data.ask_list[].order_count | number | 該檔訂單數量。 |
data.ask_list[].mpid | string | 做市商或券商標識。僅部分市場或深度行情返回。 |
data.bid_list[].price | number | 買盤價格。 |
data.bid_list[].volume | number | 買盤數量。 |
data.bid_list[].order_count | number | 該檔訂單數量。 |
data.bid_list[].mpid | string | 做市商或券商標識。僅部分市場或深度行情返回。 |
INFO
普通買賣盤和深度買賣盤都使用 ORDER_BOOK 消息類型。客户端應根據實際返回的檔數、字段和用户權限判斷展示方式。
TICKER 逐筆成交
逐筆成交推送標的的成交明細。服務端可能將多筆成交合併到同一條消息的 ticker_list 中。
示例
{
"type": "TICKER",
"symbol": "US.AAPL",
"data": {
"ticker_list": [
{
"time_ms": 1710000000123,
"sequence": 123456,
"direction": "BUY",
"price": 180.12,
"volume": 100,
"turnover": 18012,
"type": "NORMAL"
}
]
}
}字段說明
| 字段 | 類型 | 說明 |
|---|---|---|
data.ticker_list | object[] | 逐筆成交列表。 |
data.ticker_list[].time_ms | integer | 成交時間,Unix 毫秒時間戳。 |
data.ticker_list[].sequence | integer | 成交序號。可用於去重或排序。 |
data.ticker_list[].direction | string | 買賣方向,常見值:BUY、SELL、NEUTRAL。 |
data.ticker_list[].price | number | 成交價格。 |
data.ticker_list[].volume | number | 成交數量。 |
data.ticker_list[].turnover | number | 成交額。 |
data.ticker_list[].type | string | 成交類型,例如 NORMAL、AUTO_MATCH、ODD_LOT、AUCTION 等。 |
TIP
不要假設一條 TICKER 消息只包含一筆成交。高活躍標的可能批量推送多筆成交,客户端渲染時建議做節流和增量合併。
KLINE 當前 K 線
K 線推送當前週期的 K 線更新。訂閲維度由 symbol + period + adjust 確定。
示例
{
"type": "KLINE",
"symbol": "US.AAPL",
"data": {
"period": "1m",
"adjust": "none",
"kl_list": [
{
"time_ms": 1710000000000,
"open_price": 180.0,
"high_price": 180.5,
"low_price": 179.8,
"close_price": 180.12,
"volume": 12345,
"turnover": 2223456.78
}
]
}
}字段說明
| 字段 | 類型 | 說明 |
|---|---|---|
data.period | string | K 線週期,例如 1m、5m、1D。 |
data.adjust | string | 復權方式,例如 none、forward_exclude_dividend。 |
data.kl_list | object[] | K 線列表。通常包含當前更新的 K 線。 |
data.kl_list[].time_ms | integer | K 線時間,Unix 毫秒時間戳。 |
data.kl_list[].open_price | number | 開盤價。 |
data.kl_list[].high_price | number | 最高價。 |
data.kl_list[].low_price | number | 最低價。 |
data.kl_list[].close_price | number | 收盤價或當前最新價。 |
data.kl_list[].volume | number | 成交量。 |
data.kl_list[].turnover | number | 成交額。 |
data.kl_list[].settle_price | number | 結算價。僅部分期貨等品類返回。 |
常用週期
| 週期 | 說明 |
|---|---|
1m | 1 分鐘 |
3m | 3 分鐘 |
5m | 5 分鐘 |
10m | 10 分鐘 |
15m | 15 分鐘 |
30m | 30 分鐘 |
60m | 60 分鐘 |
120m | 120 分鐘 |
180m | 180 分鐘 |
240m | 240 分鐘 |
1D | 日 K |
1W | 周 K |
1M | 月 K |
1Q | 季 K |
1Y | 年 K |
部分市場或品類可能支持盤前盤後、暗盤、夜盤等擴展週期。是否可用以實際訂閲響應和權限為準。
BROKER_QUEUE 經紀隊列
經紀隊列主要用於部分港股買賣盤場景,表示買賣盤對應的經紀席位隊列。
示例
{
"type": "BROKER_QUEUE",
"symbol": "HK.00700",
"data": {
"data_time_ms": 1710000000000,
"ask_brokers": [
{
"rank": 1,
"broker_id": "8465",
"broker_name": "Broker A"
}
],
"bid_brokers": [
{
"rank": 1,
"broker_id": "8465",
"broker_name": "Broker A"
}
]
}
}字段說明
| 字段 | 類型 | 說明 |
|---|---|---|
data.data_time_ms | integer | 數據時間,Unix 毫秒時間戳。 |
data.ask_brokers | object[] | 賣盤經紀隊列。 |
data.bid_brokers | object[] | 買盤經紀隊列。 |
data.ask_brokers[].rank | integer | 排名。 |
data.ask_brokers[].broker_id | string | 經紀商 ID。 |
data.ask_brokers[].broker_name | string | 經紀商名稱,可能缺省。 |
data.bid_brokers[].rank | integer | 排名。 |
data.bid_brokers[].broker_id | string | 經紀商 ID。 |
data.bid_brokers[].broker_name | string | 經紀商名稱,可能缺省。 |
BROKER_QUEUE 不作為普通訂閲請求字段傳入,通常由服務端基於已訂閲的買賣盤能力、市場和權限決定是否返回。
MARKET_STATE 市場狀態
市場狀態是市場維度消息,不綁定單一標的,因此通常沒有 symbol 字段。
示例
{
"type": "MARKET_STATE",
"data": {
"market": "US",
"status": "OPEN",
"trade_date": "2024-03-08"
}
}字段說明
| 字段 | 類型 | 說明 |
|---|---|---|
data.market | string | 市場標識,例如 US、HK 等。 |
data.status | string | 市場交易狀態。 |
data.trade_date | string | 交易日。 |
客户端收到 MARKET_STATE 後,可用於更新頁面上的市場開收盤狀態、交易日提示或訂閲數據可用性提示。
兼容性建議
- 按
type分發:不同消息結構差異較大,不要用同一個強類型模型解析所有推送。 - 未知字段忽略:服務端可能新增字段,客户端應保持向前兼容。
- 未知
type兼容:記錄日誌後跳過,避免因新增消息類型導致連接處理異常。 - 可選字段判空:期權、期貨、盤前盤後、夜盤、經紀隊列等字段只在適用場景返回。
- 數組按空處理:
ask_list、bid_list、ticker_list、kl_list等數組可能為空。 - 斷線後補齊:推送用於實時更新。斷線、重連或解析失敗後,可使用 REST 實時行情接口獲取最新狀態。