news 2026/9/12 1:04:23

Vibe-Trading 龙虎榜每日数据实战指南:基于 Tushare top_list 接口的 A 股打板数据接入与源码解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vibe-Trading 龙虎榜每日数据实战指南:基于 Tushare top_list 接口的 A 股打板数据接入与源码解析

Vibe-Trading 龙虎榜每日数据实战指南:基于 Tushare top_list 接口的 A 股打板数据接入与源码解析

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

龙虎榜每日统计是 A 股打板(短线题材交易)研究中最重要的数据源之一,它记录了每个交易日因异动而触发信息披露的证券,以及这些证券的成交、龙虎榜买卖额与上榜理由。本文以 Vibe-Trading 仓库中 龙虎榜每日统计单文档 为核心,系统讲解 Tusharetop_list接口的入参、出参、调用方式与数据量纲,并结合仓库内 dragon_tiger_tool.py、tushare_fallbacks.py 及对应测试的源码实现,说明龙虎榜数据在真实交易 Agent 工程中如何落地、如何做字段映射与多数据源回退。读完本文,你将掌握从拉取单日龙虎榜、解读每个字段的业务含义,到批量回灌历史数据、嵌入自动化策略的全链路方法。

接口概览:龙虎榜每日明细是什么

在 Tushare 接口体系中,龙虎榜每日统计单对应的接口名为top_list,属于「股票数据 / 打板专题数据」分类。其核心定义如下(见 SKILL.md 数据接口列表 中 ID 106 一行):

  • 接口名top_list
  • 描述:龙虎榜每日交易明细
  • 数据历史:2005 年至今,覆盖 A 股全部龙虎榜披露历史
  • 限量:单次请求最大返回 10000 行数据,可通过参数循环获取全部历史
  • 积分门槛:用户需要至少 2000 积分才可以调取,具体积分获取办法参见 Tushare 官方「积分获取办法」文档(doc_id=13

与同目录下的 龙虎榜机构交易单文档(接口top_inst)不同,top_list提供的是股票维度的每日上榜明细(一只股票可能因多种理由多次上榜、出现多行记录),而top_inst提供的是营业部席位维度的买卖明细。两者配合使用,可以同时回答"今天哪些股票上了龙虎榜"与"是哪家营业部在买、哪家在卖"两个问题。

输入参数详解

top_list的请求参数非常精简,只有两个:

名称类型必选描述
trade_datestrY交易日期
ts_codestrN股票代码

其中trade_date为必填,格式遵循仓库 Tushare 技能的通用约定:日期使用 YYYYMMDD 紧凑格式(如20180928),这在 SKILL.md 参数格式说明 中有明确约定。ts_code为可选项,格式如002219.SZ(6 位数字 + 点号 + 交易所后缀,.SH代表上交所、.SZ代表深交所)。

组合使用规则:

  • 只传trade_date:返回该交易日全部上榜股票,适合每日收盘后做全市场扫描;
  • trade_date+ts_code:返回指定股票在该日的上榜记录,适合对持仓或候选标的做定向核查。

输出参数详解:14 个字段的业务含义

接口返回一张 DataFrame,每个字段的类型与含义如下(沿用原文档表格并补充量纲说明):

名称类型默认显示描述
trade_datestrY交易日期
ts_codestrYTS 代码
namestrY名称
closefloatY收盘价(元)
pct_changefloatY涨跌幅(%)
turnover_ratefloatY换手率(%)
amountfloatY总成交额(元)
l_sellfloatY龙虎榜卖出额(元)
l_buyfloatY龙虎榜买入额(元)
l_amountfloatY龙虎榜成交额(元)
net_amountfloatY龙虎榜净买入额(元)
net_ratefloatY龙虎榜净买额占比(%)
amount_ratefloatY龙虎榜成交额占比(%)
float_valuesfloatY当日流通市值(元)
reasonstrY上榜理由

值得重点辨析的字段关系:

  • 金额类字段closeamountl_selll_buyl_amountnet_amountfloat_values)均以为量纲。以数据样例中第 1 行000017.SZ 深中华A为例,amount=101054192.0即约 1.01 亿元总成交额。
  • 比率类字段pct_changeturnover_ratenet_rateamount_rate)以百分数为量纲。如net_rate(龙虎榜净买额占比)=net_amount / amount × 100amount_rate(龙虎榜成交额占比)=l_amount / amount × 100。值得注意的是amount_rate可能超过 100(样例中第 0 行为 166.03、第 8 行为 126.16),说明上榜席位间存在对倒/重复计数,龙虎榜买卖额统计口径并非单纯的当日二级市场成交。
  • reason(上榜理由)是驱动因子构建的关键文本字段,常见取值包括:
    • 日涨幅偏离值达到 7% 的前五只证券
    • 日跌幅偏离值达到 7% 的前五只证券
    • 日换手率达到 20% 的前五只证券
    • 连续三个交易日内,涨幅偏离值累计达到 20% 的证券
    • 连续三个交易日内,跌幅偏离值累计达到 20% 的证券
    • 日振幅值达到 15% 的证券等

