diff --git a/evolution/evolution_api.py b/evolution/evolution_api.py index ac754e51..8649458c 100644 --- a/evolution/evolution_api.py +++ b/evolution/evolution_api.py @@ -108,13 +108,22 @@ def get_combo_dashboard(): combos.append(d) # 3. 组合成员策略的独立指标 + # v_mr 优先取精选版 v_mr_sel(六步方法论调优,2026-08-02),无则回退基线 v_mr members = {} for v in ["v_next4", "v_mr"]: - r = conn.execute( - "SELECT results_json FROM strategy_research" - " WHERE version=? AND period_tag='10y' ORDER BY id DESC LIMIT 1", - (v,), - ).fetchone() + sel_v = "v_mr_sel" if v == "v_mr" else None + candidates = [sel_v, v] if sel_v else [v] + r = None + used_sel = False + for cv in candidates: + r = conn.execute( + "SELECT results_json FROM strategy_research" + " WHERE version=? AND period_tag='10y' ORDER BY id DESC LIMIT 1", + (cv,), + ).fetchone() + if r: + used_sel = (cv == sel_v) + break if r: res = json.loads(r[0]) s = res.get("summary", {}) @@ -122,6 +131,8 @@ def get_combo_dashboard(): p5 = s.get("portfolio", {}) members[v] = { "role": "趋势市主战" if v == "v_next4" else "震荡/下跌市接管", + "version": "v_mr_sel" if used_sel else "v_mr", + "is_sel": used_sel, "trades": s.get("total_trades"), "win_rate": s.get("win_rate"), "avg_profit_pct": s.get("avg_profit_pct"), diff --git a/static/index.html b/static/index.html index 93f58445..a67a0095 100644 --- a/static/index.html +++ b/static/index.html @@ -2090,7 +2090,7 @@ async function renderResearchCombo() { const u = m.universality || {}; const yearly5 = m.positions_taken_5slot && m.positions_taken_5slot > 0 ? Math.round(m.positions_taken_5slot / 10) : '—'; h += '