feat: collect_data补全——①switched用attributed策略定义评估(600262切v8.1后按v8.1评)②无策略/失效持仓用position_management框架③当前温区合格策略注入(regime_active)

This commit is contained in:
xxm
2026-08-18 22:23:17 +08:00
parent e3cb8460df
commit 6dd4373898
+44 -1
View File
@@ -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拉最新价和基本面