同一股票可同时满足多条规则,此时会以多行记录出现(如样例第 6、7 行都是002219.SZ 恒康医疗,一条对应单日涨幅偏离、一条对应三日累计涨幅偏离)。

调用方式与数据获取

两种等价调用形式

原文档给出两种完全等价的写法:

pro = ts.pro_api() # 方式一:直接方法调用 df = pro.top_list(trade_date='20180928') # 方式二:通用 query 调用 df = pro.query('top_list', trade_date='20180928', ts_code='002219.SZ')

两种方式返回的都是 pandas DataFrame,pro.query的第一参数传入接口名,其余参数与直接调用完全一致。

前置准备:Token 与环境配置

调用前需完成 Tushare 环境初始化。根据 SKILL.md 快速上手 与 stock_data_example.py 示例脚本,标准流程是:

  1. 安装依赖(推荐从清华 PyPI 镜像安装):
pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 注册 Tushare 账号获取 token,并配置环境变量:
export TUSHARE_TOKEN=your_token
  1. 初始化 pro 接口并读取 token:
import os import tushare as ts token = os.getenv('TUSHARE_TOKEN') or ts.get_token() pro = ts.pro_api(token) df = pro.top_list(trade_date='20180928') print(df.head())

仓库内示例脚本更进一步,会优先通过src.config.accessorget_env_config().data.tushare_token读取配置化的 token,再回退到ts.get_token(),这与生产环境中密钥统一管理的最佳实践一致。

数据样例逐行解读

以下为原文档提供的trade_date='20180928'返回样例(节选关键列,单位如上所述):

trade_datets_codenameclosepct_changeturnover_rateamountl_selll_buyl_amountnet_amountnet_rateamount_ratefloat_valuesreason
20180928000007.SZ全新好7.83-10.000.2413,736,95213,736,9529,071,05522,808,014-4,665,897-33.97166.032.42e9日跌幅偏离值达到7%的前五只证券
20180928000017.SZ深中华A4.669.90577.44101,054,1927,329,63928,361,20035,690,84021,031,56020.8135.321.41e9日涨幅偏离值达到7%的前五只证券
20180928002219.SZ恒康医疗4.3610.10107.11550,236,63141,801,39039,420,85181,222,230-2,380,538-0.4314.768.13e9日涨幅偏离值达到7%的前五只证券
20180928002219.SZ恒康医疗4.3610.10107.11800,737,93567,244,86257,635,001124,879,903-9,609,865-1.2015.608.13e9连续三个交易日内,涨幅偏离值累计达到20%的证券
20180928002892.SZ科力尔29.972.813025.67199,046,72859,732,77830,663,44090,396,230-29,069,340-14.6045.417.89e8日换手率达到20%的前五只证券
20180928002930.SZ宏川智慧30.9910.010612.22226,882,18414,560,10065,026,30179,586,40450,466,21022.2435.081.89e9日涨幅偏离值达到7%的前五只证券

从样例中可以提炼出若干实操要点:

  1. 同日多行 = 多规则命中恒康医疗当日出现两行,分别对应"日涨幅偏离值达到 7%"与"三日累计涨幅偏离达到 20%",两行的amount不同(5.50 亿 vs 8.01 亿),因为三日累计口径覆盖的是区间累计成交额。做统计时若按股票去重,需明确采用哪一行口径。
  2. net_amount符号即多空方向深中华A净买入 2103 万(净买额占比 +20.81%),科力尔净卖出 2907 万(-14.60%),可用于区分"上榜资金进场"与"上榜资金离场"两类标的。
  3. float_values可用于规模分层:同日上榜股中流通市值从 7.65 亿(路畅科技)到 81.3 亿(恒康医疗)不等,可按流通市值切分小盘/中盘样本。

龙虎榜数据在 Vibe-Trading 中的工程化落地

龙虎榜数据不仅是研究文档中的接口说明,在 Vibe-Trading 仓库中已经完成了完整的工程化集成,形成了"工具层 → 适配层 → 数据源回退"的三层架构。

第一层:龙虎榜工具get_dragon_tiger

agent/src/tools/dragon_tiger_tool.py 定义了DragonTigerTool(名称get_dragon_tiger),它是面向 Agent 的统一入口,docstring 明确指出其语义为"获取 A 股龙虎榜(上海/深圳)披露榜单":

  • 必选参数date(YYYY-MM-DD 格式交易日期);
  • 可选参数code(A 股代码或裸代码,如600519.SH600519);
  • 不传code:返回当日全市场上榜证券列表(最多 200 条,_MAX_APPEARANCES);
  • 传入code:额外返回该证券按净买卖额排序的前 30 个营业部席位(_MAX_SEATS)。

