Day2_factor1 因子选股策略 · 检验报告
因子表 Day2_factor1(列 factor) | 区间 2019-01-01 ~ 2026-10-28 | 月度调仓,T+1 开盘成交 | 生成于 2026-10-29 17:17
一、概览
无效因子越大越好(证据不足)。训练段夏普 0.49、验证段 -1.21(符号翻转)、测试段 0.22,测试段年化超额 -3.27%,按事先登记的规则判为「无效」。
- 测试段年化超额 ≤ 0
- 评级规则在打开测试段之前已写入 trials.json:测试段年化超额 ≤ 0、夏普 ≤ 0 或 IC 与方向异号,任一成立即判无效;否则上限为存疑,不会给出有效。
因子方向
越大越好
取训练段 IC 符号;证据不足,见第二节
测试段年化超额
-3.27%
策略 5.22% vs 基准 8.49%
夏普 训练/验证/测试
0.49 / -1.21 / 0.22
验证段符号翻转
平均月换手(测试段)
90%
课程区间 20%~50%
试验次数 / DSR
15 / 0.84
DSR 低于 0.95,SELECTION_LUCK
二、方向判定
| 项目 | 结果 | 说明 |
|---|
| 训练段 RankIC 均值 / t | 0.0152 / 0.86 | 47 个月度样本,IC>0 占 49% |
| 前半 / 后半 IC | -0.0299 / 0.0583 | 符号相反 |
| G5 − G1 下期收益 | +0.43% | 五组形状为 U 形(两端高于中间) |
| 文档交叉核对 | 文档未说明 | 文档没有写因子的收益方向 |
| 检查一 |t| ≥ 2 | 未通过 | |
| 检查二 前后半同号且与方向一致 | 未通过 | |
| 检查三 G5−G1 与方向同号 | 通过 | |
| 验证段 RankIC | 0.0105(t=0.25,14 期) | 与方向同号 |
| 测试段 RankIC | 0.0222(t=1.01,26 期) | 与方向同号 |
结论:方向证据不足(三项可信度检查中两项未通过,且五组呈 U 形,所以「只选最高 20 只」本身不适用),评级上限为存疑。方向在第一步锁定为「越大越好」,验证和测试只核对 IC 符号,没有改动过。
图 1 训练段五分组下期平均收益
每月末按因子值从小到大分五组(池内等权),看下一期平均收益;橙色虚线为池内等权均值。两端高于中间,不是单调关系。
三、规则卡与假设卡
| 项目 | 设定 |
|---|
| 股票池 | 全 A;剔除 ST/*ST、停牌、上市不足 250 个交易日(以 250 根日线计)、近 20 日日均成交额<5000 万;另剔除信号日涨停(price_limit_status=3,不等于次日能否成交) |
| 持仓 | 得分 = 方向 × 因子值,取最高 20 只,等权,单票≤8%,总仓位 95%(余下付佣金与滑点) |
| 调仓 | 每月最后一个交易日收盘后出信号,T+1 开盘成交(引擎自带,不加滞后) |
| 风控 | 无止损;单行业持仓数仅作诊断;被拒单与成交价回测后核查 |
| 交易成本 | 佣金买 3‱ / 卖 3‱,最低 5 元;卖出印花税 0.1%;单边滑点 0.1% |
| 基准 | 000985.CSI 中证全指(与全 A 口径最接近;仍与「剔除 ST/低流动性」后的股票池口径不完全一致) |
| 初始资金 | 1,000,000 元 |
假设卡:大涨后缩量小回调,猜测:短线洗盘后上涨延续。(猜测,未验证)(标签:猜测。因子表和文档没有写出含义,这是从因子名「大涨缩量小回调」读出来的,没有被任何检验证实。)
训练 2019-01-01~2022-11-30
验证 2023-01-01~2024-04-30
测试 2024-06-01~2026-10-28
灰色空档为约 20 个交易日的隔离带。三段由同一次连续回测按日期切出,段首持仓延续上一段期末持仓,段首几天的收益含上段仓位的影响。
四、三段对比
| 指标 | 训练 | 验证 | 测试 |
|---|
| 区间 | 2019-01-02~2022-11-30 | 2023-01-03~2024-04-30 | 2024-06-03~2026-10-28 |
| 年化收益 | +12.96% | -25.74% | +5.22% |
| 基准年化 | +9.93% | -6.73% | +8.49% |
| 年化超额 | +3.02% | -19.01% | -3.27% |
| 夏普 | 0.49 | -1.21 | 0.22 |
| 最大回撤 | -43.53% | -44.50% | -27.98% |
| 信息比率 | 0.25 | -1.18 | -0.08 |
| 月换手 | 85% | 88% | 90% |
| RankIC(月度) | 0.0152(t=0.86) | 0.0105(t=0.25) | 0.0222(t=1.01) |
训练 → 验证:夏普 0.49 → -1.21,判为过拟合(符号翻转)(规则:验证夏普 ≥ 训练的 60% 为正常衰减,符号翻转或腰斩为过拟合)。验证 → 测试:夏普 -1.21 → 0.22,夏普回正,但年化超额仍为 -3.27%,没有看到因子带来的额外收益。
一致性核对:第四步连续回测的训练+验证段净值与第二步逐日相比,1292 个交易日最大相对差 0.0e+00。
五、图表
图 2 训练 / 验证 / 测试 拼接净值
策略中证全指
三段由同一次连续回测切出,背景色区分;灰色空档为隔离带。净值均归一到首日,红色策略、灰色基准。
图 3 超额净值(策略 ÷ 基准)
曲线上行表示跑赢基准。
图 4 回撤
策略基准
整条拼接曲线从历史最高点算起的回撤。
图 5 参数高原:训练与验证夏普
训练夏普验证夏普
横轴为「持股数|成交额下限(万元)」,15 个邻域组合;验证夏普全部为负,没有稳定区域。
图 6 成本 ×1 与 ×2(训练+验证段)
成本×1成本×2基准
成本翻倍后净值明显下移;测试段不重跑成本压力,避免多看一次测试集。
图 7 分年度超额
策略年收益减基准年收益(算术差),红正绿负;首尾年份天数不足一年,横轴括号内为交易日数。
图 8 月换手
(买入额+卖出额)/2 ÷ 当月平均净值;橙线为课程上限 50%,月均远高于该线。
图 9 RankIC 滞后衰减
训练验证
信号滞后 0~3 期后的 RankIC;滞后后符号不稳定,没有逐级衰减的规律。
六、五项评价
| 指标 | 课程标准 | 结果 | 判定 |
|---|
| 年化超额(测试段) | > 8% | -3.27% | 未达标 |
| 信息比率(测试段) | > 1.0 | -0.08 | 未达标 |
| 最大回撤(测试段) | 优于 −20% | -27.98% | 未达标 |
| 月换手(测试段) | 20%~50% | 90% | 未达标 |
| 容量(粗估) | > 5 亿 | 2.47 亿 | 未达标 |
五项中 0 项达标,没有「好得过头」的迹象,不触发「先怀疑数据」的提醒。
容量口径:单票持仓不超过其近 20 日日均成交额的 10%,按各月初快照持仓的第 90 分位参与率反推可承载净值,取中位数 2.47 亿(下四分位 1.70 亿,按最拥挤一只算 1.22 亿)。这是粗估,只覆盖训练+验证段,测试段未单独估算。
七、大白话结论
- 更像运气,不像规律。训练段夏普 0.49,看着是正的;换到没见过的验证段变成 -1.21,方向翻了;再换到测试段 0.22,但年化超额 -3.27%,没有跑赢基准。
- 依据:① 方向判定的三项检查两项没过,训练段 IC 的 t 值只有 0.86;② 参数邻域 15 个组合,验证夏普全部为负(-1.48 ~ -1.10),没有高原;③ 成本翻倍后训练段超额由 +3.02% 变为 -1.24%,验证段由 -19.01% 进一步降到 -21.93%;④ 随机选股对照(5 个种子)年化超额均值 -2.41%、标准差 2.68%,因子的 -4.54% 落在随机区间内,分不开。
- 是否进入模拟盘跟踪:不建议。按事先登记的规则判为无效;若要继续,应先弄清因子含义、把「大涨缩量小回调」拆成可检验的条件,而不是在现有结果上继续调参。
八、风险与说明
- 试验次数与过拟合。参数邻域 15 次试验,DSR 概率 0.84(训练段口径,第 11 号试验夏普 0.63,15 次里「最幸运者」期望 0.11),未到 0.95,运行日志带 SELECTION_LUCK 警告。
- 验证段与测试段被看的次数。验证段累计被看约 29 次(第二步指标与 IC、15 次邻域验证、成本×2、5 个随机种子、4 个滞后 IC、2 次基线重跑),看的次数越多,验证结果越不干净。测试段只开了一次完整回测(2026-10-28),策略文件哈希 4e42ee03091396b3…,此后不得再改;如改动,原测试集作废。
- 账本说明。第三步成本×2 与随机对照第一次运行被中断,随后完整重跑,账本按执行次数如实记录:成本×2 2 次、随机对照 8 次(5 个不同种子)。
- 第一步分组口径修复。第一步 IC 分组原用 c_ntile(不跳过 NULL,池外行被编进分桶),发现后改为池内 c_rank 自切五分位;方向 +1 不变,但分组由「G5-G1 同号」变为 U 形。
- 成本与容量。成本按规则卡设定,未调参;容量为粗估(见第六节),只覆盖训练+验证段。超额拆解(训练+验证段,1270 个交易日):年化超额 -2.37%,对基准 beta 1.006,扣费后 alpha -2.42%;佣金与印花税拖累约 1.68%/年,滑点按 0.1% 单边估计约 2.10%/年(估计值),加回后费前 alpha 约 +1.36%。持仓风格(各月初快照、市值加权的全市场分位,0.5 为中性):市值 0.59、近 20 日动量 0.66、近 20 日波动 0.71,偏高动量、高波动(这是描述,不是原因)。测试段未做拆解和风格暴露,标「未做」。
- 涨跌停与被拒单。训练+验证段:被拒 15 单(现金不足 14、无行情 1),被取消 22 单(卖出时开盘跌停 18、无成交量 4);现金不足集中在 2020-02-03。成交价核对:买入成交 1182 笔中开盘涨停成交 0 笔,卖出成交 1149 笔中开盘跌停成交 2 笔,开盘跌停被拦下的卖单 18 笔。测试段:被拒 0、被取消 0,买入开盘涨停成交 0 笔,卖出开盘跌停成交 0 笔。引擎对涨停开盘买入的处理没有文档说明,上面是对成交记录的核对结果,不是对引擎规则的断言。
- 没有模拟的细节。分红送转的现金到账时点、融券、盘中排队与冲击成本、停牌复牌后的连续跌停、基准与股票池口径差异(基准为中证全指,而股票池已剔除 ST 和低流动性)。
- 数据自检。被拒/取消的标的 37 只(主板 27 单、创业板 10 单),成交过的 858 只里主板 66%、创业板 26%,被拒集中度与成交分布相近,没有看出按板块扎堆。因子样本内 139 只股票在区间内退市,策略实际买过其中 11 只,所以样本不是只含存活股。因子表有 38 个交易日缺失,其中信号日 2024-01-31(训练+验证段)和 2024-09-30(测试段);按代码逻辑,当月信号日无因子则该月没有新持仓,沿用上月持仓(这是读代码的推断,没有逐笔核对)。
- 未能解释的异常。订单表里「已提交」记录没有对应终态的有 40 条(训练+验证段)和 38 条(测试段),原因未查明;测试段被拒和被取消均为 0,与训练+验证段(被拒 15 + 被取消 22 单)差异明显,我没有找到原因,不作解释。另外训练段夏普 0.49 与最大回撤 -43.53% 并存,训练段本身也不是一条平稳的曲线。
- 因子本身。训练段 47 个信号日里,有 25 个月高因子值的股票不足 20 只(中位数 17 只),持仓需要用因子值接近 0 的股票补足;补足部分的选择接近噪声(这是猜测)。