From b5aed519246f31d73575d54531d5582db9e22644 Mon Sep 17 00:00:00 2001 From: xxm Date: Thu, 6 Aug 2026 00:16:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A0=94=E7=A9=B6Tab=E4=B8=8E=E7=BB=84?= =?UTF-8?q?=E5=90=88Tab=E5=8F=8D=E6=98=A0=E6=9C=80=E6=96=B0=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E5=AE=B6=E6=97=8F=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 策略Tab: v_mr/v_mr_sel/v_combo 加'已证伪'红色标记(划线+badge+悬停原因) - 当前策略从v_next4单点扩展为策略家族(v_weak/s2_panic/v_next4) - 组合Tab: v_next4卡片version字段bug修复(错显示v_mr) - 组合Tab文案更新为策略家族(同时运行/票自己对号入座/零重叠) --- evolution/evolution_api.py | 2 +- static/index.html | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/evolution/evolution_api.py b/evolution/evolution_api.py index c47dd2c6..514dc940 100644 --- a/evolution/evolution_api.py +++ b/evolution/evolution_api.py @@ -131,7 +131,7 @@ def get_combo_dashboard(): p5 = s.get("portfolio", {}) members[v] = { "role": "趋势市主战" if v == "v_next4" else "震荡/下跌市接管", - "version": "v_weak" if used_sel else "v_mr", + "version": ("v_weak" if used_sel else "v_mr") if v == "v_mr" else v, "is_sel": used_sel, "trades": s.get("total_trades"), "win_rate": s.get("win_rate"), diff --git a/static/index.html b/static/index.html index 533b182b..270872d6 100644 --- a/static/index.html +++ b/static/index.html @@ -2068,7 +2068,7 @@ async function renderResearchCombo() { '🧬 当前组合方案' + '市场阶段: ' + regName + '' + (regime.adx ? ' ADX=' + regime.adx + '' : '') + '' + '' + - '
v_next4 趋势追涨 + v_mr 均值回复,按大盘市场阶段自动分工(strategy_lifecycle 6.5 实盘落地)
' + + '
策略家族(§39/§40):v_next4 趋势池 + v_weak 弱市甜区 + s2_panic 极端恐慌买超跌——同时运行、票自己对号入座、信号零重叠
' + '
'; for (const rt of (d.routing || [])) { const active = regime.regime === rt.regime; @@ -2328,6 +2328,12 @@ function renderStrategyTable(strategies) { }; // 条件格式色条:计算每列 min/max,单元格背景按相对大小画色条 const CURRENT_STRATEGY = 'v_next4'; + const CURRENT_FAMILY = new Set(['v_weak', 's2_panic', 'v_next4']); + const DEPRECATED = { + 'v_mr': '已证伪§12: 2018熊市依赖, 去2018后avg+2.14%/wr49.8%掷硬币, 组合回撤45%', + 'v_mr_sel': '已证伪§12: 144笔中54%集中在2018-10, 单一事件依赖不可信', + 'v_combo': '未采纳: 2年+47.9%但5年验证2023/24震荡转折年亏损(B动量族假突破)', + }; const ranges = {}; const cols = ['composite','universality_score','full_return_pct','capital_final','cagr_pct','total_trades','avg_hold_days','win_rate','avg_profit_pct','sharpe_ratio','profit_factor','portfolio_max_dd_pct']; for (const c of cols) { @@ -2378,10 +2384,11 @@ function renderStrategyTable(strategies) { const pf = st.portfolio || {}; const hasResult = st.total_trades != null; const smallSample = hasResult && st.total_trades < 40; - const isCurrent = s.version === CURRENT_STRATEGY && (s.market || 'all') !== 'hk'; + const isCurrent = (s.version === CURRENT_STRATEGY || CURRENT_FAMILY.has(s.version)) && (s.market || 'all') !== 'hk'; + const deprecatedReason = DEPRECATED[s.version]; const rowCls = 'border-b border-slate-800/50 hover:bg-slate-800/30 cursor-pointer' + (isCurrent ? ' bg-emerald-900/20 border-l-2 border-l-emerald-400' : ''); html += '' + - '' + s.version + (isCurrent ? ' 当前' : '') + ((s.market && s.market !== 'all') ? ' ' + (s.market === 'hk' ? '港' : 'A') + '' : '') + '' + + '' + s.version + (isCurrent ? ' 当前' : '') + (deprecatedReason ? ' 已证伪' : '') + ((s.market && s.market !== 'all') ? ' ' + (s.market === 'hk' ? '港' : 'A') + '' : '') + '' + '' + (s.name || '') + (smallSample ? ' ⚠️' : '') + '' + '' + (st.sizing_slots ? st.sizing_slots + '仓' : '10仓') + (st.conviction_model ? '' : '') + '' + '' + ((s.description && s.description.title) ? '' : '') + '' +