diff --git a/scripts/price_monitor.py b/scripts/price_monitor.py index 093dfdac..df7dac6b 100644 --- a/scripts/price_monitor.py +++ b/scripts/price_monitor.py @@ -331,6 +331,16 @@ def run_once(round_label=""): state = load_state() outputs = [] state_updated = False + # 时间冷却:同股同区间30分钟内不重复推 + _push_cooldown = {} + def _can_push(code, zone_key): + now = time.time() + key = f"{code}_{zone_key}" + last = _push_cooldown.get(key, 0) + if now - last < 1800: # 30分钟 + return False + _push_cooldown[key] = now + return True # 收集所有需要检查的代码 check_codes = set() @@ -384,8 +394,9 @@ def run_once(round_label=""): buy_lo = d.get("entry_low", 0) buy_hi = d.get("entry_high", 0) rr = result.get("rr_ratio", 0) - msg = f"🔔 {name}({code}) 价{price}→触发操作区间{max(buy_lo,0):.2f}~{buy_hi:.2f},已触发重评|RR={rr}" - push_to_xmpp(msg) + if _can_push(code, "stop_loss"): + msg = f"🔔 {name}({code}) 价{price}→触发操作区间{max(buy_lo,0):.2f}~{buy_hi:.2f},已触发重评|RR={rr}" + push_to_xmpp(msg) outputs.append(f" 📨 止损重评→已推送Dad: {action}") except Exception as e: outputs.append(f" ⚠️ 止损重评失败: {e}") @@ -418,13 +429,15 @@ def run_once(round_label=""): zone_desc = f"操作区间{lo}~{hi}" if "买入" in timing_signal or "加仓" in timing_signal or "止损" in action: rr = result.get("rr_ratio", 0) - msg = f"🔔 {name}({code}) 价{price}→触发{zone_desc},已触发重评|RR={rr}" - push_to_xmpp(msg) - outputs.append(f" 📨 区间触发重评→已推送Dad: {action}") + if _can_push(code, key): + msg = f"🔔 {name}({code}) 价{price}→触发{zone_desc},已触发重评|RR={rr}" + push_to_xmpp(msg) + outputs.append(f" 📨 区间触发重评→已推送Dad: {action}") else: reason = f"重评结果:{timing_signal},不构成操作建议" - msg = f"📋 {name}({code}) 价{price}→{zone_desc},{reason}" - push_to_xmpp(msg) + if _can_push(code, key + "_note"): + msg = f"📋 {name}({code}) 价{price}→{zone_desc},{reason}" + push_to_xmpp(msg) outputs.append(f" 📨 区间触发→已推送说明: {reason}") except Exception as e: outputs.append(f" ⚠️ 区间重评失败: {e}")