跳转至

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,批量默认 600 表示全量
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

消息格式

发送消息(客户端→服务端)

整集合替换订阅subscribeset):

{
  "action": "subscribe",
  "codes": "002281,600000,300750",
  "day": "20260801",
  "limit": 60
}

替换当前全部订阅,对新订阅的股票回发首包快照。

追加订阅add):

{
  "action": "add",
  "codes": "300750"
}

在现有订阅上追加股票,仅对新增股票回发首包快照。

取消订阅unsubscribe):

{
  "action": "unsubscribe",
  "codes": "300750"
}

移除指定股票;不带 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 根),客户端按 tsupsert(合并/覆盖)

{
  "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 仅含发生变化的那根,客户端按 ts upsert 到本地序列。

心跳机制

该接口无显式心跳/ ping-pong 机制。服务端共享生产者以约 0.7 秒间隔持续读取并推送增量数据。连续发送失败达到阈值(默认 3 次)时,服务端主动断开慢连接(关闭码 1013)。

接口说明

  • 共享生产者:同一只股票的 1m 数据由共享生产者统一生产并扇出,连接数与单股计算量解耦
  • 增量推送:按"最后若干根成员内容"比对,分钟内的实时跳动也会推送;更新包 item 仅含变化的那根
  • 背压策略:每连接维护"按 code 覆盖式槽位",发不动时只保最新、丢中间;持续发送失败将主动断开慢连接
  • 单飞机制:同一 id 的新连接会立即顶替旧连接(关闭码 4002),避免切页时连接堆积
  • 数据源:仅从 Redis 读取(不回退 MySQL)
  • 指数特殊映射000001.SH → Redis 使用 1A0001399001.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. 一用户一连接:每个用户用 1 条 WS 连接承载其自选列表,带上 id
  2. 按可见范围订阅:配合虚拟列表,只订阅当前屏幕可见 + 预加载
  3. 滚动时动态调整:用 set/add/unsubscribe 动态调整订阅集合,无需重建连接
  4. 增量按 ts upsert:首包是尾部多根,更新包只含变化的那根,按 ts 合并即可

返回状态

状态码 说明
200 连接成功
401 未认证
403 无权限
4001 认证失败(服务端主动关闭连接)
4002 同一 id 被新连接顶替
1013 慢连接被背压策略主动断开