Vibe-Trading × Tushare stk_auction:A股集合竞价数据与打板选股的从零到可用实战指南
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
9:25,开盘集合竞价的撮合结果出来,个股全天的开盘定位已经定下。做打板、做竞价抢筹的人,第一眼看的就是这份当日竞价成交快照。本文带你把 Vibe-Trading 仓库里的 Tushare 接口stk_auction从零跑通:怎么装依赖、配 Token、拉单日数据、写批量采集脚本,最后把字段变成打板筛选逻辑。
先拿到数据:当日竞价数据怎么拿,最小可运行路径
stk_auction的数据窗口是每天 9:25–9:29,这个时段能取到当日全市场个股和 ETF 的集合竞价成交。拿数据只有三步:
- 装依赖(推荐清华镜像源)并配置 Token;
- 初始化
pro接口实例; - 一行调用取当日快照。
Token 配置:
pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple export TUSHARE_TOKEN=your_token在 Vibe-Trading 里,TUSHARE_TOKEN通过环境变量 schema 统一管理,字段定义在 env_schema.py,预检逻辑在agent/src/preflight.py。官方示例脚本 stock_data_example.py 展示了标准初始化方式,初始化后一行调用即可:
import os import tushare as ts token = os.getenv('TUSHARE_TOKEN') or ts.get_token() pro = ts.pro_api(token) # 取 2025-02-18 当日集合竞价成交,显式指定字段可减小返回体 df = pro.stk_auction( trade_date='20250218', fields='ts_code,trade_date,vol,price,amount,turnover_rate,volume_ratio', ) print(df.head())返回就是 pandas DataFrame。不传任何参数时,返回当日全市场竞价成交;传trade_date取指定日期。
数据字典:stk_auction 的输入参数与输出字段一次看懂
输入参数(4 个全可选,可自由组合)
| 名称 | 类型 | 必选 | 描述 |
|---|---|---|---|
ts_code | str | N | 股票代码(如600071.SH、300053.SZ) |
trade_date | str | N | 交易日期(YYYYMMDD 格式) |
start_date | str | N | 开始日期 |
end_date | str | N | 结束日期 |
组合规则:不传参数取当日全市场(单次最多8000 行);传trade_date取指定日;传start_date+end_date按区间拉取(受8000 行上限约束,建议按日循环);传ts_code只扫单只标的。
输出字段(9 个)
| 名称 | 类型 | 描述 |
|---|---|---|
ts_code | str | 股票代码 |
trade_date | str | 数据日期 |
vol | int | 成交量(股) |
price | int | 成交均价(元) |
amount | float | 成交金额(元) |
pre_close | float | 昨收价(元) |
turnover_rate | float | 换手率(%) |
volume_ratio | float | 量比 |
float_share | float | 流通股本(万股) |
字段间换算关系,直接可用于策略计算:
amount ≈ vol × price,可用来校验数据自洽;volume_ratio= 当日竞价成交量均量 / 过去若干日同期均量,是判断资金抢筹意愿的核心指标;turnover_rate反映竞价阶段筹码换手强度,可辅助区分竞价抢筹 vs 竞价出货。
用 2025-02-18 的官方样例看三行,事实一目了然:
| ts_code | trade_date | vol | price | amount | turnover_rate | volume_ratio |
|---|---|---|---|---|---|---|
| 600071.SH | 20250218 | 8700 | 23.240 | 202188.00 | 0.003090 | 0.150628 |
| 159558.SZ | 20250218 | 18700 | 1.211 | 22645.70 | NaN | NaN |
| 123039.SZ | 20250218 | 20 | 119.777 | 2395.54 | NaN | NaN |
注意:ETF 标的(159/5 开头代码)不返回turnover_rate与volume_ratio,基金没有传统意义的换手率概念,样例里就是 NaN;处理时按代码段过滤或用fillna(0)兜底。样例里123039.SZ竞价金额仅 2395.54 元,属于流动性极差的标段,研究时建议设金额下限。
相邻接口:当日快照 vs 盘后历史,别混用
仓库"打板专题数据"与"特色数据"下共三套竞价接口,容易混淆:
| 接口 | 时效 | 数据内容 | 权限 |
|---|---|---|---|
stk_auction | 当日 9:25–9:29 可获取 | 当日个股/ETF 竞价成交(vol、price、amount、量比、换手率) | 单独开权限;已开通股票分钟权限的用户自动获得 |
stk_auction_o | 每天盘后更新 | 开盘 9:30 集合竞价 OHLCV + vwap | 开通股票分钟权限后可用 |
stk_auction_c | 每天盘后更新 | 收盘 15:00 集合竞价 OHLCV + vwap | 开通股票分钟权限后可用 |
分工很清晰:stk_auction用于盘中决策(盘前抢筹、竞价异动捕捉),stk_auction_o/stk_auction_c用于盘后复盘(历史因子回测)。两个历史接口单次最大返回10000 行,同样支持ts_code/trade_date/start_date/end_date四个入参,可与本文采集框架共用。
从字段到信号:把竞价数据变成打板选股的 4 个方向
字段到手,落地就四条流水线,每条都是"字段组合 + 一个判断阈值":
- 竞价量比放大 + 高开幅度可控:
volume_ratio显著放大(如> 1.5),同时用(price - pre_close) / pre_close计算高开幅度并设上限,量比放大而高开不过激的标的最像资金抢筹信号。 - 竞价金额排序看主攻方向:按
amount排序观察全市场竞价成交额分布,可设5000 万作为"高关注度"过滤线;turnover_rate高开低走的标的要警惕竞价出货。 - 昨日涨停股竞价预筛:与打板专题的 涨跌停和炸板数据(
limit_list_d,提供首封时间、炸板次数、连板数limit_times、封单金额fd_amount)联动——在 9:25–9:29 窗口内扫描昨日涨停股的竞价量比与高开幅度,配合连板天梯做晋级预判。 - 微结构因子入库:把"竞价成交金额占全日成交比例""竞价价格 vs 开盘后价格缺口"加工成因子,接入 Vibe-Trading 的因子回测与策略研究框架,与盘后历史的
stk_auction_o/stk_auction_c拼出完整竞价生命周期。
工程细节:8000 行上限下的竞价量比批量采集
三个工程点,跑批量前必须知道:
- 单次上限 8000 行:全市场单日约6500 行,目前一次能拉完;数据量增长后按日期或代码分批循环,避免静默丢行。
- 权限与限流:该接口为单独开权限数据,已开通股票分钟权限的用户自动获得,无权限调用会返回权限类错误;循环请求建议每次间隔约0.3 秒,避免触发限流。
- 单位坑:
vol单位是股、price单位是元、float_share单位是万股,做金额类聚合前统一单位,否则差 3 个数量级。
可直接运行的按日循环采集函数:
import time import pandas as pd def fetch_auction_between(pro, start_date, end_date, ts_code="", pause=0.3): """按日循环抓取日期区间内的集合竞价成交数据""" from tushare.util import dateu fields = ("ts_code,trade_date,vol,price,amount," "pre_close,turnover_rate,volume_ratio,float_share") frames, day = [], start_date while day <= end_date: frames.append(pro.stk_auction(trade_date=day, ts_code=ts_code, fields=fields)) print(f"{day}: {len(frames[-1])} rows") day = dateu.get_next(day) # 自动跳过周末与节假日 time.sleep(pause) # 控制请求频率,避免触发限流 return pd.concat(frames, ignore_index=True) hist = fetch_auction_between(pro, '20250201', '20250228', ts_code='600071.SH')dateu.get_next依赖交易日历跳节假日;需要更精确控制时,可结合 交易日历(trade_cal)先生成交易日序列再循环。
避坑自查清单:取 stk_auction 数据前必过的 6 问
📌 跑之前把这 6 个问题过一遍:
- 错过 9:25–9:29 窗口怎么办?当日数据仅该时段可取,错过只能等下一交易日。盘前定时任务(cron 或 CI 定时器)应锚定9:25 之后、9:30 连续竞价开始前触发。
- 代码后缀怎么区分市场?
.SH上交所、.SZ深交所、.BJ北交所;ETF 混在同一个 DataFrame 里(如159558.SZ),只研究个股时先按后缀过滤。 - 部分行为何出现 NaN?
turnover_rate和volume_ratio对 ETF 不返回,属正常现象;统计前按代码段过滤或fillna(0)兜底,不要把 NaN 当成 0 参与量比排序。 - 无权限调用会怎样?返回权限类错误而非空数据。本接口是单独开权限的数据,已开通股票分钟权限的用户自动获得,否则需先在 Tushare 平台申请。
- 为什么单次最多 8000 行?接口硬性限量。全市场数据量接近上限时,按日或按代码分批循环,别让截断悄悄发生。
- 单位对了吗?
vol股、price元、float_share万股。竞价金额聚合、竞价占全日成交比例这类计算,先把单位统一再动手。
写在最后
stk_auction是 A 股打板与竞价研究中唯一的"当日竞价实时截面"数据源:8000 行单次上限、4 个灵活入参、9 个输出字段,既撑得起盘前全市场快照,也能按代码扫自选池。下一步就两件事:先跑通单日数据(trade_date+fields各传一次),再依次叠加量比> 1.5、竞价金额> 5000 万、高开幅度阈值这三层过滤,你就有了一套可回测的竞价因子。接口总入口参考 Tushare 技能总览,其余入参细节以仓库内文档为准。
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考