TradingAgents/tradingagents/agents/discovery/quantitative_cache.py

48 lines
1.2 KiB
Python

import logging
from collections import OrderedDict
from datetime import datetime
from typing import Any
import pandas as pd
logger = logging.getLogger(__name__)
MAX_CACHE_SIZE = 100
_price_data_cache: OrderedDict[str, tuple[pd.DataFrame, datetime]] = OrderedDict()
def get_cached_price_data(ticker: str) -> pd.DataFrame | None:
if ticker not in _price_data_cache:
return None
df, timestamp = _price_data_cache[ticker]
_price_data_cache.move_to_end(ticker)
return df.copy()
def set_cached_price_data(ticker: str, data: pd.DataFrame) -> None:
global _price_data_cache
if ticker in _price_data_cache:
_price_data_cache.move_to_end(ticker)
_price_data_cache[ticker] = (data.copy(), datetime.now())
return
while len(_price_data_cache) >= MAX_CACHE_SIZE:
_price_data_cache.popitem(last=False)
_price_data_cache[ticker] = (data.copy(), datetime.now())
logger.debug(
"Cached price data for %s (cache size: %d)", ticker, len(_price_data_cache)
)
def clear_run_cache() -> None:
global _price_data_cache
count = len(_price_data_cache)
_price_data_cache.clear()
logger.debug("Cleared run cache (%d entries removed)", count)