Vibe-Trading 实战:用 Tushare rt_k 接口构建沪深京实时日线行情通道

Vibe-Trading 实战:用 Tushare rt_k 接口构建沪深京实时日线行情通道

【免费下载链接】Vibe-Trading "Vibe-Trading: Your Personal Trading Agent" 【免费下载链接】Vibe-Trading 项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading

本篇技术指南围绕 Vibe-Trading 仓库中 Tushare 数据技能 所收录的 rt_k(实时日线) 接口文档展开,讲解如何通过通配符代码一次提取全市场、全板块或单只股票的实时日 K 线行情,覆盖权限申请、参数语义、字段口径、代码示例与数据解读,并延伸到仓库内 Tushare 行情加载器 的源码实现,帮助你掌握在量化研究、盘中监控与策略回测场景下正确、合规、高效地消费实时行情数据。

一、接口概览:rt_k 是什么,解决什么问题

在 A 股研究流程中,"当日盘中实时行情"和"收盘后的历史日线"是两类完全不同的数据需求。历史日线由 daily 接口提供,T+1 后才有完整数据;而盘中需要的是开盘以来不断滚动的当日快照。Tushare 的 rt_k 接口(文档见 实时日线)正是为后者设计:

  • 接口名rt_k(Realtime Kline 的缩写)
  • 功能:获取实时日 K 线行情,支持按股票代码及股票代码通配符一次性提取全部股票实时日 K 线行情
  • 限量:单次最大可提取 6000 条数据,等同于一次提取全市场
  • 积分:属于单独开权限的数据接口,需要单独申请权限后使用

它的核心价值在于"当日实时截面":每一行代表一只股票从今日开盘到目前为止的累计 OHLCV 快照,因此天然适合构建盘中选股榜单、板块热度监控、异动预警等实时应用,也适合在收盘前进行日线级别的盘面评估。

姊妹接口一并了解:同一目录下还有 实时分钟rt_min,1~60min 实时分钟线,单次最大 1000 行),以及 ETF 的 ETF实时日线rt_etf_k)、指数的 指数实时日线rt_idx_k)、港股的 港股实时日线rt_hk_k),它们与 rt_k 共享同一套"通配符 + 实时快照"设计哲学。

二、调用前置条件:环境、Token 与权限

rt_k 是权限受限接口,使用前需要完成三个前置步骤(与仓库 Tushare 技能快速上手 中描述一致):

  1. 安装 Tushare:推荐 Python 3.7+ 环境,并通过清华 PyPI 镜像安装:
pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 注册并获取 Token:在 Tushare 官网注册账号、完成实名认证后获得个人 token,将其配置为环境变量:
export TUSHARE_TOKEN=your_token
  1. 单独申请 rt_k 接口权限:该接口属于独立计费/权限的数据类别,需参照 Tushare 官方权限列表单独开通后方可调用。

在 Vibe-Trading 仓库中,token 的读取被统一封装:示例脚本 股票数据获取示例 展示了标准初始化方式——优先从环境配置读取 tushare_token,否则回退到 Tushare 本地缓存:

import tushare as ts
from src.config.accessor import get_env_config

token = get_env_config().data.tushare_token or ts.get_token()
pro = ts.pro_api(token)

而仓库的 Tushare 行情加载器 中同样通过 get_env_config().data.tushare_token 获取 token,并用 TUSHARE_TOKEN_PLACEHOLDERS = {"", "your-tushare-token"} 识别占位 token——也就是说,只要 token 还是空字符串或占位符,加载器就判定为"未配置可用数据源"。

三、输入参数:ts_code 的通配符玩法

rt_k 只有一个必选输入参数:

名称类型必选描述
ts_codestrY支持通配符方式,e.g. 所有上交所股票:6*.SH、所有创业板股票3*.SZ、所有科创板股票688*.SH,或单个股票600000.SH

⚠️ 关键注意ts_code 代码一定要带 .SH/.SZ/.BJ 后缀。这是 A 股多市场体系在代码层面的映射规则:

  • .SH — 上交所(6 开头主板、688 开头科创板)
  • .SZ — 深交所(0 开头主板、3 开头创业板)
  • .BJ — 北交所(9 开头)

通配符 * 匹配任意长度的数字前缀,因此可以按前缀 + 交易所后缀组合出任意"板块截面":

通配符表达式覆盖范围
6*.SH上交所全部股票(含主板)
688*.SH上交所科创板股票
3*.SZ深交所创业板股票
0*.SZ深交所主板股票
9*.BJ北交所全部股票
600000.SH单只股票(浦发银行)
600000.SH,000001.SZ多只股票(逗号分隔)

通配符与逗号列表可以混用(见下文接口示例中的全市场写法),实现"一次请求、分层提取"的弹性控制。

四、输出参数:当日实时快照的字段口径

rt_k 返回 12 个字段,默认显示前 8 个(N 标注的 4 个字段需要指定 fields 参数才会返回):

