1 分钟 K 线推送¶
来源同步:
/Users/mac/Projects/chatgpt-codex/doc/wss_Intraday1m.md所属接口集:
1 分钟 K 线推送
wss://stock-data-api.aibot6.cn/ws/intraday/1m/
认证方式¶
Bearer Token(详见 认证与签名)
接口概述¶
实时推送股票日内 1 分钟 K 线数据。采用单连接 + 动态订阅 + 增量(delta)推送架构:同一只股票的 1m 数据由服务端共享生产者统一读取/序列化一次后扇出给所有订阅连接,避免每连接重复计算导致的爆发式负载。支持单股和批量(最多 60 只)订阅,建连后可动态调整订阅集合。
连接参数¶
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| token | string | 是 | API Token |
| code | string | 否 | 单只股票代码,6 位数字,如 600000;与 codes 二选一 |
| ts_code | string | 否 | 带市场后缀代码,如 600000.SH;与 code 等效 |
| codes | string | 否 | 批量股票代码,逗号分隔,如 002281,600000,300750,最多 60 只 |
| day | string | 否 | 交易日,格式 YYYYMMDD,默认当天 |
| id | string | 否 | 用户标识,同一 id 的新连接会立即顶替旧连接,缺省为 anonymous |
| limit | int | 否 | 仅返回尾部 N 根 K 线;单股默认 120,批量默认 60;0 表示全量 |
| include_eps | int | 否 | 是否包含 EPS,1/0,默认 1(由共享生产者缓存读取,无额外 DB 压力) |
示例连接地址:
wss://stock-data-api.aibot6.cn/ws/intraday/1m/?token=your_token&code=600000&day=20260801&limit=120
wss://stock-data-api.aibot6.cn/ws/intraday/1m/?token=your_token&id=1&codes=002281,600000,300750&day=20260801&limit=60
消息格式¶
发送消息(客户端→服务端)¶
整集合替换订阅(subscribe 或 set):
替换当前全部订阅,对新订阅的股票回发首包快照。
追加订阅(add):
在现有订阅上追加股票,仅对新增股票回发首包快照。
取消订阅(unsubscribe):
移除指定股票;不带
codes/code/ts_code时移除全部。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| action | string | 是 | subscribe/set/add/unsubscribe |
| code | string | 否 | 单股代码 |
| ts_code | string | 否 | 带市场后缀代码 |
| codes | string | 否 | 逗号分隔的多股代码 |
| day | string | 否 | 交易日 |
| limit | int | 否 | 尾部 K 线根数 |
| id | string | 否 | 用户标识 |
| include_eps | int | 否 | 是否包含 EPS |
接收消息(服务端→客户端)¶
单股消息(首包快照 + 增量更新)¶
首包为尾部 limit 根 K 线;增量包仅含发生变化的那根(通常 1 根),客户端按 ts 做 upsert(合并/覆盖)。
{
"code": 1,
"message": "success",
"data": {
"type": "series_1m",
"key": "stockapi:intraday:kline:1m:series:20260801:600000",
"item": [
{"ts": "2026-08-01 09:25:00", "o": 11.20, "h": 11.30, "l": 11.10, "c": 11.25, "v": 12345, "a": 12345678.0},
{"ts": "2026-08-01 09:30:00", "o": 11.25, "h": 11.32, "l": 11.20, "c": 11.30, "v": 23456, "a": 23456789.0}
],
"quote": {
"name": "浦发银行",
"block_name": "上证主板",
"theme_name": "国企改革",
"price": 11.30,
"open": 11.20,
"high": 11.32,
"low": 11.10,
"volume": 70388457400,
"pre_close": 11.10,
"free_float_shares": 21000000000,
"today_vol_ratio": 0.35,
"amount": 23456789.0,
"ts": "2026-08-01 09:31:00",
"eps": 1.85
},
"meta": {
"code": "600000.SH",
"freq": "1m",
"date": "20260801"
}
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
| data.type | string | 数据类型,单股为 series_1m |
| data.key | string | Redis 键名 |
| data.item | array | K 线数据数组 |
| data.item[].ts | string | K 线时间戳 |
| data.item[].o | float | 开盘价 |
| data.item[].h | float | 最高价 |
| data.item[].l | float | 最低价 |
| data.item[].c | float | 收盘价(当前价) |
| data.item[].v | int | 当日累计成交量(股) |
| data.item[].a | float | 当日累计成交金额(元) |
| data.quote | object | 实时行情快照 |
| data.quote.name | string | 股票名称 |
| data.quote.price | float | 最新价 |
| data.quote.pre_close | float | 昨收价 |
| data.quote.eps | float | 每股收益 |
| data.meta | object | 元信息 |
| data.meta.code | string | 带市场后缀代码 |
| data.meta.freq | string | 频率,固定 1m |
| data.meta.date | string | 交易日 |
批量消息(首包快照)¶
{
"code": 1,
"message": "success",
"data": {
"type": "series_1m_batch",
"freq": "1m",
"date": "20260801",
"items": {
"600000.SH": {
"key": "stockapi:intraday:kline:1m:series:20260801:600000",
"item": [{"ts": "2026-08-01 09:25:00", "o": 0, "h": 0, "l": 0, "c": 0, "v": 0, "a": 0.0}],
"quote": {"price": 0, "pre_close": 0, "ts": "2026-08-01 09:31:00"},
"meta": {"code": "600000.SH", "freq": "1m", "date": "20260801"}
}
}
}
}
批量首包按每片 ≤ 10 只股票分片发送,避免大首帧。
批量消息(增量更新)¶
{
"code": 1,
"message": "success",
"data": {
"type": "series_1m_batch_update",
"freq": "1m",
"date": "20260801",
"items": {
"600000.SH": {
"key": "...",
"item": [{"ts": "2026-08-01 10:31:00", "o": 0, "h": 0, "l": 0, "c": 0, "v": 0, "a": 0.0}],
"quote": {},
"meta": {}
}
}
}
}
增量包中每只股票的
item仅含发生变化的那根,客户端按tsupsert 到本地序列。
心跳机制¶
该接口无显式心跳/ ping-pong 机制。服务端共享生产者以约 0.7 秒间隔持续读取并推送增量数据。连续发送失败达到阈值(默认 3 次)时,服务端主动断开慢连接(关闭码 1013)。
接口说明¶
- 共享生产者:同一只股票的 1m 数据由共享生产者统一生产并扇出,连接数与单股计算量解耦
- 增量推送:按"最后若干根成员内容"比对,分钟内的实时跳动也会推送;更新包
item仅含变化的那根 - 背压策略:每连接维护"按 code 覆盖式槽位",发不动时只保最新、丢中间;持续发送失败将主动断开慢连接
- 单飞机制:同一
id的新连接会立即顶替旧连接(关闭码4002),避免切页时连接堆积 - 数据源:仅从 Redis 读取(不回退 MySQL)
- 指数特殊映射:
000001.SH→ Redis 使用1A0001;399001.SZ/399006.SZ/899xxx.BJ自动识别 - 推送节奏:约 0.7 秒(可通过
INTRADAY_1M_PRODUCER_INTERVAL_MS环境变量调整) - 订阅上限:单连接最多订阅 60 只(
INTRADAY_1M_MAX_CODES可调) - 批量分片:首包每片 ≤ 10 只(
INTRADAY_1M_SNAPSHOT_CHUNK可调)
可调环境变量¶
| 环境变量 | 说明 | 默认值 |
|---|---|---|
| INTRADAY_1M_MAX_CODES | 单连接最大订阅股票数 | 60 |
| INTRADAY_1M_SNAPSHOT_CHUNK | 批量首包分片大小 | 10 |
| INTRADAY_1M_PRODUCER_INTERVAL_MS | 共享生产者读取节奏(毫秒) | 700 |
| INTRADAY_1M_PRODUCER_WORKERS | 生产者线程池大小 | 8 |
| INTRADAY_1M_SEND_TIMEOUT_MS | 单帧发送超时(毫秒) | 5000 |
| INTRADAY_1M_MAX_SEND_FAILS | 连续发送失败后断开慢连接 | 3 |
前端调用建议¶
- 一用户一连接:每个用户用 1 条 WS 连接承载其自选列表,带上
id - 按可见范围订阅:配合虚拟列表,只订阅当前屏幕可见 + 预加载
- 滚动时动态调整:用
set/add/unsubscribe动态调整订阅集合,无需重建连接 - 增量按 ts upsert:首包是尾部多根,更新包只含变化的那根,按
ts合并即可
返回状态¶
| 状态码 | 说明 |
|---|---|
| 200 | 连接成功 |
| 401 | 未认证 |
| 403 | 无权限 |
| 4001 | 认证失败(服务端主动关闭连接) |
| 4002 | 同一 id 被新连接顶替 |
| 1013 | 慢连接被背压策略主动断开 |