# app/src/trading/strategies/registry.py from __future__ import annotations from src.trading.strategies.base import BaseStrategy from src.trading.strategies.hold import HoldStrategy from src.trading.strategies.scalp import ScalpStrategy from src.trading.strategies.trend import TrendStrategy class StrategyRegistry: # доступные стратегии _strategies: dict[str, BaseStrategy] = { "HOLD": HoldStrategy(), "TREND": TrendStrategy(), "GRID": HoldStrategy(), "SCALP": ScalpStrategy(), } # сбросить runtime-память одной стратегии @classmethod def reset_runtime( cls, name: str | None = None, *, symbol: str | None = None, ) -> None: if name: strategy = cls.get(name) strategy.reset_runtime(symbol) return for strategy in cls._strategies.values(): strategy.reset_runtime(symbol) # сбросить runtime-память всех стратегий @classmethod def reset_all_runtime(cls) -> None: cls.reset_runtime() # получить стратегию по имени @classmethod def get(cls, name: str | None) -> BaseStrategy: if not name: return cls._strategies["HOLD"] normalized_name = name.strip().upper() return cls._strategies.get(normalized_name, cls._strategies["HOLD"]) # получить список доступных стратегий @classmethod def names(cls) -> list[str]: return sorted(cls._strategies.keys())