即時串流
/v2/stream 是進行中交易日的 WebSocket 端點,提供新資料列與即時 K 線,支援
歷史接即時。
wss://data.cyberun.cloud/v2/stream
Sec-WebSocket-Protocol: veinmesh.v2
Authorization: Bearer vmk_...
金鑰需要 live 權限、book_snapshot kind 與盤口檔數。權限見
API 金鑰。
訂閱
送一則 JSON:
{"op": "subscribe", "id": "rb", "symbols": ["SHFE.rb2701"], "dataset": "book.snapshot"}
id由你決定,在這條連線上識別訂閱。symbols是公開代號或instrument_id。dataset是book.snapshot。- 加
bars改收 K 線;鍵與/v2/bars相同(type、interval、anchor、adjust、transform)。 - 加
from做歷史接即時:最後一個resume_token,或當天的 RFC 3339 時間點。 fields限制資料列欄位;共同欄位一定會送。numbers是string(預設)或float。
伺服器回:
{"type": "subscribed", "id": "rb", "catalog_version": "..."}
送 {"op":"unsubscribe","id":"rb"} 停止單一訂閱,或 {"op":"ping"} 檢查連線。
一個訂閱屬於一個市場;它的交易日、時區與日曆都是該市場的。要訂閱兩個市場, 請開兩個訂閱。
訊息
資料列。 每筆新資料列與 /v2/data 形狀相同:
{"type": "data", "id": "rb",
"rows": [{"ts": "...", "last": "3061"}], "resume_token": "..."}
有 from 時,會先送漏掉的資料列,再送即時資料。
K 線。 有 bars 時,先送當天目前為止的每根 K 線,之後每次變動送目前這根
(complete: false),收盤再送一次 complete: true。連續合約跟著當天的主力
合約;即時 K 線不做還原調整。contract 欄位指出使用的合約。
心跳。 {"type":"heartbeat","ts":"..."} 會定期送來。
錯誤。 {"type":"error","id":"rb","problem":{...}},problem 形狀與 HTTP
相同。慢用戶端的佇列滿了會收到 resync_required 並關閉連線;資料不會被默默
丟掉。
續傳與重連
每則資料列或 K 線訊息都帶 resume_token。斷線後用
"from": "<resume_token>" 重新訂閱;伺服器會補送漏掉的訊息,再送即時訊息,
不重複。
- token 只在有限時間內有效;更舊的會回
version_unavailable(410);改用 RFC 3339 時間點。 - 重連要用「最後處理完」的 token,不是最後收到的 token,讓處理維持 at-least-once。
- 金鑰被撤銷時,連線會收到錯誤並關閉。
限制
一條連線的訂閱數與商品數都有上限;超過回 429 resource_exhausted。完整清單見限制。
Python
for message in client.stream("SHFE.rb2701"):
for row in message.rows:
print(row["ts"], row["last"])
client.stream(..., bars={"interval": 60}) 改收 K 線。SDK 會在斷線後重連,
從最後收到的資料列接續。需要 websockets extra。見 Python SDK。