十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

A股复权行情实战指南:Tushare pro_bar 前复权/后复权数据获取与量化回测应用

A股复权行情实战指南:Tushare pro_bar 前复权/后复权数据获取与量化回测应用 A股复权行情实战指南Tushare pro_bar 前复权/后复权数据获取与量化回测应用【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-TradingVibe-Trading 的数据技能库agent/src/skills/tushare/SKILL.md为 AI Agent 封装了完整的 Tushare 财经数据接口其中 A 股复权行情是量化研究与回测最核心的行情数据之一。本文以 复权行情.md 为骨架完整讲解ts.pro_bar()的复权算法、参数语义与调用示例并结合仓库中 cn_adjust.py 与 tushare.py 的源码实现说明前复权逻辑在真实回测流水线中的落地方式帮助读者在 Agent 对话、量化建模与回测引擎中正确使用复权行情避免除权日机械缺口污染收益率计算。一、复权行情接口概览复权行情通过 Tushare Pro 的通用行情接口pro_bar实现属于集成开发接口它并不直接返回现成的复权价格而是在 SDK 层利用 复权因子接口adj_factor 提供的每日复权因子进行动态计算因此HTTP 方式无法调取由于复权逻辑在 SDK 层完成只能通过 Python SDK 调用Python SDK 版本要求tushare 1.2.26若需要静态复权行情支持 HTTP 调用可改用 股票技术面因子专业版接口.md)其输出参数中的_qfq/_hfq即为已算好的前/后复权因子行情。在 通用行情接口 的文档中pro_bar被描述为目前整合了股票未复权、前复权、后复权、指数、数字货币、ETF 基金、期货、期权的行情数据其中复权类型只针对股票生效。二、三种复权类型与算法A 股因分红、送股、配股等公司行为Corporate Action会产生除权除息导致除权日前后价格出现非市场化的机械缺口。为消除该缺口需要将历史价格折算到统一的股本/价格基准上。pro_bar的adj参数支持三种模式类型算法参数标识不复权无空或None前复权当日收盘价 × 当日复权因子 / 最新复权因子qfq后复权当日收盘价 × 当日复权因子hfq前复权qfq以当前为基准将历史价格向当前价格靠拢使最近价格保持实际成交价历史价格相应缩小适合日常行情观察与回测后复权hfq以历史最早点为基准持续累乘因子价格曲线单调递增能真实反映长期持有收益含分红再投资适合计算长期累计收益率。仓库中 cn_adjust.py 的apply_qfq()正是前复权公式的等价实现ratio series / series.iloc[-1] # 当日复权因子 / 最新复权因子 out[col] out[col] * ratio # 当日价格 × ratio其ratio series / series.iloc[-1]对应文档中的当日复权因子 / 最新复权因子四类价格列open/high/low/close全部乘以该比例与qfq算法完全一致。同时该模块还额外处理了volume成交量除以同一比例使股本口径统一、由amount推算的 VWAP 与close的关系保持不变而amount是现金额保持原值不动。三、接口参数详解pro_bar的核心输入参数如下名称类型必选描述ts_codestrY证券代码start_datestrN开始日期格式YYYYMMDDend_datestrN结束日期格式YYYYMMDDassetstrY资产类别E 股票、I 沪深指数、C 数字货币、FT 期货、FD 基金、O 期权默认 EadjstrN复权类型只针对股票None 未复权、qfq 前复权、hfq 后复权默认 NonefreqstrY数据频度1MIN 表示 1 分钟1/5/15/30/60 分钟、D 日线默认 DmalistN均线支持任意周期的均价和均量输入任意合理 int 数值几个关键语义adj仅对股票assetE生效指数、ETF、期货、期权等资产类别传入adj不参与复权计算freq支持分钟级1/5/15/30/60 分钟以及日D、周W、月MK 线分钟数据对积分有更高要求ma均线为动态计算例如取 5 日均线start_date与end_date的跨度必须超过 5 日且只支持单只股票必须传入ts_code。输出列形如ma_55 日均价、ma_v_55 日均量。除上述参数外通用行情接口 还补充了factors股票因子assetE 有效支持tor换手率、vr量比adjfactor复权数据返回时是否附带复权因子列True时返回adj_factor字段该功能自 1.2.33 版本生效ts_code不支持多值输入多值输入会导致结果出现重复记录。四、接口调用示例4.1 日线复权# 取000001的前复权行情 df ts.pro_bar(ts_code000001.SZ, adjqfq, start_date20180101, end_date20181011) # 取000001的后复权行情 df ts.pro_bar(ts_code000001.SZ, adjhfq, start_date20180101, end_date20181011)4.2 周线复权# 取000001的周线前复权行情 df ts.pro_bar(ts_code000001.SZ, freqW, adjqfq, start_date20180101, end_date20181011) # 取000001的周线后复权行情 df ts.pro_bar(ts_code000001.SZ, freqW, adjhfq, start_date20180101, end_date20181011)4.3 月线复权# 取000001的月线前复权行情 df ts.pro_bar(ts_code000001.SZ, freqM, adjqfq, start_date20180101, end_date20181011) # 取000001的月线后复权行情 df ts.pro_bar(ts_code000001.SZ, freqM, adjhfq, start_date20180101, end_date20181011)调用前需要先完成 token 初始化两种方式任选其一import os import tushare as ts # 方式一从环境变量读取Agent 环境推荐见 SKILL.md 的配置说明 token os.getenv(TUSHARE_TOKEN) or ts.get_token() # 方式二进程内全局设置一次后续 pro_api 可不传 token ts.set_token(your_token) pro ts.pro_api(token) df ts.pro_bar(ts_code000001.SZ, adjqfq, start_date20180101, end_date20181011)返回结果为 pandas DataFrame字段与对应的日线/周线/月线行情接口一致如ts_code、trade_date、open、high、low、close、vol、amount等。五、复权机制的三个关键注意点文档中特别强调了三点直接影响数据解读与策略回测的正确性目前只支持 A 股的日线复权。分钟级数据不参与动态复权周线、月线复权同样基于日线复权因子在 SDK 层聚合计算。港股与美股复权行情请分别使用 港股复权行情hk_daily_adj与 美股复权行情us_daily_adj等独立接口。复权基准日是end_date而非最近交易日。Tushare 无论旧版接口还是 Pro 版行情接口都以用户设定的end_date开始向前复权而行情软件/财经网站通常以最近一个交易日为基准。例如今天是 2018 年 10 月 26 日你查询 2018 年 1 月 5 日9 月 28 日的前复权数据Tushare 先取 9 月 28 日的复权因子并从该日开始复权行情软件则从 10 月 26 日开始。这意味着同样的时间区间不同查询时刻拿到的 qfq 数值可能不同——前复权价格是相对基准不具备跨基准期的绝对可比性同一模型内必须固定end_date通常统一取回测截止日或数据下载日才能保证全量标的的复权口径一致。复权采用分红再投模式计算。即假设分红款项继续按除权后价格买入股票因此复权因子会在除权除息日向上跳升。仓库 cn_adjust.py 的注释也验证了这一点复权因子是累积的公司行为发生时因子上升——以 600519.SH 2022-06-30 除息日为例因子从 7.4740 跳升至 7.5546。六、仓库中的工程化落地从接口到回测流水线6.1 前复权在 Tushare Loader 中的实现Vibe-Trading 的回测引擎通过 agent/backtest/loaders/tushare.py 接入 Tushare 数据。其_fetch_daily_frame()的实现路线是按证券类型路由到不同端点A 股股票走daily、ETF/LOF 走fund_daily、指数走index_daily、港股走hk_daily美股/数字货币直接跳过并告警股票与基金随后调用adj_factor/fund_adj拉取同区间复权因子tushare.py调用apply_qfq()完成前复权tushare.py复权因子不可用或异常时丢弃该标的而非返回未复权价格。源码注释给出了未复权数据对收益率的污染程度cn_adjust.py以 Tushare 自身pct_chg为基准核对 2020-2024 年数据300750.SZ 在 2023-04-26 除权日按未复权收盘价计算的收益为-41.82%真实涨跌为5.40%300124.SZ 为 -34.26% 对 -1.01%601012.SH 为 -24.21% 对 6.46%。由于除权只会让价格向下跳空该偏差恒为负值是对横截面 IC 等指标的系统性污染而非随机噪声——这正是回测必须使用复权行情的原因。6.2 测试用例验证复权正确性agent/tests/test_tushare_loader.py 中TestFetchDailyFrameRouting对复权逻辑做了可复现的单元验证。例如test_stock_prices_are_corporate_action_adjusted构造 2 送 1 拆分场景复权因子序列为(1.0, 1.0, 2.0)原始收盘价为[10.5, 11.0, 11.5]前复权向前对齐到最后一根 bar后结果为[5.25, 5.5, 11.5]——即除权前价格按当日因子/最新因子折半最后一根 bar 保持实际成交价。test_a_symbol_with_no_factors_is_dropped_not_returned_raw则验证了无复权因子即丢弃标的的防御逻辑防止未复权价格混入回测。6.3 与权限、限流相关的工程细节积分门槛复权因子接口 说明adj_factor需要 2000 积分起、5000 积分以上可高频调取分钟数据同样有独立积分要求Agent 调用时应留意权限提示限流退避tushare.py 内置了限流识别与指数退避_RATE_LIMIT_BACKOFF_SECONDS (5.0, 20.0, 40.0)仅对每分钟/每天访问次数类配额拒绝重试真正失败的调用如代码不存在立即抛出而非拖慢流程交易日历对齐日期一律使用YYYYMMDD格式交易日以上交所/深交所日历为准可通过 交易日历接口 获取。七、Agent 场景下的使用建议在 Vibe-Trading 的 Agent 会话中调用复权行情建议遵循以下实践统一复权基准同一研究任务内固定end_date为数据下载日或回测截止日避免不同批次数据复权口径漂移区分业务场景计算累计收益、复利收益用hfq观察 K 线形态、贴近当前价格做技术指标用qfq做除权事件研究如分红前后收益时则可能需要未复权数据配合事件日校准批量拉取时控制频率pro_bar单标的单次调用即可覆盖全历史批量提取需按积分档位控制调用节奏或复用仓库中的退避重试逻辑验证数据质量可参照 test_tushare_loader.py 的思路对重点标的的复权因子突变日除权日做抽查确保价格序列在除权日前后连续无缺口。八、延伸阅读复权因子adj_factor复权因子的每日数据来源与提取方式通用行情接口pro_barpro_bar的完整参数、factors、adjfactor及输出指标说明历史日线daily未复权行情接口股票技术面因子专业版.md)支持 HTTP 调用的静态复权因子行情Tushare Loader 源码 与 复权实现仓库内前复权的工程化实现Tushare Loader 测试复权正确性与标的类型路由的验证用例。【免费下载链接】Vibe-TradingVibe-Trading: Your Personal Trading Agent项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表