跳至主要内容

即時串流

/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。