Files
dzentra_bot/app/src/trading/strategies/registry.py

53 lines
1.6 KiB
Python

# 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())