Persist ForexDataProvider across calls — speeds up repeat /scans 50×
Cold /scan is rate-limited (4 pairs × 3 TFs = 12 credits, free tier 8/min) so the first call takes ~73s. Without provider reuse, every subsequent /scan is also ~73s because the cache is rebuilt from scratch. Reusing the provider on the bot instance preserves the OHLCV cache between calls, so a /scan within the cache TTLs (M15: 5m, H1: 30m, D1: 4h) skips the prefetch entirely: Cold /scan: ~73s (rate-limited prefetch + analyze + Gemini) Warm /scan: ~10s (cached data, news re-scored) Re-warm: ~1.5s (cached data + cached sentiment) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+5
-1
@@ -274,6 +274,10 @@ class ForexTelegramBot:
|
|||||||
self._executor = ThreadPoolExecutor(
|
self._executor = ThreadPoolExecutor(
|
||||||
max_workers=len(SCAN_TIMEFRAMES), thread_name_prefix="forex"
|
max_workers=len(SCAN_TIMEFRAMES), thread_name_prefix="forex"
|
||||||
)
|
)
|
||||||
|
# Persistent ForexDataProvider so the OHLCV cache survives across
|
||||||
|
# /scan and /signal calls. Without this each call burns API credits
|
||||||
|
# re-fetching the same bars and waits up to 60s on the rate limit.
|
||||||
|
self._provider = ForexDataProvider(PlatformConfig())
|
||||||
|
|
||||||
# ── Engine helpers ────────────────────────────────────────────────
|
# ── Engine helpers ────────────────────────────────────────────────
|
||||||
|
|
||||||
@@ -297,7 +301,7 @@ class ForexTelegramBot:
|
|||||||
for tf_name in SCAN_TIMEFRAMES
|
for tf_name in SCAN_TIMEFRAMES
|
||||||
for tf in [_TF_MAP[tf_name]] + _TF_CONFIRMATIONS.get(tf_name, [])
|
for tf in [_TF_MAP[tf_name]] + _TF_CONFIRMATIONS.get(tf_name, [])
|
||||||
})
|
})
|
||||||
provider = ForexDataProvider(PlatformConfig())
|
provider = self._provider # reuse across calls — see __init__
|
||||||
|
|
||||||
loop = asyncio.get_running_loop()
|
loop = asyncio.get_running_loop()
|
||||||
if progress:
|
if progress:
|
||||||
|
|||||||
Reference in New Issue
Block a user