
Vibe-Trading 实战指南基于 Tushare opt_daily 接口获取期权日线行情的完整方案【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading期权日线行情是期权策略研究、波动率分析与回测数据准备的基础。在 Vibe-Trading 的数据源技能库中Tushare 提供了专门的opt_daily接口用于获取全市场期权合约的日线行情。本指南以仓库内文档 期权日线行情 为核心骨架完整覆盖接口参数、返回字段、调用示例与分页策略并结合仓库中的 Tushare 集成实现与测试用例说明如何在实战中稳定、合规地拉取期权日线数据。读完本文你将掌握opt_daily的完整用法、期权合约代码的解读方法以及把期权行情接入量化研究流程的工程化思路。一、接口概览opt_daily 是什么opt_daily是 Tushare Pro 体系下「期权数据」分类的核心接口之一用于获取期权合约的日线行情数据。在技能索引文档 SKILL.md 中期权数据类目下共有三个接口接口 ID接口名标题仓库内文档说明158opt_basic期权合约信息获取期权合约信息合约代码、行权价、到期日等159opt_daily期权日线行情获取期权日线行情341opt_mins期权分钟行情全市场期权合约分钟数据支持 1min/5min/15min/30min/60min围绕该接口需要注意三个使用前提积分门槛用户至少需要 2000 积分才能调取该接口。积分机制同时带有流量控制积分越多、单次或单位时间内的提取权限越大积分获取与提升的具体办法请参阅 Tushare 官方积分文档不在本仓库范围内。单次限量单次请求最大返回 15000 条数据可以通过「按交易日逐日」或「按合约代码逐个」循环提取总量不受限制。数据范围接口覆盖交易所为 SSE上交所、SZSE深交所、CFFEX中金所、DCE大商所、SHFE上期所、CZCE郑商所即国内主要场内期权市场。二、输入参数详解opt_daily的输入参数均非必填但必须至少传入 ts_code 或日期类参数中的任意一个否则无法限定查询范围。名称类型必选描述ts_codestrNTS 合约代码输入代码或时间至少任意一个参数trade_datestrN交易日期精确单日查询start_datestrN开始日期end_datestrN结束日期exchangestrN交易所SSE/SZSE/CFFEX/DCE/SHFE/CZCE参数组合的典型用法trade_date20181212拉取 2018-12-12 全市场所有期权合约的日线行情ts_code10001313.SHstart_date/end_date拉取某一只期权合约在一段日期区间内的日线行情exchangeDCEstart_date/end_date拉取大商所全部期权合约在某区间的行情。日期格式约定Tushare 系列接口的日期统一为YYYYMMDD紧凑格式如20241231这与仓库内 SKILL.md 中「参数格式说明」一节约定的日期格式完全一致日期YYYYMMDD如 20241231。三、输出参数详解接口返回一个 pandas DataFrame每条记录对应一个期权合约在某一个交易日的行情共 12 个字段名称类型默认显示描述ts_codestrYTS 代码trade_datestrY交易日期exchangestrY交易市场pre_settlefloatY昨结算价pre_closefloatY前收盘价openfloatY开盘价highfloatY最高价lowfloatY最低价closefloatY收盘价settlefloatY结算价volfloatY成交量手amountfloatY成交金额万元oifloatY持仓量手字段使用要点close 与 settle 的差异收盘价close是日终最后一笔成交价格而结算价settle由交易所按当日加权均价等方式计算是期权保证金与每日盯市盈亏逐日盯市的基准。做期权保证金计算、每日盈亏核算时应以settle为准做技术分析画 K 线图时一般使用close。pre_settle 与 pre_close 的差异pre_settle为昨日结算价用于计算今日涨跌幅与盯市pre_close为前收盘价二者在期权交易中经常不一致。单位约定vol单位为手amount单位为万元如示例中1261.435472表示约 1261.44 万元oi单位为手。若需把成交金额换算为元需乘以 10000若要进一步估算名义成交额还需结合期权合约乘数可通过 期权合约信息 的per_unit合约单位字段获取。四、接口示例与实战调用4.1 最小可用示例原文档给出的最简调用方式import tushare as ts # 初始化 pro 接口实例token 填入你自己的 Tushare token pro ts.pro_api(your token) # 获取 20181212 当日全市场期权日线行情 df pro.opt_daily(trade_date20181212) print(df.head())4.2 进阶调用组合在实际研究场景中通常需要更精确地圈定查询范围import tushare as ts pro ts.pro_api(your token) # 按单只合约 日期区间查询 df pro.opt_daily( ts_code10001313.SH, start_date20240101, end_date20240131, ) # 按交易所 日期区间查询例如只看大商所豆粕期权 df pro.opt_daily( exchangeDCE, start_date20181201, end_date20181231, ) # 只取需要的字段减小传输体积 df pro.opt_daily( trade_date20181212, fieldsts_code,trade_date,exchange,open,high,low,close,settle,vol,oi, )4.3 分批循环提取全量数据单次 15000 条的上限决定了拉取长历史时必须分页。推荐的策略是按交易日循环每天每个交易所的期权合约数远小于 15000import time import tushare as ts pro ts.pro_api(your token) # 交易日列表可来自 Tushare 交易日历接口trade_cal此处仅为示意 trade_dates [20181210, 20181211, 20181212, 20181213, 20181214] frames [] for d in trade_dates: part pro.opt_daily(trade_dated) if part is not None and not part.empty: frames.append(part) time.sleep(0.5) # 主动留出间隔配合 Tushare 流量控制 df pd.concat(frames, ignore_indexTrue)若单日数据量超过 15000 条多交易所叠加的大行情日则需要再叠加exchange参数拆分请求。五、返回数据示例解读原文档给出的数据示例同时包含上交所股票期权与大商所商品期权两种代码体系ts_code trade_date exchange ... vol amount oi 0 10001313.SH 20181212 SSE ... 38354.0 1261.435472 98882.0 1 10001314.SH 20181212 SSE ... 14472.0 234.933288 79980.0 ... 753 M1911-P-2900.DCE 20181212 DCE ... 0.0 0.000000 20.0 754 M1911-P-2950.DCE 20181212 DCE ... 0.0 0.000000 20.010001313.SH上交所股票期权合约代码8 位数字 交易所后缀对应上证 50ETF 等标的的期权合约M1911-P-2900.DCE大商所商品期权代码其结构为「期货合约代码-期权类型-行权价」M为豆粕期货品种代码1911为合约月份P表示认沽期权Put2900为行权价。对比 期权合约信息 中的数据示例如M1707-C-2400.DCEC表示认购期权 Call可以确认C/P即认购/认沽的代码约定示例中大量 DCE 合约vol0、amount0但oi20.0说明当日该合约无成交但仍有持仓——期权研究中对持仓量oi单独建模时这类「有持仓无成交」的状态同样是有价值的信息。六、与期权数据家族接口的配合使用6.1 先用 opt_basic 拿到合约清单直接按ts_code查询的前提是知道合约代码。实务中推荐先用 期权合约信息 opt_basic 获取合约清单再逐合约循环提取日线import tushare as ts pro ts.pro_api(your token) # 拉取大商所全部期权合约的代码、名称、行权方式与上市/退市日期 basic pro.opt_basic( exchangeDCE, fieldsts_code,name,exercise_type,list_date,delist_date, )opt_basic的输入参数为ts_codeTS 期权代码、exchange交易所、list_date上市交易日、opt_code标准合约代码如棕榈油 2207 合约对应的OPP2207.DCE、call_put期权类型输出除代码、名称、行权方式美式/欧式、行权价、到期日、上市/退市日期外还包含per_unit合约单位、quote_unit报价单位、min_price_chg最小价格波幅等对保证金与盈亏测算至关重要的字段。一个完整的「合约级」日线提取流程是import time import tushare as ts pro ts.pro_api(your token) # 1. 获取合约清单 basic pro.opt_basic(exchangeDCE, fieldsts_code,list_date,delist_date) # 2. 逐合约拉取日线并拼接 frames [] for code in basic[ts_code].tolist(): part pro.opt_daily(ts_codecode, start_date20181201, end_date20181231) if part is not None and not part.empty: frames.append(part) time.sleep(0.3) # 控制请求频率避开流量限制 daily pd.concat(frames, ignore_indexTrue)6.2 日线之外opt_mins 分钟行情如果研究需要日内粒度如隐含波动率日内变化、日内 Gamma 对冲模拟可配合 期权分钟行情 opt_mins 使用。opt_mins以ts_codefreq1min/5min/15min/30min/60min为必填参数start_date/end_date采用2024-08-25 09:00:00这样的带时分秒格式输出字段为trade_time/open/close/high/low/vol/amount/oi。需要说明的是该接口对积分的门槛要求与opt_daily不同文档标注为 120 积分可试用、正式权限需另行申请且单次最大 8000 行使用前应核实自身账户权限。七、在 Vibe-Trading 中的接入方式与工程化要点7.1 Token 配置Tushare 全部 Pro 接口包括opt_daily都要求携带账户 token 调用。仓库内的约定是技能文档 SKILL.md 中通过环境变量方式配置export TUSHARE_TOKENyour_token随后pro ts.pro_api(os.getenv(TUSHARE_TOKEN) or ts.get_token())项目侧的数据接入代码同样从配置读取 token加载器在 tushare.py 中通过get_env_config().data.tushare_token获取 token并将空串与your-tushare-token视为未配置的占位值可选的 Tushare fallback 适配器 tushare_fallbacks.py 也采用完全相同的判断逻辑未配置或仅占位符时抛出TushareFallbackUnavailable。因此在本项目环境里先配置好TUSHARE_TOKEN再初始化ts.pro_api即可调用opt_daily。7.2 日期格式的规范化仓库内与 Tushare 交互的代码统一要求紧凑日期格式。在 tushare_fallbacks.py 中有_compact_date帮助函数将2024-01-01这类带横线的日期规整为20240101的 8 位数字格式并做合法性校验反向的_dashed_date则将紧凑日期还原为YYYY-MM-DD。调用opt_daily时trade_date/start_date/end_date应直接使用 8 位紧凑格式与仓库内 Tushare 相关代码保持一致的约定。7.3 流量控制的工程应对原文档明确指出该接口「有流量控制」积分越多权限越大。从仓库源码看项目对 Tushare 接口频率限制已经内置了一套成熟的退避重试策略可直接复用同样的思路tushare.py 中定义了_RATE_LIMIT_MARKERS通过识别异常文本中的「每分钟」「每天」「频率」「rate limit」等关键词将「限流拒绝」与「真实的调用失败」区分开同一文件中的_call_with_backofftushare.py实现指数退避仅在判定为限流时依次等待 5 秒、20 秒、40 秒后重试三次尝试合计约 65 秒可跨越 Tushare 分钟级配额窗口非限流异常则立即抛出避免把坏代码/坏参数变成数分钟的静默卡顿。虽然该退避逻辑在仓库内用于 A 股/港股/ETF 等行情端点但其对opt_daily的批量循环调用同样适用——在逐日、逐合约循环提取期权日线时建议在每次请求之间加入合理间隔并对「限流类」异常做退避重试而非直接中断。7.4 关于项目内置 Tushare 加载器的边界从源码结构看项目内置的 Tushare 数据加载器 tushare.py 当前声明支持的 market 集合为{a_share, hk_equity, fund}并在_fetch_daily_frametushare.py中按代码类型路由到daily/fund_daily/index_daily/hk_daily等不同端点加载器路由逻辑的正确性由测试用例 test_tushare_loader.py 逐条校验例如510050.SH命中 ETF 路径、000001.SZ命中股票路径、BTC-USDT被跳过。也就是说期权日线目前以技能文档 自定义脚本的方式接入尚未被内置为 loader 的声明市场——需要期权数据时直接按本文的pro.opt_daily调用方式使用即可。八、使用注意事项与最佳实践小结权限先行确认账户积分不低于 2000并关注流量控制大批量拉取前先在 Tushare 数据工具或单条请求中验证字段与数据形态。参数必选约束ts_code与日期参数至少给一个否则请求无法圈定范围全市场单日查询用trade_date单合约长区间用ts_codestart_date/end_date。分批与限频单次 15000 条上限下优先按交易日循环多交易所合并数据超过上限时叠加exchange拆包循环中主动 sleep 并借鉴仓库的限流退避策略。字段口径盯市与保证金用settle/pre_settle技术分析与图表用close/pre_closevol/oi单位为手amount单位为万元跨系统计算时注意单位换算。代码体系SSE/SZSE 股票期权为 8 位数字代码DCE/SHFE/CZCE 商品期权遵循「期货代码-合约月-C/P-行权价.交易所」的编码规则C认购、P认沽。配套接口合约元信息行权价、到期日、合约乘数来自 期权合约信息日内数据来自 期权分钟行情三者组合即可搭建「合约清单 → 日线 → 分钟线」的完整期权数据管线。【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考