Vibe-Trading 中 Tushare IPO 新股上市数据接口实战指南:基于 new_share 的 A 股打新研究
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
本篇技术指南以 Vibe-Trading 仓库内置的 Tushare 数据技能文档(IPO新股上市.md)为核心,完整讲解new_share接口的权限门槛、输入输出参数、调用示例与返回数据解读,并结合仓库源码说明如何在 Vibe-Trading 的数据链路中配置 token 并获取 A 股新股发行数据。读完本文,你将掌握用 Tushare 拉取新股上市列表、分析发行规模与定价的全套可运行方案。
接口概览:new_share 是什么
new_share是 Tushare 提供的新股上市列表接口,描述为"获取新股上市列表数据",位于股票数据 → 基础数据分类下,接口 ID 为 123(见 Tushare 技能总览 中的数据接口列表)。
该接口返回每只新股的申购代码、上网发行日期、上市日期、发行总量、发行价格、市盈率、个人申购上限、募集资金与中签率等核心打新要素,是构建 A 股打新日历、新股收益归因和次新股研究的基础数据来源。
限量与积分门槛(重要前提)
使用该接口前必须确认账户权限满足以下两条硬性约束:
- 限量:单次调用最大返回 2000 条,总量不限制。即通过按日期区间分多次请求,可以拉取全量历史新股发行数据。
- 积分:用户需要至少 120 积分才可以调取该接口。积分获取办法需在 Tushare 官方积分说明文档中查看(Tushare 平台按用户贡献与充值发放积分,不同积分等级对应不同接口权限,本仓库不负责积分发放)。
从源码实现看,Tushare 在 Vibe-Trading 中是 A 股数据的默认路由来源之一:market_data.py 中的detect_source()在无法匹配其他数据源模式时返回"tushare",且项目中 A 股数据源默认优先使用 Tushare(见 env_schema.py 的MARKET_DATA_ORDER_A_SHARE注释)。因此积分与 token 是否就绪,直接影响 A 股数据的可用性。
环境准备:token 配置与预检
在调用new_share前,需要完成 Tushare 依赖与 token 的配置。仓库内 Tushare 技能文档(SKILL.md)给出了标准流程:
# 安装 tushare(推荐使用清华 PyPI 镜像) pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple # 配置 token 环境变量(在 Tushare 官网注册后获取) export TUSHARE_TOKEN=your_tokenVibe-Trading 对 token 的管理方式如下:
- 配置字段:env_schema.py 中定义了
tushare_token: str = Field(alias="TUSHARE_TOKEN", default=""),即通过环境变量TUSHARE_TOKEN注入,允许为空。 - 预检机制:preflight.py 的
_check_tushare()会检查 token 是否配置:未配置或为占位符your-tushare-token时返回not_configured,影响提示为 "A-share data unavailable";已配置但未安装包时返回skipped;配置完好则返回ready。 - 脚本示例:股票数据获取示例 展示了两种取 token 的方式——优先从项目配置
get_env_config().data.tushare_token读取,否则回退到ts.get_token(),随后初始化pro = ts.pro_api(token)。
初始化完成后,即可通过pro对象调用new_share接口。
输入参数详解
new_share仅有两个可选输入参数,均为日期区间限定,格式为YYYYMMDD:
| 名称 | 类型 | 必选 | 描述 |
|---|---|---|---|
| start_date | str | N | 上网发行开始日期 |
| end_date | str | N | 上网发行结束日期 |
要点说明:
- 两个参数都可省略:不传时返回全量新股列表(受单次 2000 条上限约束)。
- 日期严格遵循 Tushare 统一格式
YYYYMMDD(如20180901),与仓库内 Tushare 技能文档的"参数格式说明"一致:日期一律使用该八位数字格式,股票代码使用ts_code格式(如000001.SZ、600000.SH),返回格式为 pandas DataFrame。 - 建议按区间分批请求以规避 2000 条上限并降低服务端压力,例如逐月或逐季度拉取后拼接。
输出参数详解
接口共返回 12 个字段,覆盖申购、发行、上市三个阶段的关键信息:
| 名称 | 类型 | 默认显示 | 描述 |
|---|---|---|---|
| ts_code | str | Y | TS股票代码 |
| sub_code | str | Y | 申购代码 |
| name | str | Y | 名称 |
| ipo_date | str | Y | 上网发行日期 |
| issue_date | str | Y | 上市日期 |
| amount | float | Y | 发行总量(万股) |
| market_amount | float | Y | 上网发行总量(万股) |
| price | float | Y | 发行价格 |
| pe | float | Y | 市盈率 |
| limit_amount | float | Y | 个人申购上限(万股) |
| funds | float | Y | 募集资金(亿元) |
| ballot | float | Y | 中签率 |
字段含义与使用提示:
- ts_code / sub_code:
ts_code是 Tushare 统一股票代码(带交易所后缀,如002939.SZ、601162.SH),可用于与行情接口(如daily、daily_basic)做关联;sub_code是申购代码,部分新股申购代码与上市代码一致(如002939.SZ),沪市新股常带 78/73 前缀(如780162、732583)。 - ipo_date / issue_date:
ipo_date为上网发行日(申购日),issue_date为上市日期。数据示例中部分记录issue_date为None,表示截至数据快照时尚未上市,做新股日历排期时需注意该空值。 - amount / market_amount:单位均为万股。
amount为发行总量,market_amount为上网发行(面向公众投资者)的数量,二者差值体现网下配售比例。 - price / pe:发行价格与发行市盈率。A 股主板新股发行市盈率长期接近 23 倍窗口(见下文数据示例),银行股等大盘金融股发行 PE 通常显著偏低。
- limit_amount:单账户个人申购上限(万股),用于计算顶格申购市值门槛。
- funds:募集资金(亿元)。部分记录为 0.000 时表示尚未公布或数据缺失。
- ballot:中签率,是衡量新股申购热度与中签概率的关键指标,可用于次新股打新收益回测。
接口示例与完整可运行代码
官方接口示例(原样保留):
pro = ts.pro_api() df = pro.new_share(start_date='20180901', end_date='20181018')结合仓库的 token 管理与异常处理习惯(参照 stock_data_example.py),给出可直接运行的完整版本:
import os import datetime import tushare as ts import pandas as pd # 方式一:从 Vibe-Trading 配置读取 token try: from src.config.accessor import get_env_config token = get_env_config().data.tushare_token or os.getenv('TUSHARE_TOKEN') or ts.get_token() except ImportError: # 方式二:直接使用环境变量或本地缓存 token token = os.getenv('TUSHARE_TOKEN') or ts.get_token() pro = ts.pro_api(token) # 按区间获取新股上市列表 df = pro.new_share(start_date='20180901', end_date='20181018') print(df.head()) print(df.shape) # 行数应不超过 2000 print(df.dtypes) # 检查各字段类型 # 字段裁剪:只保留核心打新要素 cols = ['ts_code', 'sub_code', 'name', 'ipo_date', 'issue_date', 'amount', 'market_amount', 'price', 'pe', 'limit_amount', 'funds', 'ballot'] print(df[cols].to_string())如需拉取全量历史数据,可用日期循环分批请求再拼接:
frames = [] start = datetime.date(2010, 1, 1) end = datetime.date.today() step = datetime.timedelta(days=90) cur = start while cur < end: nxt = min(cur + step, end) part = pro.new_share(start_date=cur.strftime('%Y%m%d'), end_date=nxt.strftime('%Y%m%d')) if part is not None and not part.empty: frames.append(part) cur = nxt full = pd.concat(frames, ignore_index=True).drop_duplicates('ts_code') print(full.shape)数据示例解读
官方数据示例(2018 年 9~10 月期间新股)展示了一批典型记录,以下为部分摘录与分析:
| ts_code | sub_code | name | ipo_date | issue_date | amount(万股) | price | pe | funds(亿元) | ballot |
|---|---|---|---|---|---|---|---|---|---|
| 002939.SZ | 002939 | 长城证券 | 20181017 | None | 31034.0 | 6.31 | 22.98 | 19.582 | 0.16 |
| 002940.SZ | 002940 | 昂利康 | 20181011 | 20181023 | 2250.0 | 23.07 | 22.99 | 5.191 | 0.03 |
| 601162.SH | 780162 | 天风证券 | 20181009 | 20181019 | 51800.0 | 1.79 | 22.86 | 0.000 | 0.25 |
| 002936.SZ | 002936 | 郑州银行 | 20180907 | 20180919 | 60000.0 | 4.59 | 6.50 | 27.540 | 0.25 |
| 300760.SZ | 300760 | 迈瑞医疗 | 20180927 | 20181016 | 12160.0 | 48.80 | 22.99 | 59.341 | 0.08 |
从数据中可以读到以下规律:
- 发行市盈率:非金融新股发行 PE 普遍贴近 22.86~22.99 倍(当时主板的发行市盈率约束窗口),而银行股(郑州银行 6.50 倍、长沙银行 6.97 倍)受行业估值中枢影响显著低于窗口。
- 发行规模与中签率:发行总量越大(如天风证券 51800 万股、郑州银行 60000 万股),中签率越高(均为 0.25);发行量小的个股(如昂利康 2250 万股)中签率低至 0.03。
- 募集资金:迈瑞医疗单笔募集 59.341 亿元,为样本中的募资大户;天风证券 funds 为 0.000 属于缺失值,分析时需做空值处理。
- 上市日期缺失:长城证券
issue_date为 None,说明截至数据快照时尚未上市,需后续补拉或结合stock_basic的list_date交叉验证。
在 Vibe-Trading 中的定位与扩展阅读
- 技能体系:本文档隶属于
tushare数据源技能(agent/src/skills/tushare/SKILL.md),该技能以标准化 API 方式统一对外服务数据资产,new_share与stock_basic(股票列表)、trade_cal(交易日历)、daily(历史日线)等同属"股票数据/基础数据"与"行情数据"分类,可组合构建新股上市后行情追踪流程。 - 数据路由:Vibe-Trading 的 market_data.py 默认将未匹配符号路由到
tushare,且 A 股数据源排序默认以 tushare 优先(见 env_schema.py),因此 token 就绪后new_share可作为新股基础数据的稳定来源。 - 预检保障:运行前可通过 preflight.py 的 Tushare 检查确认 token 与依赖包状态,避免运行时才发现 A 股数据不可用。
注意事项小结
- 积分门槛:至少 120 积分才可调用,未达标账户会报权限错误,应先确认积分等级。
- 单次限量:单次最多 2000 条,全量数据需按日期区间分批拉取;建议以 90 天左右为步长循环请求。
- 日期格式:输入日期必须为
YYYYMMDD八位数字字符串。 - 空值与缺失:
issue_date、funds等字段可能出现None或 0.000,分析前需处理。 - 数据更新:该接口属于基础数据类接口,新股发行数据按交易所披露节奏入库,做实时打新日历时应结合当日更新频率确认数据新鲜度。
- 单位口径:发行量与申购上限单位为万股、募集资金单位为亿元、中签率为百分比数值(如 0.16 表示 0.16%),统计汇总前务必统一量纲。
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考