feat: price_monitor温区感知+信号溯源——非激活策略买入/加仓机会抑制(🧊温区未激活跳过),风控(卖出/止盈)仍推; 风控和买入机会都记录signal_ledger溯源
This commit is contained in:
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user