From a4dd139fc13bc4a7b227264a3311023d7bd0dfc1 Mon Sep 17 00:00:00 2001 From: xxm Date: Mon, 3 Aug 2026 00:58:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BB=84=E5=90=88Tab=E5=B1=95=E7=A4=BA?= =?UTF-8?q?v=5Fmr=E7=B2=BE=E9=80=89=E7=89=88(v=5Fmr=5Fsel)=E7=9C=9F?= =?UTF-8?q?=E5=AE=9E=E6=95=B0=E6=8D=AE,=20=E5=88=A0=E9=99=A4=E8=A2=AB?= =?UTF-8?q?=E8=AF=81=E4=BC=AA=E7=9A=84=E6=9C=80=E8=B6=85=E8=B7=8C=E6=96=87?= =?UTF-8?q?=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端: members优先读v_mr_sel(144笔/15.51%/90.3%), 无则回退v_mr基线 - 前端: 实盘链路文字改为精选规则描述(正面4因子+剔除4负面), 删最超跌 - 前端: v_mr卡片加精选版徽章标识 - 数据: v_mr_sel已存strategy_research(六步方法论推导结果) --- evolution/evolution_api.py | 21 ++++++++++++++++----- static/index.html | 4 ++-- 2 files changed, 18 insertions(+), 7 deletions(-) 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 += '
' + - '
' + v + '' + + '
' + v + (m.is_sel ? ' 精选版' : '') + '' + '' + (m.role || '') + '
' + // 盈利率大字突出(用户关注的核心指标) '
' + @@ -2105,7 +2105,7 @@ async function renderResearchCombo() { '
覆盖月
' + (u.months || '—') + '
' + '
' + '
均持' + (m.avg_hold_days != null ? m.avg_hold_days + '天' : '—') + ' · 回撤' + (m.max_dd_pct != null ? m.max_dd_pct + '%' : '—') + ' · 组合年均' + yearly5 + '笔(人工可操作)
' + - (v === 'v_mr' ? '
📋 实盘链路:22k信号 → 组合模拟只执行' + (m.positions_taken_5slot || 0) + '笔 → 每日扫描器只挑最超跌少数候选(2026-08-02首跑仅3只)→ 人工确认建仓。22k是候选池,不是操作量。
' : '') + + (v === 'v_mr' ? '
📋 实盘链路(v_mr精选版 v_mr_sel):10年' + (m.trades || 0) + '个信号 → 六步方法论精选因子筛选(正面:mom20∈[-20,-14]+rsi_delta≥10+dist_ma20∈[-10,-7]+atr_pct≥4.5;剔除:大盘ADX≥35/资金流出/过深超跌/60日跌过32%)→ 组合模拟执行' + (m.positions_taken_5slot || 0) + '笔 → 每日扫描器候选 → 人工确认建仓。年均仅' + yearly5 + '笔,完全手工可操作。当前市场ADX=45.66强趋势下行,精选规则正确拒绝接飞刀(2026-08-03实测0命中)。
' : '') + '
'; } h += '
';