From 649d52071a32c8d3119f195d7488a0ce12240faf Mon Sep 17 00:00:00 2001 From: xxm Date: Wed, 5 Aug 2026 13:30:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BB=84=E5=90=88=E9=A1=B5=E5=8A=A0S2?= =?UTF-8?q?=E5=8D=A1=E7=89=87(s2=5Fpanic=E7=AD=96=E7=95=A5=E5=AE=B6?= =?UTF-8?q?=E6=97=8F=E6=88=90=E5=91=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- evolution/evolution_api.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/evolution/evolution_api.py b/evolution/evolution_api.py index 2d24ae81..c47dd2c6 100644 --- a/evolution/evolution_api.py +++ b/evolution/evolution_api.py @@ -147,6 +147,33 @@ def get_combo_dashboard(): "positions_taken_full": pf.get("positions_taken"), } + # 3.5 策略家族 S2 卡片(s2_panic,2026-08-05 §39/§40 上线) + r = conn.execute( + "SELECT results_json FROM strategy_research" + " WHERE version='s2_panic' AND period_tag='10y' ORDER BY id DESC LIMIT 1" + ).fetchone() + if r: + res = json.loads(r[0]) + s2 = res.get("summary", {}) + pf = s2.get("portfolio_full", {}) + p5 = s2.get("portfolio", {}) + members["s2_panic"] = { + "role": "极端恐慌买超跌(RSI<25)", + "version": "s2_panic", + "is_sel": True, + "trades": s2.get("total_trades"), + "win_rate": s2.get("win_rate"), + "avg_profit_pct": s2.get("avg_profit_pct"), + "avg_hold_days": s2.get("avg_hold_days"), + "cagr_pct": p5.get("cagr_pct"), + "return_pct": p5.get("total_return_pct"), + "max_dd_pct": p5.get("portfolio_max_dd_pct"), + "slots": p5.get("slots") or 8, + "universality": s2.get("universality", {}), + "positions_taken_5slot": p5.get("positions_taken"), + "positions_taken_full": pf.get("positions_taken"), + } + conn.close() return { "regime": regime,