名称类型默认显示描述
ts_codestrY股票代码
nameNoneY股票名称
pre_closefloatY昨收价
highfloatY最高价
openfloatY开盘价
lowfloatY最低价
closefloatY收盘价(最新价)
volintY成交量(股)
amountintY成交金额(元)
numintY开盘以来成交笔数
ask_price1floatN委托卖盘(元)
ask_volume1intN委托卖盘(股)
bid_price1floatN委托买盘(元)
bid_volume1intN委托买盘(股)
trade_timestrN交易时间

理解这份字段需要抓住"实时快照"四个字:

  • close 即最新价:盘中调用时,close 是截至调用时刻的最新成交价,而非收盘价;盘后调用它才收敛为当日收盘价;
  • vol/amount 是累计值:分别为今日开盘以来累计成交量(股)与累计成交金额(元),与 daily 历史接口的当日总量口径一致;
  • num 是成交笔数:开盘以来累计撮合笔数,是衡量活跃度与筹码分散程度的有用信号(如大单拆小单的笔数/金额比值分析);
  • 盘口字段(N 组)ask_price1/ask_volume1(卖一价/卖一量)与 bid_price1/bid_volume1(买一价/买一量)默认不返回,需要时通过 fields 显式请求;
  • trade_time(N 组):该快照对应的交易时间戳,适合记录数据采集时点,供后续做时点对齐与去重。

五、接口示例与完整可运行代码

原文档给出了三类调用形态,这里补充完整初始化与数据处理逻辑,使其可直接运行:

import tushare as ts
from src.config.accessor import get_env_config

token = get_env_config().data.tushare_token or ts.get_token()
pro = ts.pro_api(token)

# 1. 获取今日开盘以来所有创业板实时日线和成交笔数
df = pro.rt_k(ts_code='3*.SZ')
print(df)

# 2. 获取今日开盘以来全市场所有股票实时日线和成交笔数
# (不建议一次提取全市场,可分批提取性能更好)
df = pro.rt_k(ts_code='3*.SZ,6*.SH,0*.SZ,9*.BJ')

# 3. 获取当日开盘以来单个/多只股票实时日线和成交笔数
df = pro.rt_k(ts_code='600000.SH,000001.SZ')

# 4. 需要盘口与时间戳字段时,显式指定 fields
df = pro.rt_k(ts_code='3*.SZ',
              fields='ts_code,name,close,vol,amount,num,'
                     'ask_price1,ask_volume1,bid_price1,bid_volume1,trade_time')

三种形态的使用场景对应关系:

