量化概念 07:复权(前复权 vs 后复权,回测为什么必须用它)
打开行情软件,某只股票 K 线突然"断崖式"暴跌,从 100 掉到 50。别慌,看一眼公告:10 送 10。不是暴跌,是除权。
价格为什么会"跳"
公司会定期调整股本和权益:
- 送股/转增(10 送 10):股本翻倍,价格减半。100 股变 200 股,市值不变,价格从 100 变 50
- 现金分红:派完钱,每股权益少了,价格下调
- 配股:折价配售,价格下调
统称除权除息。它不改变你的市值,但价格序列上留了坑——K 线不连续了。
三种价格
- 不复权:真实成交价。看盘口、算市值、实盘下单用
- 前复权:以当前价为基准,把历史价格往下调平。行情软件默认,图形连续、最新价真实,适合看图
- 后复权:以最早日期为基准,把之后的价格往上调。历史价格固定,不被未来的分红改写
关键区别一句话:前复权的历史是"动态"的,后复权的历史是"静态"的。 明天再除一次权,前复权把全部历史挪一遍;后复权一动不动。
复权因子
数据商(如 Tushare)提供一个乘数 adj_factor:后复权价 = 收盘价 × 复权因子,每次除权除息调一次,保证价格连续。现金分红日因子会小幅下降——这不是数据错误,是除息语义。我写校验规则时就踩过:最初设计了"复权因子必须单调递增",真实数据直接纠正我——茅台分红那天因子从 8.0205 变 8.02。
回测为什么必须用后复权
三个理由:
算不对收益。 年初 100 元、100 股。年中 10 送 10,除权后 200 股 × 50 元,市值不变。年底实际价 55 元——200 股 × 55 = 11000,真实收益 +10%;但不复权价年初 100、年底 55,看着像亏了 45%。除权那天,不复权价就是一次假的巨额涨跌。
指标全乱。 均线、动量、布林带这些基于价格的指标,在除权日出假信号,动量因子的 20 日收益率被一个坑污染。
权益跳变。 真实价撮合 + 固定股数,10 送 10 那天价格腰斩、股数没变,账户权益凭空缩水一半。我系统的回测就出过 +300% 的假收益,换成后复权口径才消掉。
那前复权呢?它的基准是"当下",而回测模拟的是历史——前复权价是用未来的除权事件反推的历史,等于偷看未来。每次新的分红都会改写全部历史,同一个策略,上个月回测和这个月回测结果不一样。回测要稳定的历史,必须后复权。
常见误区
- 以为除权是下跌:除权不改市值,填权还是贴权才是真涨跌
- 拿不复权价算历史涨幅:高分红股票看着"阴跌",其实分红一直在落袋
- 前复权做因子和回测:历史被未来改写,结果不可复现
- 嫌后复权价太贵:茅台后复权价好几万,那不是真价格,是累计复权的刻度
小结
看盘不复权,看图前复权,算收益、做因子、跑回测——一律后复权。记一句:后复权历史固定,前复权历史跟着最新价漂,回测要稳定的历史。
寒蝉 Hancic