主数据源为东方财富 datacenter API(RPT_DAILYBILLBOARD_DETAILS/RPT_BILLBOARD_TRADEDETAIL两个报表,走共享限流的eastmoney_client)。工具内部把date统一规范化为YYYY-MM-DD紧凑格式(_compact_date),并把600519.SH之类的带后缀代码剥成裸代码(_bare_code),保证与下游适配层的数据格式一致。

第二层:Tushare 回退适配fetch_dragon_tiger

当东财数据源失败时,工具会自动降级到 Tushare。降级逻辑在 agent/src/tools/dragon_tiger_tool.py 的 execute 方法:捕获东财请求异常后调用tushare_fallbacks.fetch_dragon_tiger,成功时在返回 JSON 中标记"source": "tushare"并附上warnings提示。这正是本文主题top_list接口在仓库中最直接的调用点。

agent/src/tools/tushare_fallbacks.py 的 fetch_dragon_tiger 函数 完整展示了top_listtop_inst的字段映射逻辑:

def fetch_dragon_tiger(trade_date: str, code: str | None) -> dict[str, Any]: compact = _compact_date(trade_date) # 归一化为 YYYYMMDD ts_code = _ts_code(code) if code else None # 裸代码补全交易所后缀 pro = _pro_api() kwargs: dict[str, str] = {"trade_date": compact} if ts_code: kwargs["ts_code"] = ts_code appearances_raw = _records(pro.top_list(**kwargs)) # ← 本文核心接口 appearances = [ { "code": str(row.get("ts_code", "")).split(".", 1)[0] or None, "name": row.get("name"), "close": row.get("close"), "change_pct": row.get("pct_change"), "net_buy": row.get("net_amount"), "buy_amount": row.get("l_buy"), "sell_amount": row.get("l_sell"), "turnover": row.get("amount"), "reason": row.get("reason"), } for row in appearances_raw ] ...

这段代码对理解top_list的工程使用极具参考价值:

  • 日期归一化:外部传入2024-01-0220240102都会被统一成 Tushare 要求的YYYYMMDD紧凑格式;
  • 代码补全_ts_code()根据 6 位数字前缀推断交易所后缀(5/6/9.SH0/2/3.SZ4/8.BJ),把裸代码600519补成600519.SH
  • 字段重命名:Tushare 的pct_change → change_pctnet_amount → net_buyl_buy → buy_amountl_sell → sell_amountamount → turnover,对外暴露统一 schema;
  • 席位明细:传入ts_code时还会调用pro.top_inst(即 龙虎榜机构交易单文档 中的接口),把exalter(营业部名称)、side(买卖方向)、buysellnet_buy映射为席位数组。

第三层:测试保障

仓库用内存假数据对映射逻辑做了完整验证,见 test_tushare_fallbacks.py 中的 test_dragon_tiger_maps_top_list_and_top_inst:通过SimpleNamespace伪造top_list/top_inst返回值,断言fetch_dragon_tiger正确完成日期格式、代码剥离、字段重命名与席位组装。该测试全程不触网、不需要真实 token,验证了top_list各字段到统一 schema 的映射正确性——这也是使用 Tushare 数据时的推荐做法:把数据源 API 隔离在适配层后面,用契约测试锁定字段映射

实战场景:批量回灌历史龙虎榜数据

由于单次请求最多返回 10000 行,而一个交易日全市场龙虎榜通常只有几十到几百行,top_list的 10000 行限额基本不会成为障碍;但若要拉取 2005 年至今的全部历史,仍应"按交易日逐日循环 + 本地落盘"。参考 SKILL.md 中"通过参数循环获取全部历史"的说明,一个稳健的回灌流程是:

import os import time import pandas as pd import tushare as ts pro = ts.pro_api(os.getenv('TUSHARE_TOKEN')) # 先用交易日历接口取全量交易日,或维护一个交易日期列表 trade_dates = [...] # 例如来自 pro.trade_cal 的 YYYYMMDD 序列 frames = [] for d in trade_dates: try: df = pro.top_list(trade_date=d) except Exception as exc: print(f"{d} failed: {exc}") # 按错误码做退避重试或跳过 time.sleep(1) continue if df is not None and not df.empty: frames.append(df) time.sleep(0.3) # 注意 Tushare 频控 history = pd.concat(frames, ignore_index=True)

实操注意事项:

  1. 频控与重试:Tushare 对高积分用户有较高的日调用量,但仍建议在循环中加入 sleep 与异常重试,避免触发限流被临时封禁;
  2. 增量更新:生产环境建议记录本地最大trade_date,每日收盘后(一般 18 点后数据更新完毕)仅增量拉取最近交易日,而非全量重跑;
  3. 字段落库口径ts_code应保留后缀以区分沪深,reason建议原样存储便于后续文本分类,金额字段统一按元存储。

