阶段1收益数学●●●●●

什么是复权(前复权/后复权)?为什么回测必须用它?

我的掌握程度:
q-014精讲

先掌握这个答案

复权 = 用复权因子消除除权除息跳空的价格调整。两种口径:①前复权:以当前价为锚往回修历史(近端价格真实,远端被调整);②后复权:以历史价为锚往后累加(起点真实,远端数字放大)。两者的收益率计算结果一致,只是「显示锚点」不同。

先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。

从理解到使用

收益口径和撮合价格分开

保留原始价、企业行动和复权因子,用一致口径计算收益;模拟成交、涨跌停与订单价格应使用当时真实报价。前后复权在相同调整方法下只差归一化常数时,区间收益一致;并非所有数据商都保证该条件。

每一笔收益都要有可执行时间线

打印数据截止时间、信号时间、订单时间、成交时间和持仓收益区间。收盘信号不能乘当天完整收益;次日开盘成交也不能无条件拿到整个close-to-close收益。用原始价格判断可成交性,并纳入停牌与涨跌停。

本阶段实战方法 · 把行情数字变成可比较的收益

看股票、基金或策略业绩时,先对齐本金、起止日期、现金流与费用。

  1. 选一个固定区间,记录期初价值、期末价值、分红、出入金和交易费用。
  2. 没有中途出入金时,用(期末价值+已取出分红-期初价值-费用)÷期初价值计算收益;有出入金时先区分时间加权与资金加权。
  3. 用相同区间的基准作比较,同时记录最大亏损;不要单凭一次盈利评价能力。

使用边界

  • 不同期限的收益不可直接排名;年化只是换算,不是未来收益承诺。
  • 模拟价格不是实时行情。普通股票交易手数、T+1和费用应按具体市场规则核对。
背景 · 从一个困惑说起
知道了除权会造成假跳空(q-013),一个新的问题出现:算贵州茅台2015年至今的收益率,中间经历了十几次分红,每次都有跳空。总不能每次手工修补吧?
由此产生的问题
有没有系统性的方法,把历史上所有除权除息的跳变一次性修补掉,得到一条「连续可比」的价格序列?
核心概念
复权 = 用复权因子消除除权除息跳空的价格调整。两种口径:①前复权:以当前价为锚往回修历史(近端价格真实,远端被调整);②后复权:以历史价为锚往后累加(起点真实,远端数字放大)。两者的收益率计算结果一致,只是「显示锚点」不同。
为什么需要它
①正确性:不复权的历史收益率、波动率、技术指标全部失真;②回测标准:所有回测引擎默认吃复权价;③口径选择:看图用前复权(与当前价衔接),算长期累计收益用后复权(避免前复权在多次分红后历史价趋近于0甚至为负)。
实际应用场景
akshare的adjust参数(qfq=前复权、hfq=后复权);Wind的「复权设置」;量化数据库同时存「原始价+复权因子」,需要真实撮合价格时再还原(阶段4实践)。
与之前知识的联系
q-013解释了跳空的成因,本题给出工程化解法。阶段4写数据管道时会同时保留原始价与复权价两套字段——撮合用原始价、算收益用复权价,这是机构标准做法。
⚠ 常见误解
  • 前复权和后复权算出的收益率不同:两者只差一个常数倍,区间收益率完全一致
  • 复权价就是真实交易价格:它只是统计口径;真实挂单价格是原始价
  • 用前复权存长期数据没问题:多次大额分红会让早年价格被调成极小值甚至负数,长期数据用后复权更稳

🤖 AI导师

导师会先检查你的前置知识(除权除息、收益率),再用案例、公式和代码帮助理解。此功能需要先启用服务。