Files
OpenFin/backend/services/price_cache.py
OpenSquared 16ccc7c2c7 feat: cycle
2026-07-15 14:59:11 +02:00

42 lines
1.4 KiB
Python

"""
Cycle Actions — standalone "refresh-price-data" action.
Downloads fresh OHLCV for every watchlist instrument and caches it in
price_data_cache. Deliberately independent from the technical-indicators /
wavelet code paths (which each do their own live yfinance fetch) — this is an
inspection/refresh tool for decomposing a cycle, not a shared cache other
steps depend on, so it can't regress the already-tested live cycle path.
"""
import logging
from typing import Any, Dict
logger = logging.getLogger(__name__)
def refresh_watchlist_price_data(period: str = "3mo") -> Dict[str, Any]:
from services.database import get_instruments_watchlist, upsert_price_data
from services.data_fetcher import get_historical
tickers = [w["ticker"] for w in get_instruments_watchlist()]
per_ticker: Dict[str, int] = {}
failed = []
for ticker in tickers:
try:
rows = get_historical(ticker, period=period, interval="1d")
if not rows:
failed.append(ticker)
continue
n = upsert_price_data(ticker, rows)
per_ticker[ticker] = n
except Exception as e:
logger.warning(f"[PriceCache] Failed to refresh {ticker}: {e}")
failed.append(ticker)
return {
"tickers_refreshed": len(per_ticker),
"rows_written": sum(per_ticker.values()),
"per_ticker": per_ticker,
"failed": failed,
}