feat(web): 因子研究升级 + 因子组合页

- 因子元数据增加 brief 使用简介(后端 FactorDef + /api/factors 返回,9 个内置因子补齐文案)
- 因子研究页:
  · 时间默认「今日 ~ 近 6 个月」
  · 因子多选,逐个跑 IC/RankIC Job 并分卡展示报告
  · 目录显示使用简介,行点击展开公式/方向/用法详解
  · 新增计分规则说明与「去因子组合」入口
- 因子组合页 /factors/compose:多因子勾选+权重、组合得分规则说明(z-score×权重求和→TopN),
  可配 topN/调仓/区间/ST,一键回测 Job → 净值/回撤/月度/未建模标注
- 回测页时间默认同样近 6 月
- 验证:tsc + next build 通过;组合回测(momentum_60×1.5 + volatility_60×1.0)Job 成功归档
  EXP-330CAAAE(-13.51%,交易 20);后端 factors/research/api 相关测试通过 / ruff clean
This commit is contained in:
Simon
2026-09-07 21:36:16 +08:00
parent 1cf7c84897
commit a77d3c13c3
10 changed files with 519 additions and 97 deletions
+1 -3
View File
@@ -76,9 +76,7 @@ class TestBacktestMain:
engine = LocalEngine()
momentum = _spec() # momentum_20
assert engine.required_columns(momentum) == {"close"}
volume = _spec().model_copy(
update={"factors": [FactorSpec(name="volume_ratio_5_60")]}
)
volume = _spec().model_copy(update={"factors": [FactorSpec(name="volume_ratio_5_60")]})
assert engine.required_columns(volume) == {"close", "volume"}
unknown = _spec().model_copy(update={"factors": [FactorSpec(name="no_such")]})
# 未知因子不参与列裁剪,交由执行期统一报错