feat: 组合Tab展示v_mr精选版(v_mr_sel)真实数据, 删除被证伪的最超跌文案
- 后端: members优先读v_mr_sel(144笔/15.51%/90.3%), 无则回退v_mr基线 - 前端: 实盘链路文字改为精选规则描述(正面4因子+剔除4负面), 删最超跌 - 前端: v_mr卡片加精选版徽章标识 - 数据: v_mr_sel已存strategy_research(六步方法论推导结果)
This commit is contained in:
@@ -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"),
|
||||
|
||||
Reference in New Issue
Block a user