From 9dc21a3088cf9dbfeb637ac9afb09c642743f522 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Wed, 1 Apr 2026 19:43:57 +0800 Subject: [PATCH] Skip non-tradable markets in monitor digests --- src/utils/telegram_push.py | 4 +++- tests/test_market_alert_engine.py | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/utils/telegram_push.py b/src/utils/telegram_push.py index 0ee10312..f8922931 100644 --- a/src/utils/telegram_push.py +++ b/src/utils/telegram_push.py @@ -461,7 +461,9 @@ def _build_focus_digest_message( ) shortlisted = [ item for item in ranked - if _market_monitor_score(item) > 0 and bool((item.get("market_snapshot") or {}).get("available")) + if _market_monitor_score(item) > 0 + and bool((item.get("market_snapshot") or {}).get("available")) + and _market_price_cap_ok(item, require_actionable_quote=True) ][:top_n] if not shortlisted: return "" diff --git a/tests/test_market_alert_engine.py b/tests/test_market_alert_engine.py index 6e0b23be..9112a08c 100644 --- a/tests/test_market_alert_engine.py +++ b/tests/test_market_alert_engine.py @@ -1,4 +1,5 @@ from src.analysis.market_alert_engine import build_trading_alerts +from src.utils.telegram_push import build_market_monitor_digest def _sample_weather_payload(): @@ -173,3 +174,24 @@ def test_peak_passed_guard_suppresses_late_day_cooldown_alerts(): assert out["rules"]["forecast_breakthrough"]["raw_triggered"] is True assert "高温已过(暂停推送)" in out["telegram"]["zh"] assert "暂停主动推送" in out["telegram"]["zh"] + + +def test_market_monitor_digest_skips_non_tradable_market(monkeypatch): + payload = build_trading_alerts( + city_weather=_sample_weather_payload(), + map_url="https://example.com/map", + ) + payload["market_snapshot"]["available"] = True + payload["market_snapshot"]["market_closed"] = True + payload["market_snapshot"]["market_tradable"] = False + payload["market_snapshot"]["market_accepting_orders"] = False + payload["market_snapshot"]["market_tradable_reason"] = "in_review" + + monkeypatch.setattr( + "src.utils.telegram_push.build_trade_alert_for_city", + lambda city, config, force_refresh=False: payload, + ) + monkeypatch.setenv("TELEGRAM_ALERT_CITIES", "ankara") + + digest = build_market_monitor_digest({}, slot_label="当前市场概览") + assert digest == "ℹ️ 当前没有可用的市场监控摘要。"