feat: price_monitor温区感知+信号溯源——非激活策略买入/加仓机会抑制(🧊温区未激活跳过),风控(卖出/止盈)仍推; 风控和买入机会都记录signal_ledger溯源

This commit is contained in:
hmo
2026-08-13 21:49:02 +08:00
parent 7a35bc7ed6
commit 72e94f20f9
+63 -2
View File
@@ -11,6 +11,59 @@ from datetime import datetime
from mo_data import read_decisions
from alert_logger import record_alert, clear_alert
# ── 温区感知 + 信号溯源(2026-08-13)──
try:
from regime_gate import _load_weights
except Exception:
_load_weights = None
def _load_active_strats():
"""当前温区激活策略集合(strategy_weights.json matched"""
if _load_weights is None:
return None
try:
w = _load_weights()
if w and w.get("weights"):
return {k for k, v in w["weights"].items() if v.get("matched")}
except Exception:
pass
return None
def _is_strategy_active(d_entry):
"""该持仓策略是否在当前温区激活。未标记策略默认激活(兼容持仓管理/风控)"""
act = _load_active_strats()
if act is None:
return True
for key in ("tag", "version", "strategy_type", "decision_type"):
v = d_entry.get(key)
if v and str(v) in act:
return True
# 该策略在权重表中但不在激活集 → 非激活
try:
w = _load_weights() or {}
wmap = w.get("weights") or {}
for key in ("tag", "version", "strategy_type", "decision_type"):
v = d_entry.get(key)
if v and v in wmap:
return v in act
except Exception:
pass
return True
def _record_signal(code, name, reason, strategy=""):
"""信号溯源:记录到 signal_ledger"""
try:
from signal_ledger import record_signal
from regime_gate import get_current_regime
from temp_band import get_market_temp
rg = get_current_regime()
tp = get_market_temp()
record_signal(code=code, name=name, strategy=strategy, version=strategy,
regime=rg.get("regime", ""), temp_band=tp.get("band", ""),
reason=reason, source_module="price_monitor")
except Exception:
pass
BREACH_PATH = "/home/hmo/.hermes/zone_breach.json"
STATE_PATH = "/home/hmo/.hermes/price_trigger_state.json"
@@ -614,9 +667,17 @@ def run_once(round_label=""):
msg = f"🔔 {name}({code}) 价{price}→触发{zone_desc},已触发重评|RR={rr}"
_push_action("操作信号", msg)
outputs.append(f" 📨 区间触发重评→已推送Dad: {action}")
# 2026-08-13 信号溯源:风控动作记录
_record_signal(code, name, f"风控:{timing_signal} {zone_desc}", strategy=d.get("tag") or d.get("version") or "")
else:
_zone_entries.append(f"{name}({code}) {price}{zone_desc}+重评{timing_signal}|RR={rr}")
outputs.append(f" 📋 机会记入摘要: {timing_signal} RR={rr}")
# 2026-08-13 温区感知:非激活策略的买入/加仓机会抑制(不进摘要)
if _is_strategy_active(d):
_zone_entries.append(f"{name}({code}) {price}{zone_desc}+重评{timing_signal}|RR={rr}")
outputs.append(f" 📋 机会记入摘要: {timing_signal} RR={rr}")
# 2026-08-13 信号溯源:买入机会记录
_record_signal(code, name, f"买入机会:{zone_desc} {timing_signal}", strategy=d.get("tag") or d.get("version") or "")
else:
outputs.append(f" 🧊 温区未激活跳过: {name}({code}) {timing_signal} RR={rr}")
else:
reason = f"重评结果:{timing_signal},不构成操作建议"
outputs.append(f" 📋 本地日志(不推): {reason}")