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
+14
View File
@@ -0,0 +1,14 @@
/** 研究区间默认值:结束=当日,开始=往前推 6 个月(YYYY-MM-DD)。 */
export function isoDate(d: Date): string {
const m = String(d.getMonth() + 1).padStart(2, "0");
const day = String(d.getDate()).padStart(2, "0");
return `${d.getFullYear()}-${m}-${day}`;
}
export function recentRange(): { start: string; end: string } {
const end = new Date();
const start = new Date();
start.setMonth(start.getMonth() - 6);
return { start: isoDate(start), end: isoDate(end) };
}
+1
View File
@@ -13,6 +13,7 @@ export interface Stock {
export interface FactorMeta {
name: string;
description: string;
brief?: string;
formula: string;
frequency: string;
lookback: number;