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) ? '' : '—') + ' | ' +