ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Tushare 港股复权因子接口 hk_adjfactor 实战指南:获取港股每日复权因子并构建复权行情

Tushare 港股复权因子接口 hk_adjfactor 实战指南:获取港股每日复权因子并构建复权行情 金融科技示例工程【免费下载链接】ai_quant_tradeStock AI Trader: 1-stop platform for learning, sim live trading. Covers: stock basics, strategies, LLMs, factor mining, ML/DL/RL, graph nets, HFT, C deploy JoinQuant code. 股票AI操盘手一站式学习、模拟、实盘平台。涵盖股票基础、策略、大模型、因子挖掘、机器学习/深度学习/强化学习、图网络、高频交易、C部署及聚宽代码。项目地址https://gitcode.com/gh_mirrors/ai/ai_quant_trade点击查看免费下载港股研究绕不开除权除息当上市公司派息、送股、拆股或合股时股价会瞬间跳空直接拿原始价格做收益率计算、因子回测都会失真。本文以当前仓库 Tushare Skill 包中登记的港股复权因子接口hk_adjfactor接口 ID 401为绝对主线完整讲解其权限、输入/输出参数、调用方式与 6000 行限量下的循环抓取策略并结合同目录下的港股复权行情、港股日线行情等配套文档说明如何用复权因子把港股原始行情换算成可用于量化回测的复权价格。读者读完可掌握单只港股与单日全市场的复权因子获取方法、按日期循环拉取全量数据的工程写法以及复权因子在构建前复权/后复权行情管线中的实际应用。一、复权因子是什么港股数据研究的基石字段港股上市公司每年都会进行分红送配除权除息日当天股价按除权比例向下调整若直接使用未复权价格序列计算收益率会在除权日出现假跌导致回测、因子分析全部失真。复权因子正是用来消除这种价格跳空的校正系数。仓库内 港股复权行情接口文档hk_daily_adj给出了港股复权口径最核心的一条换算公式港股复权逻辑是价格 × 复权因子 复权价格比如close × adj_factor 前复权收盘价。而 A 股侧的 复权行情文档pro_bar则进一步把复权算法总结成一张对照表复权类型算法参数标识不复权无空或None前复权当日收盘价 × 当日复权因子 / 最新复权因子qfq后复权当日收盘价 × 当日复权因子hfq理解这个背景后再来看hk_adjfactor它输出的正是这个复权计算链路中最底层的原料——每日复权因子本身。二、接口概览hk_adjfactor 的核心特性在 Tushare Skill 包的数据接口列表中hk_adjfactor登记于港股数据分类接口 ID 401其核心属性如下项目说明接口名hk_adjfactor描述获取港股每日复权因子数据每天滚动刷新限量单次最大 6000 行数据可以根据日期循环权限开通港股日线权限后自动获得该接口权限具体以 Tushare 官方权限说明文档为准两个关键信息值得展开每天滚动刷新与 A 股 复权因子接口adj_factor盘前 9 点 15~20 分完成当日入库类似港股复权因子也是逐日更新的滚动数据而不是一次性静态快照。随港股日线权限自动开通这意味着只要你的账号开通了港股日线行情hk_daily权限即可直接调用hk_adjfactor无需单独申请该接口权限。三、输入参数详解hk_adjfactor的全部输入参数如下表与原接口文档一致日期统一使用YYYYMMDD格式名称类型必选描述ts_codestrN股票代码港股格式如00001.HKtrade_datestrN交易日期格式YYYYMMDD下同start_datestrN开始日期end_datestrN结束日期四个参数均为可选实际使用遵循以下组合逻辑按单只股票 时间区间同时传ts_code、start_date、end_date拉取该股票一段时间内的每日复权因子按单日 全市场截面只传trade_date拉取该交易日全部港股的复权因子一次最多 6000 行港股全市场约 4000 只股票通常单日一次即可取完两者都不传或组合传参Tushare 会按接口默认规则返回建议实际开发中始终明确至少一种筛选维度避免误取超大结果集。四、输出参数详解接口返回pandas DataFrame字段定义如下名称类型默认显示描述ts_codestrY股票代码trade_datestrY交易日期cum_adjfactorfloatY累计复权因子close_pricefloatY收盘价与原接口文档完全一致。需要特别留意两个字段的语义cum_adjfactor累计复权因子这是本接口的核心产出表示从上市以来累计的复权调整系数。它与原始收盘价相乘即可得到复权价格结合第一节的公式是后续任何复权计算的基准。close_price收盘价该字段为未复权的原始收盘价。hk_adjfactor将复权因子与原始收盘价放在同一行返回好处是拿到数据即可直接做close_price × cum_adjfactor的换算无需再二次 join 行情表缺点是原始收盘价在除权日当天会产生跳空做收益率计算时必须使用换算后的复权价格而非直接使用该字段。五、环境准备与接口初始化调用hk_adjfactor之前先按仓库 Tushare SKILL.md 中的快速上手流程完成环境配置1. 安装 tushare推荐清华 PyPI 镜像pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple2. 注册获取 token 并配置环境变量export TUSHARE_TOKENyour_token3. 初始化 Pro 接口仓库 股票数据获取示例脚本 给出了规范的初始化写法——优先读取环境变量其次回退到本地记录的 tokenimport os import tushare as ts # 读取环境变量中的 token, 或者读取本地记录的 token token os.getenv(TUSHARE_TOKEN) or ts.get_token() # 初始化 pro 接口实例 pro ts.pro_api(token)注意ts.pro_api()不带参数时tushare 会自动从本地配置读取已保存的 token显式传入 token 则更可控适合在 CI 或定时任务中通过环境变量注入。六、接口调用示例原接口文档给出两种最典型的调用方式均基于pro.hk_adjfactor(...)方式一获取港股单只股票的复权因子pro ts.pro_api() # 获取港股单一股票复权因子 df pro.hk_adjfactor(ts_code00001.HK, start_date20240101, end_date20251022)方式二获取港股某一日全部股票的复权因子pro ts.pro_api() # 获取港股某一日全部股票的复权因子 df pro.hk_adjfactor(trade_date20251031)方式二返回的是全市场截面数据一次最多 6000 行。原文档展示的trade_date20251031实例如下ts_code trade_date cum_adjfactor close_price 0 00380.HK 20251031 1.000000 0.150000 1 00698.HK 20251031 1.000000 4.610000 2 00865.HK 20251031 1.000000 0.038000 3 08111.HK 20251031 1.000000 0.068000 4 00039.HK 20251031 1.000000 0.088000 ... ... ... ... ... 4086 01384.HK 20251031 1.000000 113.700000 4087 02954.HK 20251031 1.000000 0.265000 4088 03460.HK 20251031 1.000000 7.440000 4089 83460.HK 20251031 1.000000 6.840000 4090 09460.HK 20251031 1.000000 0.960000从数据样例可以看到当前时间点2025-10-31这些股票尚未发生新的除权除息因此cum_adjfactor为1.000000即未复权口径原始价等于复权价一旦后续发生派息送股同一股票历史各交易日的累计复权因子会整体被刷新为新的比例——这正是每天滚动刷新的含义也是做增量数据更新时必须警惕的地方。七、6000 行限量下的批量抓取策略原文档明确标注单次最大 6000 行数据可以根据日期循环。港股全市场股票数量在数千只的量级单只股票的日频复权因子动辄上万行2019 年至今约 1500 个交易日示例中hk_daily_adj仅 2024 年前 7 个月就有 136 行因此拉取全量历史必须按日期切片循环。下面给出一个可直接复用的分批抓取写法import tushare as ts pro ts.pro_api() def fetch_hk_adjfactor_by_date(ts_code, start_date, end_date, batch_days60): 按日期窗口分批获取港股复权因子规避单次 6000 行限量。 batch_days: 每个窗口的天数可结合每日行数按需调整 from datetime import datetime, timedelta start datetime.strptime(start_date, %Y%m%d) end datetime.strptime(end_date, %Y%m%d) frames [] cursor start while cursor end: window_end min(cursor timedelta(daysbatch_days - 1), end) df pro.hk_adjfactor( ts_codets_code, start_datecursor.strftime(%Y%m%d), end_datewindow_end.strftime(%Y%m%d), ) if df is not None and not df.empty: frames.append(df) cursor window_end timedelta(days1) import pandas as pd return pd.concat(frames, ignore_indexTrue).drop_duplicates( subset[ts_code, trade_date] ).sort_values(trade_date) # 示例拉取 00001.HK 近一年复权因子 adj fetch_hk_adjfactor_by_date(00001.HK, 20251001, 20261008, batch_days90) print(adj.head())要点说明窗口大小的选择取决于该股票的日均数据量港股每年约 240 个交易日单股票日频数据行数 区间交易日数6000 行的额度意味着单个窗口理论上可覆盖约 20 年单股票数据但对全市场单日截面约 4000 行6000 行额度同样够用若市场扩容需按trade_date分段drop_duplicates用于去重窗口边界可能产生的重复行建议用start_date/end_date日期窗口而非trade_date单日逐日轮询可显著减少请求次数避免触发接口限流。八、复权因子的实战应用构建港股复权行情管线拿到复权因子后最常见的落地场景是把它与港股行情数据组合构建可用于回测的复权行情。仓库内的配套文档提供了完整的数据拼图数据需求接口说明仓库文档未复权原始日线hk_daily港股每日增量和历史行情含开高低收、成交量额、涨跌幅港股日线行情复权因子hk_adjfactor本文主角每日滚动刷新港股复权因子复权行情已含因子hk_daily_adj直接返回 close/open/high/low 及adj_factor、换手率、市值等指标港股复权行情交易日历hk_tradecal港股交易日历用于生成完整日期索引港股交易日历管线一因子 原始行情手动复权。对研究场景推荐用hk_adjfactor拿到cum_adjfactor后自行乘算import pandas as pd # adj: hk_adjfactor 返回的 DataFrame # raw: hk_daily 返回的未复权行情 DataFrame需包含 ts_code/trade_date/close 等列 merged raw.merge(adj, on[ts_code, trade_date], howleft) # 前复权收盘价按港股口径价格 × 复权因子 merged[close_adj] merged[close] * merged[cum_adjfactor] # 收益率基于复权价格计算 merged[ret] merged.groupby(ts_code)[close_adj].pct_change()管线二直接使用复权行情接口。若只想要拿来即用的复权行情可直接调用hk_daily_adj其输出中已包含adj_factor字段省去手动合并见港股复权行情文档的接口示例pro ts.pro_api() # 获取单一股票复权行情 df pro.hk_daily_adj(ts_code00001.HK, start_date20240101, end_date20240722) # 获取某一日某个交易所的全部股票 df pro.hk_daily_adj(trade_date20240722)从该文档的数据示例可以看到复权因子的实际数值形态00001.HK2024 年 1 月数据中adj_factor0.9572而 7 月为1.0000这直观印证了复权因子会因除权而被整体刷新的动态特性。九、使用注意事项与权限说明结合原接口文档与仓库内 A 股、港股行情文档的说明实战中还需注意以下几点复权因子会动态刷新港股复权行情文档明确提示复权因子历史数据可能因除权等被刷新请注意动态更新。历史某日的cum_adjfactor在新一次除权后会被重新计算因此做增量更新时要整段重拉受影响区间而不是只补最新一天。6000 行限量单次请求最多 6000 行全量历史数据必须按日期循环或按股票分批见第七节。权限依赖hk_adjfactor在开通港股日线权限后自动获得未开通hk_daily权限前调用会返回权限错误A 股复权因子接口adj_factor则有独立的积分要求仓库 A 股复权因子文档 注明 2000 积分起、5000 以上可高频调取两者权限口径不同需分别确认。日期格式统一所有日期参数一律使用YYYYMMDD如20251031港股股票代码统一为XXXXXX.HK后缀格式如00001.HK。复权口径差异Tushare 的 A 股复权以用户设定的end_date为基准开始往前复权分红再投模式与行情软件以最近交易日为基准的口径存在差异见 A 股复权行情文档 的复权说明。港股侧的换算公式为价格 × 复权因子 复权价格在跨市场研究时不要混用两套口径。十、小结hk_adjfactor是 Tushare 港股数据家族中小而关键的底层接口它只输出ts_code、trade_date、cum_adjfactor、close_price四个字段却决定了港股行情复权计算的准确性。通过本文可以完整掌握接口的权限与限量约束、四类输入参数的组合用法、两个官方示例的正确姿势、6000 行限量下的日期循环抓取方案以及如何与hk_daily、hk_daily_adj、hk_tradecal配合构建一条端到端的港股复权数据管线。无论你是做多因子回测、事件研究还是跨市场A/H比价分析先把复权因子这一层数据地基打牢后续一切量化分析才有可信的前提。赞分享金融科技示例工程【免费下载链接】ai_quant_tradeStock AI Trader: 1-stop platform for learning, sim live trading. Covers: stock basics, strategies, LLMs, factor mining, ML/DL/RL, graph nets, HFT, C deploy JoinQuant code. 股票AI操盘手一站式学习、模拟、实盘平台。涵盖股票基础、策略、大模型、因子挖掘、机器学习/深度学习/强化学习、图网络、高频交易、C部署及聚宽代码。项目地址https://gitcode.com/gh_mirrors/ai/ai_quant_trade点击查看免费下载相关推荐港股复权因子hk_adjfactor深度指南Vibe-Trading 中 Tushare 港股复权数据的原理、获取与实战应用港股复权因子hk_adjfactor深度指南Vibe Trading 中 Tushare 港股复权数据的原理、获取与实战应用 港股上市公司在派息、送股、拆人工智能AI Agent金融科技MCP 服务Tushare 港股利润表 hk_income 接口实战指南从腾讯控股年报数据到港股基本面因子构建Tushare 港股利润表 hk_income 接口实战指南从腾讯控股年报数据到港股基本面因子构建 本文以 ai_quant_trade 仓库中 Tushar金融科技示例工程AI量化交易实战Tushare ETF 复权因子fund_adj接口详解与基金复权行情计算指南AI量化交易实战Tushare ETF 复权因子fund_adj接口详解与基金复权行情计算指南 在 ETF 量化研究与回测中除息、分红等权益事件会让 E金融科技示例工程上一篇gpt2-finetuned-greek-small API开发指南构建RESTful服务的完整教程下一篇探索智能迷宫DQN算法实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进