基于 Tusharemargin_secs的融资融券标的(盘前)数据接口实战指南
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
本指南围绕 Vibe-Trading 仓库中 Tushare 技能库的"融资融券标的(盘前)"接口文档展开, 完整讲解 margin_secs 接口的限量规则、全部输入/输出参数、盘前批量提取方法, 并延伸到与之配套的 margin / margin_detail 接口,最后结合本仓库的技能加载机制说明其实际落地方式。融资融券标的名单是 A 股两融研究的起点:它决定了"哪些证券可以融资买入、哪些证券可以融券卖出",也是计算个股两融余额覆盖率、构建标的池、规避非标的交易的前提。Tushare 提供的margin_secs接口(融资融券标的,盘前更新)每天开盘前刷新沪深京三大交易所的标的清单(含 ETF),是 Vibe-Trading 仓库中 tushare 技能库(SKILL.md)「股票数据 / 两融及转融通」分类下的核心接口之一(接口 ID 326)。本文将基于仓库内该接口的完整文档(融资融券标的(盘前).md.md)),逐项拆解其参数、用法与实战扩展。
一、接口速览
margin_secs接口的定位与基本约束如下表所示(内容直接取自原文档):
| 项目 | 说明 |
|---|---|
| 接口名 | margin_secs |
| 描述 | 获取沪深京三大交易所融资融券标的(包括 ETF),每天盘前更新 |
| 限量 | 单次最大 6000 行数据,可根据股票代码、交易日期、交易所代码循环提取 |
| 权限 | 2000 积分可调取,5000 积分无总量限制,积分越高权限越大 |
三点需要特别留意:
- 覆盖交易所:上交所(SSE)、深交所(SZSE)、北交所(BSE)三大市场全部覆盖,且标的类型不仅包括股票,还包括 ETF;
- 更新时点:数据在每个交易日的盘前更新,即"今日名单"在开盘前即可取到,适合做盘前标的池过滤与盯盘清单生成;
- 积分门槛:2000 积分起即可调用,5000 积分解锁无限量提取,因此若需要全市场全历史标的名单,需要 5000 积分权限并按交易所/日期分页循环拉取。
二、环境准备:Token 初始化与 Pro 接口
在调用margin_secs之前,需要先完成 Tushare 环境初始化。仓库的 tushare 技能文档(SKILL.md)给出了标准流程:
- 安装 Python 3.7+ 环境并安装 tushare 依赖包:
pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple- 在 Tushare 官网注册获取 token,并配置环境变量:
export TUSHARE_TOKEN=your_token- 初始化 Pro 接口实例:
import tushare as ts pro = ts.pro_api()仓库的示例脚本 stock_data_example.py 展示了更稳健的 token 读取方式——优先从 Vibe-Trading 的配置系统中读取tushare_token,缺失时才回退到ts.get_token():
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)对应的配置字段定义在 env_schema.py(tushare_token: str = Field(alias="TUSHARE_TOKEN", default="")),即通过环境变量TUSHARE_TOKEN注入即可被 Vibe-Trading 的配置系统自动识别。这与文档约定的返回格式(pandas DataFrame)一脉相承:所有接口返回DataFrame,日期参数统一使用YYYYMMDD格式,股票代码统一使用ts_code格式(如000001.SZ、600000.SH)。
三、输入参数详解
margin_secs共支持 5 个输入参数,全部为可选(必选均为 N),通过组合不同参数可以灵活裁剪查询范围:
| 名称 | 类型 | 必选 | 描述 |
|---|---|---|---|
ts_code | str | N | 标的代码 |
trade_date | str | N | 交易日 |
exchange | str | N | 交易所(SSE 上交所 / SZSE 深交所 / BSE 北交所) |
start_date | str | N | 开始日期 |
end_date | str | N | 结束日期 |
参数组合的核心逻辑:
- 按交易日全量提取:
trade_date='20240417'即可拿到当天沪深京全部两融标的; - 按交易所过滤:与
exchange='SSE'组合可只取上交所名单,适合按市场分别建池、分片拉取; - 按代码定向查询:
ts_code='510050.SH'可查询单只证券是否入选两融标的及其入选日期; - 按区间回溯:
start_date/end_date组合可查询一段历史区间内的标的变动,用于研究"标的扩容/缩容"事件。
四、输出参数详解
每次调用返回 4 个字段,均为默认显示:
| 名称 | 类型 | 默认显示 | 描述 |
|---|---|---|---|
trade_date | str | Y | 交易日期 |
ts_code | str | Y | 标的代码 |
name | str | Y | 标的名称 |
exchange | str | Y | 交易所 |
该输出结构非常精简,只描述"谁在什么时间、属于哪个交易所的标的名单",不含余额、买入额等交易指标。交易指标需要由同分类下的 margin(融资融券交易汇总) 和 margin_detail(融资融券交易明细) 两个接口提供(详见第六节)。
五、接口用法与实战示例
5.1 基础调用
原文档给出的最小可运行示例:
pro = ts.pro_api() # 获取2024年4月17日上交所融资融券标的 df = pro.margin_secs(trade_date='20240417', exchange='SSE')得到的DataFrame数据样例(节选,完整 1786 行)如下:
trade_date ts_code name exchange 0 20240417 510050.SH 50ETF SSE 1 20240417 510100.SH SZ50ETF SSE 2 20240417 510150.SH 消费ETF SSE 3 20240417 510180.SH 180ETF SSE 4 20240417 510210.SH 综指ETF SSE ... ... ... ... ... 1781 20240417 688799.SH 华纳药厂 SSE 1782 20240417 688800.SH 瑞可达 SSE 1783 20240417 688819.SH 天能股份 SSE 1784 20240417 688981.SH 中芯国际 SSE 1785 20240417 689009.SH 九号公司 SSE从样例可以看到:上交所标的名单从510050.SH(50ETF)等 ETF 开始,到科创板个股(688xxx.SH)结束,同时覆盖 ETF 与股票两类标的。
5.2 单次 6000 行限量下的循环提取
限量规则明确指出"单次最大 6000 行数据,可根据股票代码、交易日期、交易所代码循环提取"。全市场单日两融标的规模(沪深京股票 + ETF)通常超过 6000 行,因此一次调用拿不全,需要按交易所分片循环:
import time import tushare as ts pro = ts.pro_api() def fetch_margin_secs(trade_date): """按交易所分片拉取某交易日全市场两融标的,规避单次6000行限量""" frames = [] for exchange in ('SSE', 'SZSE', 'BSE'): df = pro.margin_secs(trade_date=trade_date, exchange=exchange) frames.append(df) time.sleep(0.2) # 适度限速,避免触发频率限制 return pd.concat(frames, ignore_index=True) # 示例:拉取 2024年4月17日 全市场标的名单 all_secs = fetch_margin_secs('20240417') print(all_secs['exchange'].value_counts())按日期循环则用于回溯历史名单,通常与交易日历接口(trade_cal)配合确定有效交易日序列,再逐日调用并做增量合并,即可得到完整的标的池变更历史。
5.3 标的入选状态查询与标的池构建
对单只证券,可用ts_code精确查询其入选记录,判断其是否在两融标的内、何时入选:
# 查询某只个股的两融标的入选记录 df = pro.margin_secs(ts_code='688981.SH', start_date='20240101', end_date='20241231')更常见的实战场景是构建盘前两融标的池:每日盘前拉取当日名单,与自有股票池做交集过滤,确保策略只在可融资融券的标的上执行,或用于统计标的池覆盖率:
# 过滤出非 ETF 的股票标的,并统计各交易所数量 stocks = all_secs[~all_secs['ts_code'].str.endswith(('.SH', '.SZ')) is False] stocks = all_secs[all_secs['name'].str.contains('ETF') == False] print(stocks.groupby('exchange').size())说明:上述代码基于文档输出结构(
ts_code/name/exchange三列)所做的常规过滤,实际生产中建议结合stock_basic(股票列表)接口交叉核对标的类型。
六、与两融交易数据的配套使用
margin_secs只解决"哪些证券是标的"的问题,不解决"标的余额/交易多少"的问题。完整的融资融券研究链路需要与同分类下的另外两个接口联动:
| 接口 | 文档 | 作用 | 输出核心字段 |
|---|---|---|---|
margin(融资融券交易汇总) | 融资融券交易汇总.md | 沪深京各交易所每日两融总量 | rzye融资余额、rqye融券余额、rzrqye两融余额、rzmre融资买入额、rqmcl融券卖出量等 |
margin_detail(融资融券交易明细) | 融资融券交易明细.md | 逐只证券的每日两融明细 | rzye、rqye、rzmre、rqyl融券余量、rzche、rqchl、rqmcl、rzrqye |
典型的三接口联动模式:
- 盘前用
margin_secs获取当日标的池; - 盘中/盘后用
margin_detail获取个股两融余额,计算标的池内的两融覆盖率(rzrqye / 流通市值等指标); - 用
margin获取全市场两融总量,观察杠杆资金整体变化方向。
需要注意的是两个配套接口同样有各自的限量:margin单次最大 4000 行、margin_detail单次最大 6000 行,均需按日期循环拉取全量。此外,margin_detail文档还给出了余额口径的官方定义(由证券公司报送数据汇总):
- 本日融资余额(元) = 前日融资余额 + 本日融资买入 - 本日融资偿还额
- 本日融券余量(股) = 前日融券余量 + 本日融券卖出量 - 本日融券买入量 - 本日现券偿还量
- 本日融券余额(元) = 本日融券余量 × 本日收盘价
- 本日融资融券余额(元) = 本日融资余额 + 本日融券余额
同时注意单位约定:股(标的证券为股票)、份(标的证券为基金)、手(标的证券为债券);自 2014 年 9 月 22 日起,"融资融券交易总量"数据包含调出标的证券名单的证券的两融余额。理解这些口径,才能在分析标的池变动时正确解释"标的已调出但余额仍存在"的现象。
七、在 Vibe-Trading Agent 中的使用机制
margin_secs接口文档位于 tushare 技能的 references 目录下,由 Vibe-Trading 的技能加载体系(skills.py)统一管理:
- 渐进式披露:系统提示词中只注入技能的一行摘要,完整文档按需加载(
load_skill工具触发),避免上下文被长文档撑爆; - 按目录分节读取:加载时按标题结构将文档切成多个 section,逐节返回,便于 Agent 精准定位到"输入参数""输出参数""接口用法"等具体章节,而不必一次性读完整篇;
- 支持文件按需读取:
Skill.load_support_file()允许按文件名读取技能目录下的支撑文件(如references/...下的接口文档),margin_secs文档正是通过这一机制被按需加载的。
从接口索引看,margin_secs在 SKILL.md 中登记为 ID 326、分类"股票数据, 两融及转融通",与该分类下的margin(ID 58)、margin_detail(ID 59)、slb_len转融资交易汇总(ID 331)、slb_sec转融券交易汇总(ID 332)等接口并列。Agent 在回答两融相关问题、生成盘前交易清单或构建杠杆资金分析时,可通过该技能索引快速定位到本文档,再按上面的参数表组装调用。
八、注意事项与最佳实践
- 限量是循环的动力:单次 6000 行上限意味着任何"全市场、全历史"诉求都必须按交易所 + 日期双维度分页;建议将循环逻辑封装为通用函数,并对每次调用做轻量限速(如
time.sleep)。 - 盘前更新语义:数据为每日盘前更新,当日名单在开盘前即可获取,但请以交易所实际披露为准;若需与当日行情对齐,注意
trade_date使用YYYYMMDD且必须为交易日。 - 标的名单会变动:标的池并非静态,个股可能因规则调整被调入/调出,用
start_date/end_date回溯时应对齐交易日历(可配合trade_cal交易日历接口)。 - 积分与权限:2000 积分可调取但受总量限制,5000 积分解锁无总量限制;计划长期全量拉取的用户需要将积分提升到 5000 档。
- 数据口径区分:标的名单(
margin_secs)与交易汇总/明细(margin/margin_detail)是三个独立接口,字段语义、限量规则、更新时点各不相同,使用时不要混淆。
九、总结
margin_secs是构建 A 股融资融券研究体系的第一块拼图:它用 4 个输出字段、5 个可选输入参数,以每天盘前更新的节奏,提供了沪深京三大交易所(含 ETF)的两融标的名单。配合单次 6000 行的限量规则、按交易所/日期/代码的循环提取模式,以及与margin、margin_detail的联动使用,即可搭建起从"标的池"到"余额明细"再到"市场总量"的完整两融数据链路。本文所依据的接口文档位于 融资融券标的(盘前).md.md),接口索引与积分说明可进一步参考 SKILL.md。
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考