1. 课程导入

在量化投研、行情回测与因子计算中,价格序列的“连续性”是一切统计推断的前提。然而真实市场里,股票价格会被分红、送股、配股、拆股、合股、增发等公司行动不断打断。若直接使用未复权价格计算收益率、均线或动量因子,就会在除权除息日出现虚假的跳空,导致回测结果严重失真。本课程的核心,就是教会你如何识别公司行动、构建复权因子,并把历史价格还原成可比较、可回测、可复现的连续序列。

一、什么是公司行动与复权因子

公司行动(Corporate Action)是指上市公司股本、股东权益或现金流发生变化的事件。它通常由上市公司公告,并由交易所确定除权除息日、股权登记日和派息日。常见的公司行动可以分为两类:

  • 现金类:现金分红、特别股息,直接影响股东现金收益,但不改变总股本。
  • 股本类:送股、转增、拆股、合股、配股、增发,改变总股本或每股对应的净资产,从而改变理论价格。

复权因子(Adjustment Factor)是一个乘数,用于把除权除息日之后(或之前)的价格调整到同一价格基准上。它的本质是“剔除公司行动造成的非市场性价格跳变”,让不同日期、不同事件前后的价格具备可比性。复权因子通常由除权除息参考价与前一交易日收盘价推导而来,其数值会随每一次公司行动累积更新。

核心关系可以概括为:
前复权价 = 原始价 × 前复权因子
后复权价 = 原始价 × 后复权因子
复权因子 = 除权除息参考价 ÷ 除权除息前收盘价(再按方向累积)

二、核心原理:为什么必须做复权

假设某股票在除权日前收盘价为 20 元,实施“每 10 股送 10 股”,则除权参考价约为 10 元。若直接使用原始价格,系统会认为该股票一天之内下跌了 50%,这显然是虚假信号。复权因子此时约为 0.5,用它调整后,价格序列重新连续,收益率计算才具有经济含义。

复权因子的推导依赖三个关键量:

  1. 除权除息前收盘价:事件发生前最后一个交易日的收盘价。
  2. 每股现金分红与送转比例:决定理论价格下调幅度。
  3. 配股价与配股比例:配股会引入新增资金,需按加权方式计算参考价。

不同数据源对复权因子的累积方式、精度处理和除权日归属可能存在差异,这也是实战中必须做“历史还原”的原因:只有把因子还原到统一口径,才能保证跨市场、跨数据源、跨时间段的回测结果一致。

公司行动 → 复权因子 → 连续价格序列 公司行动 现金分红 / 送转 拆股 / 合股 / 配股 增发 / 特别股息 复权因子 除权参考价 ÷ 前收盘 按事件累积更新 前复权 / 后复权 连续价格序列 收益率可计算 均线 / 动量可用 回测结果可复现 实战还原链路 原始行情 + 公司行动表 → 计算除权参考价 → 生成复权因子 → 累积因子 → 还原历史价格 校验点:除权日跳空是否消除、因子是否单调、跨源口径是否一致

三、方法流程:从原始行情到复权序列

一个可落地的复权因子还原流程通常包含以下步骤:

  1. 数据准备:获取原始日行情(开高低收、成交量)与公司行动明细表,字段至少包括除权除息日、现金分红、送股比例、转增比例、配股比例、配股价。
  2. 计算除权参考价:按交易所公式计算事件日的理论参考价。
  3. 生成单次因子:用参考价除以前收盘价,得到该次事件的单次复权因子。
  4. 累积因子:按时间顺序把单次因子连乘,得到每个交易日的累积复权因子。
  5. 价格还原:用累积因子乘以原始价格,得到前复权或后复权序列。
  6. 质量校验:检查除权日收益率是否异常、因子是否出现零值或负值、跨数据源是否一致。

下面是一个简化的因子累积伪代码,便于理解计算逻辑:

factor = 1.0
for each trading_day in ascending_order:
    if trading_day has corporate_action:
        ref_price = (prev_close - cash_dividend + rights_price * rights_ratio) / (1 + bonus_ratio + rights_ratio)
        single_factor = ref_price / prev_close
        factor = factor * single_factor
    cumulative_factor[trading_day] = factor

adjusted_close = raw_close * cumulative_factor
提示:前复权与后复权的区别只在基准日选择。前复权以当前价格为基准向前调整,适合看盘;后复权以上市首日为基准向后调整,适合长期回测与因子研究。

四、案例与场景:一次送转引发的回测偏差

某量化策略使用 20 日均线突破作为买入信号。某股票在 6 月 10 日实施“每 10 股转增 10 股”,原始价格从 30 元变为 15 元。若未复权,系统在 6 月 11 日检测到价格“跌破均线”,触发卖出,但实际市场并未发生下跌。复权后,价格序列保持连续,均线信号不再误触发。

场景 未复权处理 复权处理后
除权日收益率 出现 -50% 虚假暴跌 收益率接近真实市场波动
均线信号 误触发卖出 信号连续稳定
动量因子 排名严重失真 因子可比性恢复
回测收益 偏差可达数十个百分点 结果可复现、可解释

五、常见误区与复盘要点

误区一:认为只有分红才需要复权。实际上送转、拆股、配股同样会改变理论价格,必须纳入因子计算。
误区二:直接使用数据商提供的复权价,却不核对因子口径。不同数据源在除权日归属、精度舍入、配股处理上存在差异。
误区三:忽略因子累积方向。前复权与后复权因子互为倒数关系,混用会导致价格序列整体偏移。
误区四:只处理日频,忽略分钟频。高频回测中,除权日当天的分钟价格同样需要按因子还原。

复盘时建议重点检查三件事:第一,除权除息日的收益率是否落在合理区间;第二,累积因子是否单调、是否出现零值或负值;第三,同一标的在不同数据源下的复权序列是否在可接受误差内一致。只有通过这三项校验,复权因子才真正具备实战可用性。

本课程后续将围绕公司行动识别、因子推导、历史还原、跨源校验和工程化实现逐步展开。掌握本章的定义与框架后,你已经具备理解后续所有实战内容的基础。