Skip to content

复现:A股短期反转因子单因子测试

  • 日期:2026-06-12
  • 复现对象:A股短期(月度)反转因子单因子检验——券商金工"选股因子系列/单因子测试"的标准框架(如东方证券《选股因子系列研究》、国泰君安金工单因子系列)。
  • 核心论点:过去一段时间涨幅越高的股票,未来反而跑输(短期反转效应);A股该效应历史上较显著。
  • 复现脚本scripts/replicate_reversal_factor.py

说明:本文复现的是标准单因子检验方法论 + 反转这一已确立的结论,使用自有数据与区间,不声称逐一复刻某份具体研报的数值。

1. 数据与方法

设定
数据源qlib 官方 CN 日频($close × $factor 复权价)
股票池csi300 成分(point-in-time 历史成分,区间内共涉及 516 只)
区间2015-01-01 ~ 2020-09-25(受官方数据上界所限)
因子定义反转因子 = −(过去 20 交易日收益率)
预处理横截面去极值(1%/99% 分位)+ z-score 标准化
调仓月频(每月最后一个交易日),共 69 个调仓点
评价月度 RankIC / ICIR / 胜率;5 分层组合;多空组合 Q4−Q0

因子值与"未来一个月收益"按月对齐,逐月横截面打分、分层、计算多空收益。

2. 结果

2.1 RankIC(月频)

指标
RankIC 均值+0.0411
RankIC 标准差0.1720
ICIR+0.2389
IC > 0 占比51.6%

正向 RankIC ≈ 0.04、ICIR ≈ 0.24,对单因子而言是"有效但不强"的量级,符合 A股月频单因子的典型水平。

2.2 分层年化收益

层编号按因子值从低到高(层 0 = 过去涨最多 / 反转空头,层 4 = 过去跌最多 / 反转多头):

分层年化收益
层 0(过去赢家)−2.50%
层 1+7.80%
层 2+6.74%
层 3+10.83%
层 4(过去输家)+10.74%

底层(过去赢家)显著跑输,高层(过去输家)明显占优,整体单调向上(层1/2 间有轻微逆序,属正常噪声)。

分层净值

2.3 多空组合 Q4 − Q0(买过去输家、卖过去赢家)

指标
年化收益+11.92%
夏普0.77
最大回撤−23.75%

多空组合净值

3. 结论

  • 反转效应在样本区间内成立:反转因子 RankIC 为正、ICIR ≈ 0.24,多空组合年化约 +12%、夏普 0.77。方向与"A股短期反转有效"的文献结论一致。
  • 多头端(过去输家)贡献了主要超额;空头端(过去赢家)年化为负,验证了"追高被惩罚"。

4. 局限与诚实说明

  • 数据截至 2020-09-25:qlib 官方 bundle 冻结于此,无法覆盖近年;不能据此推断当前有效性。
  • 未做中性化:未对行业、市值中性化,反转可能部分混入小市值/低价股暴露。
  • 未计交易成本:月频换手不低,计入双边成本(印花税+佣金+冲击)后多空收益会明显缩水;项目已有 backtest/cost.py 可进一步精算。
  • point-in-time 成分但未剔除不可交易:未显式剔除调仓日停牌/涨跌停不可成交的样本。
  • 多空不可直接实现:A股融券受限,空头端更多是"理论组合/相对收益"含义。

5. 复现方式

bash
source .venv/bin/activate
python scripts/replicate_reversal_factor.py   # 需已下载 qlib 官方数据

复用的项目模块:factors.preprocess(去极值/标准化)、research.single_factor(IC/分层净值/多空汇总)、reports.metrics(年化/夏普/回撤)。