From e73ad9ac0ccf600999df9873e58534b30af96001 Mon Sep 17 00:00:00 2001 From: xxm Date: Sat, 15 Aug 2026 14:26:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20v=5Foversold=E7=BB=BC=E5=90=88=E5=88=86?= =?UTF-8?q?=3D0=E6=A0=B9=E5=9B=A0=E2=80=94=E2=80=94=E2=91=A0loadStrategyLi?= =?UTF-8?q?st=E7=AB=9E=E6=80=81(=E5=88=9D=E5=A7=8B1m=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E8=A6=86=E7=9B=962y=E6=B8=B2=E6=9F=93,=E5=91=A8=E6=9C=9F?= =?UTF-8?q?=E9=94=99=E4=B9=B1)=E2=91=A1=E6=B8=A9=E5=8C=BA=E8=A1=8C?= =?UTF-8?q?=E7=BB=BC=E5=90=88=E8=AF=AF=E7=94=A8=E6=95=B4=E4=BD=93conf(?= =?UTF-8?q?=E5=BA=94=E6=B8=A9=E5=8C=BA=E8=87=AA=E5=B7=B1=E6=A0=B7=E6=9C=AC?= =?UTF-8?q?=E9=87=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/index.html | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/static/index.html b/static/index.html index 34035f36..dfa58d88 100644 --- a/static/index.html +++ b/static/index.html @@ -2153,8 +2153,9 @@ function renderResearch() { '
加载中...
' + '
' + ''; - // 首次渲染即加载策略列表(无子Tab切换) - loadStrategyList(); + // 首次渲染即加载策略列表(无子Tab切换)。 + // 2026-08-15 修复:不能在此直接 loadStrategyList()——此时 btPeriod.value 还是初始默认 '1m', + // 与下方恢复 savedPt='2y' 后的调用并发竞态,1m 响应后到会覆盖 2y 渲染(周期错乱+综合分被小样本置信打崩)。 loadEvolutionBox(); loadStrategyRegimeBanner(); // 恢复用户上次选择的周期(防自动刷新重置,2026-07-30老爸抓包) @@ -2515,7 +2516,12 @@ function renderStrategyTable(strategies) { const sh = Math.min(Math.max((rwPf.sharpe_ratio || 0), 0), 20) / 20 * 20; const pfc = Math.min((rwPf.profit_factor || 0), 5) / 5 * 15; const dd = (1 - Math.min(rwPf.portfolio_max_dd_pct || 0, 50) / 50) * 15; - comp = Math.round((ret + w + sh + pfc + dd) * (s._confidence || 1)); + // 2026-08-15:温区行置信用温区自己样本量(regime_winrates 来自全量 strategy_regime_perf, + // 与所选周期无关)——用整体 conf 会把温区综合分错误打折(如 1m 视角整体只有 1 笔 → 全部归零) + const rn = tr || 0; + const rm = rw.universality ? (rw.universality.months || 0) : 0; + const rconf = Math.min(1, rn / 40) * (rm > 0 ? Math.min(1, rm / 6) : 1); + comp = Math.round((ret + w + sh + pfc + dd) * rconf); } const cagr = rwPf ? rwPf.cagr_pct : null; const ddV = rwPf ? rwPf.portfolio_max_dd_pct : null;