一、WebSocket 实时行情
1.2 动态 K 线
开通动态 K 线之后,订阅的产品除了行情,还会持续收到各个周期最新的一根 K 线,用来实时更新 K 线图。
怎么收到
- 动态 K 线要单独开通;没有开通的密钥收不到这类消息,行情照常推送。
- 没有单独的订阅命令:按「连接、订阅与心跳」里的写法订阅产品或市场之后,这些产品的动态 K 线会和行情一起推送,取消订阅后一起停止。
Cmd为 bars 的消息是动态 K 线,Cmd为 rm 的是行情。
消息
发送
/sub/NASDAQ:AAPL{
"Market": "NASDAQ", // 市场代码
"code": "AAPL", // 产品代码
"1": "1791316860,333.63,333.63,333.63,333.63,0,606067.78399", // 1 分钟,7 项的含义见下面
"5": "1791316800,333.63,333.66,333.79,333.63,0,9470495.048838", // 5 分钟
"15": "1791316800,333.63,333.66,333.79,333.63,0,9470495.048838", // 15 分钟
"30": "1791316800,333.63,333.66,333.79,333.63,0,9470495.048838", // 30 分钟
"1h": "1791315000,333.63,333.615,334.38,333.09,0,12491334.148575", // 1 小时
"1d": "1791244800,333.63,332.28,334.38,330.62,0,28787787.644219", // 1 日
"1w": "1791158400,333.63,332.815,336.21,330.62,0,60808820.943908", // 1 周
"1m": "1790812800,333.63,330,336.21,325.81,0,127180831.812139", // 1 月
"Cmd": "bars" // bars 表示动态 K 线
}
- 消息只有一层:
Market和code直接在最外面,用它们认产品(行情消息的这两项在Msg里,两种消息不一样)。 - 除了
Market、code、Cmd,其余每个字段是一个周期,值是这个周期最新的一根 K 线。
周期
| 字段 | 周期 | 对应 HTTP K 线接口的 interval |
|---|---|---|
| 1 | 1 分钟 | 1min |
| 5 | 5 分钟 | 5min |
| 15 | 15 分钟 | 15min |
| 30 | 30 分钟 | 30min |
| 1h | 1 小时 | 1h |
| 1d | 1 日 | 1day |
| 1w | 1 周 | 1week |
| 1m | 1 月 | 1month |
1m是 1 个月;1 分钟是1,不要弄混。- 没有 10 分钟这个周期。
一根 K 线
每个周期的值是一个字符串,7 项用英文逗号 , 隔开,顺序固定,和 HTTP K 线接口返回的一根相同:
| 位置 | 内容 | 说明 |
|---|---|---|
| 1 | 时间 | Unix 秒,这根 K 线的开始时间;日线、周线、月线是那一天的 UTC 零点 |
| 2 | 收盘价 | 还没走完的那一根是最新价 |
| 3 | 开盘价 | |
| 4 | 最高价 | |
| 5 | 最低价 | |
| 6 | 备用 | |
| 7 | 成交量 |
推送规则
- 产品有新的行情时才推送;行情连续变化时,同一个产品大约每 1.5 秒一条。休市时没有推送。
- 平时一条消息带全部 8 个周期,都是各周期当前这一根的最新情况。一根 K 线没走完之前会反复推送:时间不变,收盘价、最高价、最低价、成交量在变。
- 同一根 K 线(同一个周期、时间相同)以最后一次收到的为准,那就是它的最终值;之后这个周期换成新的一根(时间变大)。
- 一根 K 线快走完时,有时会另外收到一条只带这一个周期的消息,是这一根的最后一次更新,同样按上一条处理。
- 按市场订阅时,这个市场里的每个产品都会推送动态 K 线,数据量很大;只用少数产品的 K 线时,请按产品订阅。
怎么用
- 先用「单个产品实时 / 历史 K 线」取历史 K 线,再用推送来更新。同一个周期里:推送的时间和手里最新一根的时间相同,就用推送的替换这一根;比它大,就新增一根。
- 只用其中某几个周期时,读对应的字段,其余的忽略。
- 断线重连后要重新订阅,断线期间的 K 线用 HTTP 接口补上。