""" Configuration settings for Binance WebSocket data ingestion system """ from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): """Application settings with validation""" model_config = SettingsConfigDict( env_file=".env", case_sensitive=True, extra="ignore" # Ignore extra fields from environment ) # Binance WebSocket Configuration BINANCE_WS_BASE_URL: str = "wss://fstream.binance.com" SYMBOL: str = "btcusdt" # Stream subscriptions KLINE_INTERVALS: str = "5m,15m,1h,4h" # Multiple kline intervals (comma-separated) DEPTH_LEVEL: int = 20 # Top 20 order book levels # Redis Configuration REDIS_HOST: str = "redis" REDIS_PORT: int = 6379 REDIS_DB: int = 0 REDIS_PASSWORD: str = "" # Redis Stream Keys (prefix, actual keys are dynamic based on intervals) REDIS_STREAM_KLINE_PREFIX: str = "binance:raw:kline" # Will be: binance:raw:kline:5m, etc. REDIS_STREAM_DEPTH: str = "binance:raw:depth:20" REDIS_STREAM_TRADE: str = "binance:raw:trade" @property def kline_intervals_list(self) -> list: """Parse kline intervals from comma-separated string""" return [interval.strip() for interval in self.KLINE_INTERVALS.split(',')] # Stream Configuration REDIS_STREAM_MAXLEN: int = 10000 # Keep last 10k messages per stream # Reconnection Strategy RECONNECT_INITIAL_DELAY: float = 1.0 # Initial delay in seconds RECONNECT_MAX_DELAY: float = 60.0 # Max delay in seconds RECONNECT_MULTIPLIER: float = 2.0 # Exponential backoff multiplier MAX_RECONNECT_ATTEMPTS: int = 100 # -1 for unlimited # Memory Protection MAX_BUFFER_SIZE: int = 1000 # Max messages in memory buffer RATE_LIMIT_MESSAGES_PER_SEC: int = 1000 # Max messages processed per second # Message Deduplication DEDUP_CACHE_SIZE: int = 10000 # Size of deduplication cache DEDUP_TTL_SECONDS: int = 300 # TTL for dedup entries (5 minutes) # Monitoring HEALTH_CHECK_INTERVAL: int = 30 # Health check interval in seconds LOG_LEVEL: str = "INFO" # LLM Gate Configuration (极简门控 - 频率为主,量化初筛) LLM_GATE_ENABLED: bool = True # 启用 LLM 门控 # 数据要求 LLM_MIN_CANDLES: int = 100 # 最少K线数量 # 信号质量(极简 - 只检查综合得分) LLM_MIN_COMPOSITE_SCORE: float = 0.0 # Gate关闭 - 每次都调用LLM # 频率限制(核心控制!) LLM_MAX_CALLS_PER_DAY: int = 12 # 每天最多调用次数 LLM_MIN_INTERVAL_MINUTES: int = 15 # 最小调用间隔(分钟) settings = Settings()