from __future__ import annotations from abc import ABC, abstractmethod from app.schemas import Candle class MarketData(ABC): """Read-only market data source (candles + last price).""" @abstractmethod async def fetch_candles(self, symbol: str, timeframe: str, limit: int) -> list[Candle]: raise NotImplementedError @abstractmethod async def fetch_price(self, symbol: str) -> float: raise NotImplementedError async def close(self) -> None: return None