from pydantic import BaseModel, Field from typing import List, Dict, Any, Optional from enum import Enum class TimeFrame(str, Enum): MINUTE_1 = '1m' MINUTE_5 = '5m' MINUTE_15 = '15m' MINUTE_30 = '30m' HOUR_1 = '1h' HOUR_4 = '4h' DAY_1 = '1d' WEEK_1 = '1w' MONTH_1 = '1M' class CryptoPair(BaseModel): symbol: str base: str quote: str type: str = "spot" class ExchangeInfo(BaseModel): id: str name: str has_fetchOHLCV: bool = False timeframes: List[str] = [] class OHLCVData(BaseModel): timestamp: int datetime: str open: float high: float low: float close: float volume: float class IndicatorValues(BaseModel): timestamp: int datetime: str rsi: Optional[float] = None macd: Optional[float] = None macd_signal: Optional[float] = None macd_histogram: Optional[float] = None ema_9: Optional[float] = None ema_21: Optional[float] = None ema_50: Optional[float] = None ema_200: Optional[float] = None bb_upper: Optional[float] = None bb_middle: Optional[float] = None bb_lower: Optional[float] = None open: Optional[float] = None high: Optional[float] = None low: Optional[float] = None close: Optional[float] = None volume: Optional[float] = None