Appearance
复现: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(年化/夏普/回撤)。