跳到主要内容

实时流

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