diff --git a/CLAUDE.md b/CLAUDE.md index 899e6d8..7e70c34 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -112,7 +112,7 @@ Legacy fields kept for config-shape compatibility: `rsi_entry_threshold`, `min_e ### PlatformConfig (top level) `symbol="XAU/USD"`, primary TF H1, confirmations [M15, H4], `data_lookback_days=60`, `scan_pairs=[XAUUSD]` (mirrors config.json `scanning.pairs` — see below), `scan_timeframes=[M5,M15,H1,H4]`, `candle_buffer_seconds=10`, `ws_cooldown_seconds=300`. -Deployment settings (credentials, scan pairs/TFs, per-pair base blocked hours, alert quality, log level) overlay from config.json via `app_config.apply_pair_overrides`, applied in the pair factory BEFORE per-TF deltas. `scanning.pairs` in config.json is now the actual deployment switch for what the bot scans — `PlatformConfig.scan_pairs` just carries the resolved value. +Per-pair base blocked hours plus `scan_pairs`/`scan_timeframes` overlay from config.json via `app_config.apply_pair_overrides`, applied in the pair factory BEFORE per-TF deltas. Credentials, alert quality, and log level never touch `PlatformConfig` — `telegram_bot.py` and `data_provider.py` read them directly from `app_config.get_app_config()` and its resolvers. `scanning.pairs` in config.json is the deployment switch for what the bot scans — `PlatformConfig.scan_pairs` just carries the resolved value. --- diff --git a/telegram_bot.py b/telegram_bot.py index 1962a82..7f3aa46 100755 --- a/telegram_bot.py +++ b/telegram_bot.py @@ -113,11 +113,9 @@ _CHANNEL_ID_RAW = telegram_channel_id() CHANNEL_ID: Optional[int] = int(_CHANNEL_ID_RAW) if _CHANNEL_ID_RAW else None # ── Pairs & buttons ─────────────────────────────────────────────────── -# The scanned pair list is config-driven: `scanning.pairs` in config.json -# (read via app_config) is the single switch for single- vs multi-pair -# operation — `apply_pair_overrides` stamps it onto PlatformConfig.scan_pairs -# so the two stay in sync. Buttons, WS subscriptions, and scan loops all -# derive from it. +# The scanned pair list is config.json-driven (`scanning.pairs`, read via +# app_config) and is the single switch for single- vs multi-pair operation. +# Buttons, WS subscriptions, and scan loops all derive from it. SCAN_PAIRS = list(_APP.scan_pairs)