From f64d3aec8397678cbed71f10ff6d0ff2328cf3e4 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Wed, 1 Apr 2026 22:01:24 +0800 Subject: [PATCH] Filter market pushes by local trading window --- src/utils/telegram_push.py | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/utils/telegram_push.py b/src/utils/telegram_push.py index 85a925de..334f7de7 100644 --- a/src/utils/telegram_push.py +++ b/src/utils/telegram_push.py @@ -448,17 +448,34 @@ def _shortlist_focus_payloads( payloads: List[Dict[str, Any]], *, top_n: int, + for_push: bool = False, ) -> List[Dict[str, Any]]: ranked = sorted( payloads, key=lambda item: _market_monitor_score(item), reverse=True, ) - return [ - item for item in ranked - if bool((item.get("market_snapshot") or {}).get("available")) - and _market_price_cap_ok(item, require_actionable_quote=True) - ][:top_n] + shortlisted: List[Dict[str, Any]] = [] + for item in ranked: + if not bool((item.get("market_snapshot") or {}).get("available")): + continue + if not _market_price_cap_ok(item, require_actionable_quote=True): + continue + if for_push: + peak_context = _local_peak_context(item) + local_min = _minute_of_day(peak_context.get("local_time")) + minutes_to_peak = peak_context.get("minutes_to_peak") + if local_min is not None and local_min < 9 * 60: + continue + if isinstance(minutes_to_peak, int | float): + if minutes_to_peak > 360: + continue + if minutes_to_peak < -90: + continue + shortlisted.append(item) + if len(shortlisted) >= top_n: + break + return shortlisted def _build_focus_digest_message( @@ -471,7 +488,7 @@ def _build_focus_digest_message( digest_interval = _format_interval_brief( _env_int("TELEGRAM_MARKET_FOCUS_DIGEST_INTERVAL_SEC", 1800), ) - shortlisted = _shortlist_focus_payloads(payloads, top_n=top_n) + shortlisted = _shortlist_focus_payloads(payloads, top_n=top_n, for_push=True) if not shortlisted: return ""