T+1 日 开盘前 · 每交易日一次
① 状态引擎(训练窗拟合、测试日固定)
14 个状态变量 → 对数化+标准化 → PCA → PC1/PC2
变量集:n_total_trades / tot_turnover / qvol_001·005·01·02·05·10 / qturn_01 / cov_c1 / buy_sell_ratio / 升级率中位 / cov_c2 / 大单数缺口
▼
离散规则(训练窗内 kmeans 对齐后标定)
pc1<−1.0 → 放量分散 | pc1≥0.6 且 pc2<0.6 → 低迷
pc1≥1.0 且 pc2≥1.0 → 尾部极端 | 其余 → 常态
▼
② 选层 · cov_c1 阈值
cov_c1 < 0.90 → 用 c3 族(低迷/极端,均值增益 +31%)
cov_c1 ≥ 0.90 → 用 c1 族(常态/活跃)
滞回带 0.88–0.92:连续 2 日越过才切换,防抖动
▼
③ 符号表 + 状态权重
仅 93 个方向稳定因子 参与符号自适应(A10)
17 个反转因子黑名单强制剔除;其余因子沿用全样本符号
状态权重:训练窗内该状态 <8 日 → 权重回缩到全局(shrinkage)
▼
④ 软压力轴(可选第三层)
buy_sell_ratio 相对 rolling 中位(20日) 偏离 → 连续权重 ∝ 偏离度
卖压 <0.85:d31/d34/c3 加权 ×1.2;买压 >1.05:缩量日整体降权 ×0.8
▼
⑤ 合成信号 → colblk 新因子
S(t) = Σf wf,s(t) · signf,s(t) · zf(t)
写入 store 为派生因子 → 走 tail_pipeline_engine 标准回测(raw+neu × gap1/gap5)
滚动样本外(walk-forward,step=1)
训练窗 t−39…t(40 日,拟合 PCA/阈值/符号/权重)
测试日 t+1(参数固定)
对 t = 40…58 逐日滚动:每天换一次训练窗,得到 19 个真正样本外日(每日预测只用历史)。59 日样本两天间隔 ≥1 周,无重叠泄漏,无需 purge/embargo。
对照组:前 70%/后 30% 单切(41 训练 / 18 测试),与 walk-forward 双轨并跑,结论一致才采纳。
A/B 判定门槛(全部满足才算自适应胜出)
| 指标 | 自适应 vs 固定版 |
| OOS 日 mean|IC|(NEU) | ≥ +15% 相对提升 |
| OOS 日胜率(逐日 IC 更优占比) | ≥ 60% |
| 综合 IR / sharpe(gap1) | 更高 |
| 训练—测试 gap(train IC − OOS IC) | 自适应 ≤ 固定版 +0.01 |
状态覆盖检查(每折)
| 状态 | 全样本天数 | 单折训练窗可期 | 处置 |
| 低迷 | 29(聚类 21) | ~14–19 | 可拟合 |
| 常态 | 19(聚类 17) | ~11–13 | 可拟合 |
| 活跃 | 7(聚类 10) | ~4–7 | 只做软权重,不做硬符号 |
| 极端 | 4(聚类 11) | ~2–7 | 并入低迷侧规则,禁止独立拟合 |
| 买压 | 3 | ~2 | 仅 rolling 偏离度软编码 |