| name | factor-evaluation |
| description | 新因子多周期能力评测技能。Use when: 新增因子、评估因子预测能力、计算 IC_1d/IC_5d/IC_20d、做多空组合检验、判断因子是否值得纳入策略。 |
| argument-hint | 描述要评测的因子、数据频率、需要的周期(如 1d/5d/20d)以及是否需要多空分组检验 |
| tags | ["vortex","vortex/skill","vortex/research-domain"] |
| obsidian_links | ["[[因子研究与评测全流程说明]]","[[研究域设计说明书]]","[[实例策略开发流程]]"] |
新因子多周期能力评测
基于 因子分析报告_峰岭谷信息.pdf 总结出的标准化评测流程,用于后续新增任意因子时的统一检验。
适用场景
- 新增一个日频或高频聚合因子后,判断是否有预测能力
- 对同一因子同时评测短期、中期、月度三个 horizon
- 输出标准化的
IC_1d / IC_5d / IC_20d
- 进一步用 5 日多空组合检验交易可用性
- 根据 20d 或指定 horizon 的 IC / ICIR 生成因子权重
- 接收 CogAlpha
generation_summary.json / research_cycle.json 中的 qualified、elite 或明确有研究价值的 rejected 候选,做更严格的多周期实证
当输入来自 CogAlpha 时,不要只看因子值和 IC,还必须保留:
semantic_status:区分 proxy、faithful_proxy、mutation_proxy。
lineage / parent_templates:判断是否是某个父模板的轻微重复。
rejection_reasons:避免把已被 quality/fitness 标记的问题重新包装成新因子。
research_direction:确认评测 horizon、universe 和用途是否匹配本轮研究目标。
标准评测流程
先区分两件事
1. 预测周期 ≠ 调仓周期
预测周期:因子值对未来多少交易日收益有预测力,例如 IC_1d、IC_5d、IC_20d
调仓周期:策略多久换一次仓,例如日频、周频、月频、半年频
两者相关,但不是一回事。
例子:
- 一个因子可能对未来
5d 很有效,但对 60d 之后迅速衰减
- 你仍然可以在月度或半年策略里使用它,但会出现“预测力只在前半段有效,后面靠持有延长”的问题
所以不能因为策略是半年调仓,就默认只能看 120d 或 250d;
也不能因为因子在 5d 有效,就默认适合半年持有。
正确做法是:同时评测多个 horizon,再判断它是短线因子、中线因子还是长线因子。
2. 先判断因子期限属性,再决定怎么用
- 短线因子:通常看
1d / 5d / 10d / 20d
- 中线因子:通常看
20d / 40d / 60d
- 长线因子:通常看
60d / 120d / 250d
如果一个因子:
IC_5d 很强,但 IC_60d、IC_120d 很弱
- 说明它更像短线择股因子,不适合直接拿去支撑低换手长持有策略
IC_20d、IC_60d、IC_120d 都为正且稳定
Step 1: 多周期 RankIC
对每个截面日期,计算:
IC_1d: 因子值 vs 未来 1 个交易日收益的 Spearman 截面相关
IC_5d: 因子值 vs 未来 5 个交易日收益的 Spearman 截面相关
IC_20d: 因子值 vs 未来 20 个交易日收益的 Spearman 截面相关
对于长线策略,不应只停留在这三个周期,建议扩展为:
- 中线补充:
IC_40d, IC_60d
- 长线补充:
IC_120d, IC_250d
为什么用 Spearman:
- 比 Pearson 更稳健
- 更适合选股排序因子
- 不要求线性关系,只要求单调性
Step 2: 稳定性分析
每个 horizon 至少输出 4 个指标:
IC_mean
IC_std
ICIR = IC_mean / IC_std
positive_rate = IC > 0 的期数占比
如果用月末截面做测试,positive_rate 可以理解为“正 IC 月份占比”。
Step 3: 多空组合验证
默认做 5 日 horizon 的 5 分组检验:
- 多头:因子值最高 20%
- 空头:因子值最低 20%
- 输出:
long_mean
short_mean
long_short_5d
sharpe
这一步是为了验证“统计显著”是否能转成“交易可用”。
Step 4: 因子准入判断
建议至少满足下面 4 条中的大部分:
|IC_mean_20d| > 0.03
ICIR_20d > 0.3
positive_rate_20d > 55%
long_short_5d > 0
如果是短周期因子(分钟聚合、盘口、情绪),重点看:
IC_1d
IC_5d
IC_20d
long_short_5d
如果是中低频基本面因子,重点看:
IC_20d
IC_60d
ICIR_20d
ICIR_60d
如果是低换手长持有策略(季度 / 半年 / 年度),重点看:
IC_60d
IC_120d
IC_250d
- 这些周期上的
ICIR 和正 IC 占比
- 对应 horizon 的多空收益或分组收益单调性
Horizon 选择建议
| 场景 | 推荐评测周期 | 主要用途 |
|---|
| 高频 / 微观结构因子 | 1d, 5d, 10d, 20d | 判断短期 alpha 衰减速度 |
| 月度调仓策略 | 5d, 20d, 40d | 看月内是否持续有效 |
| 季度调仓策略 | 20d, 60d, 120d | 看一个季度内是否维持预测力 |
| 半年调仓策略 | 20d, 60d, 120d, 250d | 判断因子是否适合低换手持有 |
| 年度 / 超低换手策略 | 60d, 120d, 250d | 判断是否为真正长线因子 |
为什么半年策略不能只看 20d
因为 20d 只回答“未来约 1 个月收益是否可预测”。
如果策略是半年一调仓,那么只看 20d 会有两个风险:
- 因子在前 20 天有效,但后 100 天失效甚至反转
- 权重优化会偏向短线信号,导致长持有策略的解释力不足
所以:
20d 可以作为中短期参考
- 但半年策略至少要补看
60d / 120d
- 如果真的想做“长线因子准入”,建议加
250d
实务建议
- 如果当前策略是月度或更快:可以用
weight_horizon=20
- 如果当前策略是季度:优先比较
20 vs 60
- 如果当前策略是半年:优先比较
20 vs 60 vs 120
- 如果当前策略是年度:优先比较
60 vs 120 vs 250
不要先假设某个 horizon 正确,而应把它当成待验证对象。
PDF 提炼出的评测模板
以峰岭谷因子报告为例,评测时至少回答这 3 个问题:
- 哪个 horizon 最强:1d、5d 还是 20d
- 因子方向是什么:正向还是负向
- 有没有交易价值:5 日多空收益和夏普是否足够好
报告中的典型口径:
ridge_minutes: IC_1d = 0.1551, IC_5d = 0.3080
- 5 日多空收益
+10.72%
- 还会看正 IC 月份占比和 IC 标准差来评价稳定性
这说明一个好因子不能只看一个 IC 均值,还要同时看:
当前仓库里的对应入口
当前支持:
FactorAnalyzer.ic_report_multi_horizon()
FactorAnalyzer.long_short_report()
python scripts/run_factor_test.py --forward-days-list 1,5,20 --ls-horizon 5 --weight-horizon 20
推荐工作流
新增因子后,按下面顺序检查:
- 算
IC_1d / IC_5d / IC_20d
- 看
ICIR_20d 和 positive_rate_20d
- 跑 5 日多空组合
- 如果通过,再考虑纳入
SCORING_FACTORS
- 最后再参与权重优化和回测
不要直接纳入策略的情况
- 只有单一 horizon 表现好,其他周期全失效
IC_mean 为正,但 positive_rate 很低
IC 看起来高,但多空收益为负
- 与已有核心因子高度相关,无法提供新增信息
推荐命令
python scripts/run_factor_test.py \
--ic-start 20190101 \
--ic-end 20260327 \
--ic-months 60 \
--forward-days-list 1,5,20,60,120,250 \
--ls-horizon 5 \
--weight-horizon 20 \
--freq SA
如果是半年调仓策略,更推荐至少这样跑一轮:
python scripts/run_factor_test.py \
--ic-start 20190101 \
--ic-end 20260327 \
--ic-months 60 \
--forward-days-list 20,60,120,250 \
--ls-horizon 20 \
--weight-horizon 120 \
--freq SA
最终输出应至少包含
- 多周期 IC 表
- 5 日多空组合表
- 基于 20d 的权重方案
- 回测对比结果
- 是否纳入策略的结论