与其他打板专题接口的联动

龙虎榜数据在打板研究中的价值往往通过组合释放。仓库 打板专题数据目录 下还有一批可与之联动的接口:

  • 龙虎榜机构交易单(top_inst,5000 积分):营业部维度明细,side字段区分买入/卖出前五席位,配合top_list可还原"游资买、机构卖"等资金博弈结构;
  • 市场游资最全名录(hm_list:游资分类名录,可与席位名称做匹配,识别知名游资动向;
  • 游资交易每日明细(hm_detail:每日游资交易明细,数据自 2022 年 8 月开始;
  • 涨停股票连板天梯(limit_step:每日连板进阶统计,用于判断情绪周期与题材强度;
  • 涨跌停和炸板数据(limit_list_d:涨停、跌停、炸板统计。

一个典型的打板研究流水线是:用limit_step/limit_list_d定位当日市场情绪与连板梯队 → 用top_list找出上榜且net_amount显著为正的标的 → 用top_inst+hm_list判断主导资金属性 → 结合daily日线数据回看价格位置。这条链路正是 Vibe-Trading 将 Tushare 数据接口文档 完整沉淀为 Agent 可检索技能的意义所在。

常见问题与注意事项

  1. 积分不足报错top_list要求至少 2000 积分,低于门槛会返回权限类错误。可先通过积分获取办法提升积分,或改用仓库内基于东财免费接口的get_dragon_tiger工具(dragon_tiger_tool.py 主路径无需积分、只读、走共享限流)。
  2. amount_rate超过 100% 的解释:龙虎榜成交额占比基于上榜席位买卖额汇总计算,席位间存在对倒交易时占比可超 100%,属正常现象,做因子时不宜直接当作普通占比截断。
  3. 同日多行去重:同一股票因命中多条规则出现多行时,需明确去重口径(按reason保留一条、或按口径拆分统计),否则会出现重复计数。
  4. 历史数据完整性:数据自 2005 年开始,早期年份披露规则与近年不同(如深交所与上交所规则差异),做长周期回测时建议按披露规则变化分段处理。
  5. 字段量纲:金额单位为元、比率单位为百分数,跨接口拼接时需与moneyflow(万元/百万元)等其他 Tushare 接口保持一致换算,避免数量级错误。

小结

本文以 龙虎榜每日统计单文档 为主线,完整覆盖了 Tusharetop_list接口的参数、字段、调用与数据解读,并通过 Vibe-Trading 仓库中的 dragon_tiger_tool.py、tushare_fallbacks.py 与 test_tushare_fallbacks.py 展示了从裸接口到生产级 Agent 工具的完整链路:日期与代码归一化、字段映射、数据源回退、契约测试。无论是手写脚本做研究,还是在 Vibe-Trading 中通过get_dragon_tiger工具直接驱动 Agent 获取龙虎榜情报,本文给出的调用范式与字段语义都能直接复用。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 0:58:10

Hadoop真实疾病数据处理全链路:从CSV到热力图

简介:本资源是一套基于Hadoop构建的疾病信息统计平台完整毕业设计项目,面向计算机、人工智能、自动化等专业本科生及初学者,解决海量医疗数据分布式存储、清洗与多维统计分析的实际问题,适用于课程设计、期末大作业及毕设参考。压…

作者头像 李华
网站建设 2026/9/12 0:49:04

039、Agent的记忆持久化:Redis与SQLite

039、Agent的记忆持久化:Redis与SQLite 那天下午我差点把服务器砸了。 客户那边报了个诡异的问题:Agent跟用户聊了二十分钟,一切正常。但只要服务一重启,Agent就像失忆了一样,用户刚才报的工单号、车牌号、甚至自己刚才…

作者头像 李华
网站建设 2026/9/12 0:33:52

Vue2+SpringBoot2.7篮球社区实战项目解析

简介:这是一套面向Java初学者与毕业设计学生的完整篮球论坛系统实战项目,基于SpringBootVue全栈技术栈开发,覆盖课程设计、期末大作业及毕业设计全流程需求。资源包共705个文件,含67个Java后端核心代码、33个Vue前端组件、164个JS…

作者头像 李华
网站建设 2026/9/12 0:32:18

测井岩性分类:物理建模与XGBoost融合的开源实现

简介:本资源是一套面向石油地质工程师、测井数据处理初学者及高校地球物理专业学生的测井综合实践工具包,聚焦测井数据处理、岩性识别与解释核心能力培养。包内共263个文件,以87个C源码(cpp)和86个头文件(h…

作者头像 李华