形态适用场景
板块通配符(3*.SZ创业板/科创板等板块级实时监控、板块热度排序
全市场组合(3*.SZ,6*.SH,0*.SZ,9*.BJ全市场扫描、选股榜单(注意分批)
单/多代码(600000.SH,000001.SZ自选股盯盘、持仓实时估值

六、数据示例逐列解读

原文档附带了一段真实返回样本(上交所股票批量提取),这里还原并逐列说明:

     ts_code  name      pre_close   high   open   low  close     vol      amount     num
0    601866.SH  中远海发       2.28   2.28   2.28   2.23   2.24  55845293  125364882  19904
1    601811.SH  新华文轩      15.47  15.59  15.42  15.24  15.46   4169900   64212329  10524
2    601877.SH  正泰电器      22.06  22.10  22.06  21.81  21.89   9816735  215350906  21733
3    601699.SH  潞安环能      11.78  11.77  11.77  11.56  11.61  12121234  140750449  13836
4    601858.SH  中国科传      18.45  18.77  18.56  18.36  18.56   2665300   49383660   7033
..         ...   ...        ...    ...    ...    ...    ...         ...          ...      ...
220  601880.SH  辽港股份       1.50   1.50   1.50   1.46   1.47  79855960  117767408  11820
221  601616.SH  广电电气       4.00   4.05   4.02   3.96   4.03  18984200   75975252  18220
222  601611.SH  中国核建       8.86   8.86   8.86   8.62   8.67  27793715  241360488  24970
223  601218.SH  吉鑫科技       3.00   3.02   2.99   2.96   3.00  10487500   31316964   6327
224  601966.SH  玲珑轮胎      15.31  15.38  15.38  15.18  15.27  11297200  172527086  31828

可以立即从数据中提取的盘面事实:

  • 量价形态:如 601866.SH(中远海发)vol=55,845,293 对应 amount=125,364,882,两者相除可得当日均价 ≈ 2.24 元,与 close 一致,说明当前价格处于当日平均成本附近;
  • 活跃度信号num(成交笔数)结合 vol 可计算"每笔成交量",如 601877.SH(正泰电器)每笔约 452 股,笔数越高说明参与资金越分散,反之则越集中;
  • 日内强弱closepre_close 之差可立即算出涨跌幅,例如 601811.SH(新华文轩)现价 15.46 vs 昨收 15.47,基本持平;而 601858.SH(中国科传)18.56 vs 18.45,上涨约 0.6%;
  • 累计成交规模amount 单位为元,vol 单位为股,可作为资金流与换手分析的原料。

七、仓库源码级解析:rt_k 与 Tushare 加载器的集成关系

rt_k 属于"实时快照"类接口,与回测/历史研究使用的 daily 历史日线属于不同数据管道。在 Vibe-Trading 的 Tushare 行情加载器 中可以看到这种分工:

  • 历史日线走 daily/fund_daily/index_daily/hk_daily 按代码路由_fetch_daily_frame 方法),并配合 adj_factor 复权因子做前复权处理,用于回测的 OHLCV 底座;
  • 分钟级走 stk_mins_fetch_minutes 方法),freq_map = {"1m": "1min", "5m": "5min", "15m": "15min", "30m": "30min", "1H": "60min"}
  • 实时快照(rt_k 等)不进入回测底座,其定位是盘中信号源与监控数据,二者的集成边界清晰。

从源码中还能提炼出与 rt_k 直接相关的工程要点:

  1. Token 就绪检查is_available() 通过 get_env_config().data.tushare_token.strip() 是否为空判断数据源是否可用,实时行情脚本同样应做此前置校验;
  2. 代码分类路由_is_index_is_hk_equity_is_etf_listed 等判定函数体现了"代码后缀 + 数字前缀"的判类范式,与 rt_k 通配符按 .SH/.SZ/.BJ 划分市场的规则一脉相承;
  3. 成交量单位:加载器声明 volume_units = {"a_share": "lots"},而 rt_k 文档明确 vol 单位为"股",两者口径不同,做跨接口数据拼接时务必先做单位归一化,避免把"股"当"手"或反之造成数量级错误。

八、配额与限频管理:从 rt_k 限量看工程化调用纪律

rt_k 单次上限 6000 条、文档建议"分批提取性能更好",这背后是 Tushare 全接口共通的积分/频次配额体系。仓库加载器对此有现成的工程化参考——Tushare 行情加载器 内置了限频识别与退避重试机制:

_RATE_LIMIT_MARKERS = ("每分钟", "每天", "抽取", "访问该接口", "频率", "rate limit", "too many requests")

def _call_with_backoff(fn, /, **kwargs):
    for delay in _RATE_LIMIT_BACKOFF_SECONDS:   # (5.0, 20.0, 40.0)
        try:
            return fn(**kwargs)
        except Exception as exc:
            if not _is_rate_limited(exc):
                raise
            time.sleep(delay)
    return fn(**kwargs)

核心思想可以直接迁移到 rt_k 的调用上:

  • 只重试配额拒绝,不重试真错误:通过错误文本标记("每分钟""频率""rate limit"等)区分"限频"与"符号不存在/参数错误",前者退避重试(5s → 20s → 40s,跨过一分钟窗口),后者立即抛出,避免把坏调用拖成数分钟死等;
  • 分批而非全量:全市场代码拆成 3*.SZ,6*.SH,0*.SZ,9*.BJ 等多个批次顺序拉取,比单次全量更稳、更利于命中配额上限前完成;
  • 分钟窗口意识:退避调度的设计基准是一分钟配额窗口,实时轮询场景下应把轮询周期设计为"足以跨过窗口"的间隔,而不是无脑高频。

九、典型实战组合:实时截面 + 历史底座

rt_k 融入 Vibe-Trading 式的量化工作流,可以形成一套完整的盘中研究管线:

  1. 盘前准备:用 股票列表stock_basic)拉取全市场代码清单,按板块分组为后续分批提取做准备;
  2. 盘中轮询:每 N 分钟以板块通配符调用 rt_k,保留 trade_time 字段做时点标记,写入本地快照库;
  3. 实时计算:基于 close/pre_close 计算涨幅榜,基于 vol/amount 计算资金强度,基于 num/vol 计算笔均量异常,生成盘中异动榜单;
  4. 收盘校验:当日收盘后将 rt_k 末次快照与 历史日线daily)的当日记录做对账,验证快照完整性与字段口径一致性,为回测(经由 Tushare 行情加载器)提供可信底座。

十、注意事项与最佳实践小结

  • 后缀不可省略ts_code 必须携带 .SH/.SZ/.BJ,否则通配符无法正确路由到对应市场;
  • 盘口字段需显式声明ask/bidtrade_time 默认不返回,需要时用 fields 参数指定;
  • 分批优于全量:6000 条上限虽可覆盖全市场,但分批提取更稳健、更利于权限配额管理;
  • 单位口径要归一vol 单位是"股"、amount 单位是"元",与历史接口或回测加载器中的"手/股"口径做拼接时先统一;
  • 权限单独开通rt_k 属独立权限接口,未开通前调用会直接失败,别与基础行情权限混淆;
  • 数据质量先行:使用快照数据做交易决策前,务必结合 trade_time 做时点对齐,并做缺失、重复、异常值的清洗。

通过以上内容,你已经掌握了 rt_k 接口从权限申请、通配符参数、字段口径到实战代码的完整链路,并理解了它在 Vibe-Trading 数据体系中的定位——实时截面数据采集是盘中研究的第一公里,而仓库内 Tushare 技能文档 与其 行情数据参考 是这套体系最直接的接口级手册。

【免费下载链接】Vibe-Trading "Vibe-Trading: Your Personal Trading Agent" 【免费下载链接】Vibe-Trading 项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值