理想反转选股策略报告
因子表:W_return.ideal_reversal | 因子方向:越小越好 | 区间:2019-01-01 ~ 2026-10-27 | 月末信号日、T+1 开盘成交 | 生成时间:2026-10-29 17:17
1. 概览与总评
存疑因子本身的信号在训练、验证、测试三段方向一致(RankIC 均值 -0.060 / -0.041 / -0.065),但做成持仓 20 只的策略后,验证段夏普 -0.42、测试段 0.48,测试段年化超额只有 +3.8%,最大回撤 -33.6%,月换手 93%。证据不足以给「有效」。
30 / 16 / 1
回测 / 验证段查看 / 测试集开启
总评被压在「存疑」的原因- 验证段夏普相对训练段符号翻转或腰斩(过拟合)
- 参数高原体检未通过
- 假设卡只是猜测,含义未验证,总评最高「存疑」
红涨绿跌:红色为正,绿色为负。三集划分:训练 2019-01-01 ~ 2022-11-30,验证 2023-01-01 ~ 2024-04-30,测试 2024-06-01 ~ 2026-10-27。
2. 方向判定
锁定方向:越小越好(选因子最小的 20 只)。依据只用训练段;验证、测试段只检查方向有没有翻转,不据此改方向。
文档核对:文档未说明(因子表说明里没有写越大越好还是越小越好)。
| 项目 | 数值 | 说明 |
|---|
| 训练段 RankIC 均值(月末信号日,46 期) | -0.0601 | t = -5.89,IC>0 的月份占比 13.0% |
| 训练段前半 / 后半 IC 均值 | -0.0675 / -0.0527 | 各 23 / 23 期 |
| 训练段 5 组下期收益(G1 → G5) | 1.90% / 1.55% / 1.45% / 1.43% / 0.58% | G5 − G1 = -1.32% |
| 验证段 RankIC 均值(15 期) | -0.0412 | t = -2.51;与锁定方向 一致 |
| 测试段 RankIC 均值(27 期,信号日 2024-06-28 ~ 2026-08-31) | -0.0650 | t = -5.11;与锁定方向 一致 |
可信度检查(训练段)
| 检查项 | 结果 |
|---|
| |t| ≥ 2 | 通过 |
| 前后半段 IC 符号一致且与方向一致 | 通过 |
| G5 − G1 收益差符号与方向一致 | 通过 |
| U 形(G1、G5 同高或同低于 G3) | 否 |
训练段 5 组收益呈台阶状逐组下降;验证段 5 组不是台阶状(组序乱);测试段 5 组呈台阶状逐组下降。
3. 规则卡、假设卡与三集切分
| 项目 | 内容 |
|---|
| 因子 | W_return.ideal_reversal(表里有 ideal_reversal / _pre / _raw 三列数值,取与表名 docs 因子名一致的 ideal_reversal) |
| 候选池 | 全 A;非ST、非停牌、上市>=250交易日、近20日日均成交额>=50000000;另剔除信号日涨停(price_limit_status=3,不等于D+1能否成交) |
| 持仓与权重 | 得分最高 20 只,等权,单票 ≤ 8%,总仓位 95% |
| 调仓与成交 | 月度;信号日收盘后生成,D+1开盘成交(引擎默认,不加额外滞后) |
| 风控 | 无止损;单票≤8%;信号日涨停剔除 |
| 成本 | 佣金 0.0003(最低 5 元),卖出印花税 0.001,滑点单边 0.001 |
| 基准 | 000985.CSI。中证全指覆盖沪深全A,与股票池最接近;股票池剔除了北交所之外的低流动性等,口径不完全一致 |
| 初始资金 | 1,000,000 |
候选池每期最小 1417 只、中位数 2380 只,没有低于 100 只的月份;因子在股票池内的覆盖率均值 99.99%、最低 99.93%;单行业最多持仓 12 只(未超过 30 只)。各过滤条件平均每期剔除:ST 168 只;停牌 11 只;上市不足250交易日 355 只;近20日日均成交额<5000万 1248 只;因子缺失 0 只;信号日涨停 41 只。
假设卡 (猜测):猜测:量价分布特征刻画短期过度反应,修复使因子小者后续更强。这句话是根据因子名称和说明写的,没有被验证。
三集切分时间轴
训练 2019-01-01 ~ 2022-11-30
验证 2023-01-01 ~ 2024-04-30
测试 2024-06-01 ~ 2026-10-27
灰色为 embargo(训练-验证之间约 22 个交易日(2022-12),验证-测试之间约 20 个交易日(2024-05))。
4. 三集对照与衰减判定
| 段 | 区间 | 年化 | 夏普 | 最大回撤 | 年化超额 | 信息比率 | 月换手 |
|---|
| 训练 | 2019-01-03 ~ 2022-11-30 | +33.0% | 1.15 | -34.6% | +23.1% | 1.31 | 86% |
| 验证 | 2023-01-03 ~ 2024-04-30 | -17.0% | -0.42 | -51.7% | -10.3% | -0.34 | 93% |
| 测试 | 2024-06-03 ~ 2026-10-27 | +11.6% | 0.48 | -33.6% | +3.8% | 0.38 | 93% |
衰减判定(夏普 ≥ 训练段的 60% 算正常衰减;符号翻转或腰斩算过拟合):验证段 / 训练段 = -0.36,判定 符号翻转(过拟合);
测试段 / 训练段 = 0.42,判定 夏普腰斩(过拟合)。验证段 RankIC 方向:方向稳定;测试段 RankIC 方向:方向稳定。
月换手 = 每月(买入额 + 卖出额)/ 2 ÷ 当月平均净值,再取月均。三段统计取自同一次完整回测(2019-01-01 ~ 2026-10-27)按日期切出;
该次回测的训练段、验证段年化、夏普、最大回撤与第二步(END 设为验证段结束日)相比,最大绝对差 1.2e-15。
5. 图表
图 1 · 训练段 5 组下期平均收益(方向依据)
月末信号日按因子分 5 组(G1 最小 → G5 最大),持有到下个信号日次日开盘。G1 最高、G5 最低,所以方向判为越小越好。颜色只表示组序。
图 2 · 训练 / 验证 / 测试拼接的策略与基准净值
底色区分三段,段间空白为 embargo。同一次完整回测,净值不重置。
图 3 · 超额净值(策略净值 ÷ 基准净值)
上行表示跑赢基准。
图 4 · 策略回撤
训练段最大回撤 -34.6%,验证段 -51.7%,测试段 -33.6%。
图 5 · 参数高原:持仓数邻域的训练段与验证段夏普
持仓数在 ±20% 邻域内(16~24)逐个对比,训练段 → 验证段:持仓 16:1.08 → -0.70、持仓 18:1.08 → -0.51、持仓 20:1.05 → -0.61、持仓 22:1.02 → -0.65、持仓 24:1.03 → -0.51。判定:不通过(邻域各参数验证段夏普均相对训练段衰减 ≥30% 或符号翻转)。
图 6 · 成本 ×1 与 ×2 的净值(训练 + 验证段)
佣金、最低佣金、印花税、滑点全部翻倍。训练段年化超额 +23.1% → +18.0%,验证段 -10.3% → -13.4%。测试段没有重跑成本 ×2,因为测试集只开一次。
图 7 · 分年度超额
策略年收益减基准年收益。超额为负的年份:2024、2025。2019 与 2026 不是完整年份;2024 年跨验证段和测试段。
图 8 · 月换手
全期月均 90%。月度调仓、每次几乎全部换仓,所以成本拖累不小。
图 9 · 因子滞后衰减(训练段 RankIC 均值)
把预测的收益区间整体后移 k 个信号期。滞后 0 取自第一步结果,滞后 1~3 重新计算。滞后 0:-0.0601(t = -5.9);滞后 1:-0.0445(t = -6.3);滞后 2:-0.0279(t = -4.2);滞后 3:-0.0291(t = -4.3)
6. 五项评价
| 指标(课程口径) | 训练 | 验证 | 测试 |
|---|
| 年化超额 > 8% | +23.1% 达标 | -10.3% 未达标 | +3.8% 未达标 |
| 信息比率 > 1.0 | 1.31 达标 | -0.34 未达标 | 0.38 未达标 |
| 最大回撤 > -20% | -34.6% 未达标 | -51.7% 未达标 | -33.6% 未达标 |
| 月换手 20%~50% | 86% 未达标 | 93% 未达标 | 93% 未达标 |
| 容量 > 5 亿 | 未做 | 未做 | 未做 |
没有任何一段同时在年化超额、信息比率、最大回撤三项上都漂亮,不触发「先怀疑数据」的提示。容量一项没有做(需要逐笔对照标的日均成交额,这次权衡后放弃),不给数。
7. 结论(大白话)
因子本身有信号,但做成这个选股策略,不能说是规律。理由有四条:
- 因子的预测力在三段里方向一致:RankIC 均值训练 -0.060、验证 -0.041、测试 -0.065,测试段 5 组收益逐组单调下降。这是支持「有规律」的证据。
- 但策略只买分数最好的 20 只,验证段夏普降到 -0.42,同期 5 组收益不是台阶状;测试段夏普 0.48,只有训练段的 42%,按口径算「夏普腰斩(过拟合)」。
- 参数高原没过:持仓数在邻域内换成 16~24,验证段夏普全部不如训练段;这说明 20 只这个数字没有稳固的「平台」。
- 最大头的几个数不达标:测试段年化超额 +3.8%(要求 8%)、信息比率 0.38(要求 1.0)、最大回撤 -33.6%、月换手 93%。
为什么因子有 IC 而 20 只组合在验证段亏钱?本次没有验证原因,猜测可能是组合只取最极端的 20 只,波动大(验证段 β 为 1.46,见风险与备注)、容易被单一风格行情带偏;也可能只是样本太短。
建议:暂时不进入纸面跟踪。若还想继续,先解决换手和回撤(例如放宽到 5 分位组合而不是只取 20 只),并且要用一段更晚的、没看过的新区间来检验,因为当前测试集已经用掉了。
8. 风险与备注
试验记账
| 项目 | 数值 |
|---|
| 回测总次数 | 30 |
| 验证段被查看次数 | 16(其中 8 次是为排查结果可复现性而重复跑同一份策略) |
| 调参试验数 | 9(只搜持仓数一个参数,另在验证段验证了邻域 5 个) |
| 测试集开启次数 | 1 |
| 方向是否被改过 | 否 |
| 策略文件 sha256 | aa879bd493d83e0d50b423b0f86a26707de5e7ffab32f353bf9f754cdcf83bed |
| DSR(调参最优试验) | 概率 0.965(9 个试验里最优夏普 1.08,纯运气期望最大值 0.14)。只按调参的 9 个试验算,没有把其余 21 次回测计入,实际选择偏差应更大。 |
成本与涨跌停
- 成本假设:佣金万三(最低 5 元)、卖出印花税 0.1%、滑点单边 0.1%,已用 param() 声明。成本 ×2 后训练段超额仍为正,验证段为负。
- 测试段那次完整回测的引擎诊断:部分订单未成交(多为停牌或当日无报价),不影响其余部分(ORDERS_REJECTED,info,13 of 3692 单);部分买单因资金不足按可买数量成交(ORDER_TRIMMED,info,4 of 3692 单)。订单表的逐笔统计只做了训练 + 验证段那次回测,测试段没有单独统计。
- 训练 + 验证段订单:共 2504 单,全部成交 2441 单,取消或拒绝 23 单(原因:'open' price is lower limit 11 单;[-114]Insufficient cash 9 单;Cancelled: No bar volume 2 单;'open' price is upper limit 1 单),另有 40 单提交在区间最后一天、成交日落在区间之外,不算被拒。
- 涨停开盘买单 1 笔,其中被拒 1 笔;跌停开盘卖单 20 笔,被拒 11 笔。引擎拒绝了其中一部分,被拒的仓位继续持有;拒与不拒的分界原因没有查清,猜测与封板程度或成交量有关。涨停买单只有 1 笔,样本太小,不能据此估计比例。
- 被取消或拒绝订单按板块分布(占该板块全部终态订单):沪深主板:16 / 1413 笔(1.1%);创业板30:7 / 847 笔(0.8%);科创板688:0 / 204 笔(0.0%)。没有做显著性检验,不判断是否集中。
- 未建模:冲击成本(只有固定滑点)、融资融券、分红税、盘中停牌与临时涨跌停变化。
超额拆解(训练 + 验证段,日度回归,尽力而为)
| 段 | β | 年化 α(算术) | 佣金印花税拖累/年 | 滑点拖累/年(粗估) |
|---|
| 训练 | 1.13 | +19.4% | 1.9% | 2.2% |
| 验证 | 1.46 | -5.2% | 2.0% | 2.3% |
β、α 用策略日收益对基准日收益回归;成本拖累 = 区间内成交费用 ÷ 平均净值 ÷ 年数;滑点按成交额 ×0.1% 粗估。验证段 β 高于训练段。未做:容量粗估(持仓市值 / 标的日均成交额):未做;风格因子回归暴露(规模/价值/动量等):未做。
自检
- 随机因子对照(5 个种子):训练段年化超额均值 -1.1%(范围 -6.5% ~ +2.6%),真因子 +23.1%;
验证段随机均值 -2.3%(范围 -10.7% ~ +13.0%),真因子 -10.3%,训练段真因子高于全部随机种子,训练段的超额不像是策略结构本身造成的;验证段真因子落在随机范围内,验证段的差不能单凭这一点判定因子失效。
- 退市标的:因子表中有 248 只在验证段结束前停止出现(占 5055 只的 4.9%),其中 34 只被策略交易过,名称含「退」的被交易标的 9 只,所以退市股在样本内。
- 候选池缺失:因子缺失平均每期剔除 0.2 只,没有按类型归类被剔除标的。
- 方向不稳定性:本次没有方向翻转,没有声明「方向被修改」。
- 测试段 RankIC 的信号日只到 2026-08-31:之后的信号日其离场日还没发生,没有计入。策略回测本身覆盖到 2026-10-27。
- 基准 000985.CSI 与股票池口径不完全一致:股票池按「非ST、非停牌、上市>=250交易日、近20日日均成交额>=50000000」过滤,基准没有这些过滤。