53 lines
1.6 KiB
Python
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()) |