反转(20日)中段 + 低波(20日)双因子 · 月频调仓 · 全A股 数据源: 小石大数据 R2 历史日线 (qfq) · 回测区间 2019-01 ~ 2026-08 生成日期: 2026-08-09 · 完整回测报告见同目录
report.html
一句话: 每月最后一个交易日,在全A股(上市满1年、20日均成交额≥1亿元)中,选"过去20日跌幅处于中段(rank 40%~60%)且波动率最低"的 30 只股票,等权持有到下月。
| 项目 | 设定 |
|---|---|
| 策略模式 | 多因子 (反转20日 + 低波20日), 月频调仓, 中低频 |
| 股票池 | 全A股, 上市≥1年, 20日均成交额≥1亿元 |
| 信号生成 | 每月最后交易日收盘, 反转因子 rank∈[0.40,0.60] 中段, 池内低波选 TOP30 |
| 执行规则 | T+1 开盘价成交; 涨停不买 / 跌停不卖 / 停牌不交易; A股 T+1 |
| 基准 | 同池等权 (相同流动性/年龄过滤, 月频重平衡) |
| 成本 | 佣金万3双边 + 卖出印花税 0.05% + 滑点 0.1% (双边) |
| 数据 | 小石 R2 日线 qfq, 2018-2026 (2018 为因子预热段) |
全市场月频下,按过去20日跌幅分十分位,未来1月平均收益呈微笑型:
| 十分位 | 含义 | 未来1月均收益 |
|---|---|---|
| D1 | 跌最惨 (垃圾股陷阱: 连续跌停/基本面崩塌) | -0.63% |
| D2 | 跌很惨 | -0.01% |
| D3~D7 | 温和回调 (反转 alpha 所在) | +0.42% ~ +1.18% |
| D8~D10 | 抗跌/强势 | +0.84% ~ +0.98% |
结论: 买"跌最惨的"是经典错误——极端尾部是基本面崩塌的垃圾股,继续下跌。真实的月频反转 alpha 只存在于温和回调区间。因此策略把反转因子 rank 限制在 [0.40, 0.60] 中段。
| 流动性层 (1=最不活跃~5=最活跃) | 反转 IC |
|---|---|
| 1 | -0.019 |
| 3 | +0.026 |
| 5 (最活跃) | +0.051 |
反转 IC 随流动性增强 → alpha 不是小票流动性溢价的混入, 在高流动性大中盘上真实存在。
| 检查项 | 设计 | 实证结果 |
|---|---|---|
| 因子无前视 | 所有因子用 shift 构建, 只含截至 T 收盘信息 |
✅ 通过 |
| 信号→执行滞后 | T 收盘生成信号, T+1 开盘才成交 | ✅ 通过 |
| 信号延迟检验 | 延迟 1/2/3 天执行, 结果应方向合理 | ✅ T+2 夏普 0.554, T+3 0.574 (vs 基线 0.543), 不依赖抢先执行 |
| 参数扰动 | 冠军参数 ±50% 邻域 81 组 | ⚠️ 平台中等: 夏普均值 0.18, 正夏普占比 89% |
| 随机对照 | 同仓位同成本随机选股 50 次 | ✅ 随机夏普均值 0.16 (p95 0.35), 冠军 0.54 击败全部 50 次 |
| 幸存者偏差 | R2 数据含 242 只已退市股票, universe 为每日在市快照 | ✅ 无幸存者偏差 |
| 停牌/涨跌停 | 停牌收益记 0; 涨停买不进/跌停卖不出按未成交处理并强制保留 | ✅ 通过 (42 笔拒单) |
| 样本外验证 | 训练 2019-2023 网格选参 (108 组), 样本外 2024-2026 不调参 | ✅ 样本外夏普 0.72 > 训练 0.50 |
| 指标 | 策略 | 同池等权基准 |
|---|---|---|
| 年化收益 | 11.8% | 8.0% |
| 年化波动 | 18.0% | 24.7% |
| 夏普比率 | 0.54 | 0.24 |
| 索提诺 | 0.78 | 0.32 |
| 最大回撤 | -23.0% | -44.3% |
| 卡玛 | 0.51 | 0.18 |
| 年化超额 / IR | +3.8pp / 0.50 | — |
| 期末净值 | 2.25x | 1.75x |
| 年份 | 策略 | 基准 |
|---|---|---|
| 2019 | +40.0% | +31.1% |
| 2020 | +26.2% | +20.1% |
| 2021 | +23.2% | +14.7% |
| 2022 | -2.3% | -20.6% |
| 2023 | +0.2% | -6.0% |
| 2024 | +42.0% | +3.2% |
| 2025 | +11.3% | +33.8% |
| 2026 (至8月) | +4.9% | -11.6% |
熊市 (2022-2023) 防御显著: 策略 -2% 而基准 -26%; 2024 小盘普跌年策略 +42%。
| 区间 | 年化 | 夏普 | 超额 |
|---|---|---|---|
| 训练 2019-2023 | 10.6% | 0.50 | +2.6pp |
| 样本外 2024-2026 | 15.6% | 0.72 | -2.1pp |
样本外夏普高于训练段 → 参数未过拟合到样本内。样本外超额为负 (普涨行情) 但风险调整后优势扩大。
| 策略 | 池 | 口径 | 年化 | 夏普 |
|---|---|---|---|---|
| 80/10 (动量80+低波60) | 中证1000 | 原版宽松 | +24.0% | 1.17 |
| 80/10 | 中证1000 | 严格 | +10.8% | 0.44 |
| 80/10 | 全A流动性 | 严格 | -16.8% | -0.55 |
| 中低频 (反转20+低波20) | 中证1000 | 严格 | +15.7% | 0.68 |
| 中低频 (反转20+低波20) | 全A流动性 | 严格 | +11.8% | 0.54 |
关键结论: 1. 原版 80/10 夏普 1.17 来自宽松执行口径 (信号日当日收益计入 + 无涨跌停限制), 严格化后只剩 0.44 2. 动量双因子池子依赖严重: 中证1000 有效, 全A流动性池直接转负 (-0.55) 3. 中低频策略在两个池子上都胜出, 且全A池版本通过全部防未来检查
详见 report_compare_8010.html。
| 文件 | 说明 |
|---|---|
report.html |
完整回测报告 (图表+检查表) |
report_compare_8010.html |
与 80/10 双因子对比报告 |
equity.csv |
每日净值/基准/持仓数 |
trades.csv |
4870 笔交易明细 (含拒单) |
summary.json |
指标汇总 (机器可读) |
leakage_checks.json |
防未来函数检查原始数据 |
backtest_mlf.py |
回测引擎 (可复现) |
data_wide.pkl |
宽表数据缓存 |
data/qfq_*.parquet |
小石 R2 原始日线 (2018-2026, sha256 已校验) |