实时流
/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。