复权价格获取:三种口径的实战陷阱地图
先掌握这个答案
接口对照:akshare的adjust参数(''不复权/'qfq'前/'hfq'后)、tushare的adj参数同构、baostock的adjustflag(1后/2前/3不)——写进数据字典防混。深坑一:前复权是「以今天为锚」的动态口径——每次分红后,你缓存的历史前复权价全体改变!意味着:今天下的前复权数据与三个月前的缓存不可直接拼接(增量更新会错位)——这是增量流水线最隐蔽的雷。深坑二:复权因子的时点性——用「最新因子」回算历史=让历史知道未来的分红(温和前视)。推荐方案:研究面板存「不复权价+复权因子」两列——因子用当日及以前的因子值计算(时点正确)、展示需要时现场生成任意复权口径——一步到位躲开两个坑。
先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。
从理解到使用
收益口径和撮合价格分开
保留原始价、企业行动和复权因子,用一致口径计算收益;模拟成交、涨跌停与订单价格应使用当时真实报价。前后复权在相同调整方法下只差归一化常数时,区间收益一致;并非所有数据商都保证该条件。
本阶段实战方法 · 一条能复现的数据流水线
把接口返回的数据变成可用于因子研究的面板时,先处理时点、主键与单位。
- 建立数据字典:字段、单位、时区、交易日历、数据源、抓取时间、原始价与复权因子。
- 用(date, code)查重,区分停牌、未上市、窗口不足和真实缺失;不要用向后填充把未来值带回过去。
- 保存原始快照与清洗日志,固定随机种子和环境版本;接口字段变化时先核对官方文档。
使用边界
- 报告期不等于公告可用日,盘后公告通常不能用于当天收盘前决策。
- API输出名为“动态市盈率”时不能直接改名TTM;浏览器练习不支持任意原生库或行情抓取接口。
- 缓存的前复权数据永远有效:每次除权它整体变形——增量拼接会错位;要么全量重下、要么改用「原始+因子」方案
- 用最新复权因子回算历史没问题:未来分红改变了历史复权价=温和前视——严谨回测用时点因子
- 接口默认给的就是我要的:默认口径各异(有的默认前复权)——显式传参+写数据字典,别赌默认
🛠 本题实践任务
改造你的面板为「原始价+复权因子」双列结构(因子可从tushare adj_factor获取或用两次下载反推);验证:找一只近期分红的股票,确认复权后收益在除权日连续无跳变。
💡 提示(先自己想5分钟再看)
反推因子:factor=hfq_close/raw_close;验证跳变:复权收益的绝对值应<21%(正常日)且除权日无异常大值。
在你的浏览器内运行。首次需联网下载 Python;支持标准库和 Pyodide 提供的 NumPy、pandas 等包。行情抓取、系统文件访问和部分第三方库请在本地环境运行。输出自检仅比对结果关键词,不代替逻辑审查。
🤖 AI导师
导师会先检查你的前置知识(复权概念(q-014)、数据字典),再用案例、公式和代码帮助理解。此功能需要先启用服务。