From 6dd43738987063fede092922666601013c1daef9 Mon Sep 17 00:00:00 2001 From: xxm Date: Tue, 18 Aug 2026 22:23:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20collect=5Fdata=E8=A1=A5=E5=85=A8?= =?UTF-8?q?=E2=80=94=E2=80=94=E2=91=A0switched=E7=94=A8attributed=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E5=AE=9A=E4=B9=89=E8=AF=84=E4=BC=B0(600262=E5=88=87v8?= =?UTF-8?q?.1=E5=90=8E=E6=8C=89v8.1=E8=AF=84)=E2=91=A1=E6=97=A0=E7=AD=96?= =?UTF-8?q?=E7=95=A5/=E5=A4=B1=E6=95=88=E6=8C=81=E4=BB=93=E7=94=A8position?= =?UTF-8?q?=5Fmanagement=E6=A1=86=E6=9E=B6=E2=91=A2=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E6=B8=A9=E5=8C=BA=E5=90=88=E6=A0=BC=E7=AD=96=E7=95=A5=E6=B3=A8?= =?UTF-8?q?=E5=85=A5(regime=5Factive)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/profile-scripts/batch_reassess.py | 45 +++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/deploy/profile-scripts/batch_reassess.py b/deploy/profile-scripts/batch_reassess.py index bd733515..39f479a3 100644 --- a/deploy/profile-scripts/batch_reassess.py +++ b/deploy/profile-scripts/batch_reassess.py @@ -99,9 +99,17 @@ def collect_data(code): data["changelog_json"] = r[12] or "" data["reassessed_at"] = r[13] or "" data["strategy_name"] = r[15] or "" # 2026-08-18 来源策略 + # 2026-08-18 策略状态感知:switched → 用 strategy_attributed(切到的策略)的定义评估 + try: + _st0 = conn.execute("SELECT strategy_state, strategy_attributed FROM holding_strategies WHERE code=? AND status='active'", (code,)).fetchone() + _eval_strat = data["strategy_name"] + if _st0 and _st0[0] == "switched" and _st0[1]: + _eval_strat = _st0[1] + except Exception: + _eval_strat = data["strategy_name"] # 2026-08-18 策略语义注入:读 strategy_defs 定义卡 + 情势体检 try: - _sd = conn.execute("SELECT display_name, summary, entry_logic, exit_logic, review_focus, holding_style, status, retired_reason, superseded_by, regime FROM strategy_defs WHERE strategy_name=?", (data["strategy_name"],)).fetchone() + _sd = conn.execute("SELECT display_name, summary, entry_logic, exit_logic, review_focus, holding_style, status, retired_reason, superseded_by, regime FROM strategy_defs WHERE strategy_name=?", (_eval_strat,)).fetchone() if _sd: data["strategy_def"] = { "display_name": _sd[0] or data["strategy_name"], "summary": _sd[1] or "", @@ -148,6 +156,41 @@ def collect_data(code): data["held_cost"] = hr[1] or 0 else: data["held"] = False + # 2026-08-18 持仓处置决策:策略状态感知(invalidated/none → position_management) + try: + _st_r = conn.execute("SELECT strategy_state, strategy_attributed, strategy_provenance FROM holding_strategies WHERE code=? AND status='active'", (code,)).fetchone() + data["strategy_state"] = _st_r[0] or "active" if _st_r else "active" + data["strategy_attributed"] = _st_r[1] or "" if _st_r else "" + # 无策略/失效 + 持仓 → 用 position_management 框架 + _need_pos_mgmt = (data.get("strategy_state") in ("invalidated", "none") or not data.get("strategy_def")) and data.get("held") + if _need_pos_mgmt: + _pm = conn.execute("SELECT display_name, summary, entry_logic, exit_logic, review_focus, holding_style, status, retired_reason, superseded_by, regime FROM strategy_defs WHERE strategy_name='position_management'").fetchone() + if _pm: + data["strategy_def"] = { + "display_name": _pm[0], "summary": _pm[1], "entry_logic": _pm[2], + "exit_logic": _pm[3], "review_focus": _pm[4], "holding_style": _pm[5], + "status": _pm[6], "retired_reason": _pm[7], "superseded_by": _pm[8], "regime": _pm[9], + } + data["pos_mgmt_triggered"] = True + # 当前温区合格策略 + try: + import os as _os + import json as _json2 + _wf = "/home/hmo/MoFin/data/strategy_weights.json" + if _os.path.exists(_wf): + _wdata = _json2.load(open(_wf, encoding="utf-8")) + _ra = _wdata.get("regime_active", {}) + _cur_rg = data.get("situation", {}).get("regime_a", "unknown") + data["current_regime_strategies"] = _ra.get(_cur_rg, []) + data["current_regime"] = _cur_rg + else: + data["current_regime_strategies"] = [] + data["current_regime"] = data.get("situation", {}).get("regime_a", "unknown") + except Exception: + data["current_regime_strategies"] = [] + data["current_regime"] = data.get("situation", {}).get("regime_a", "unknown") + except Exception: + pass conn.close() # 从腾讯API拉最新价和基本面