feat: collect_data补全——①switched用attributed策略定义评估(600262切v8.1后按v8.1评)②无策略/失效持仓用position_management框架③当前温区合格策略注入(regime_active)
This commit is contained in:
@@ -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拉最新价和基本面
|
||||
|
||||
Reference in New Issue
Block a user