from __future__ import annotations from ktrade.strategy.base import Strategy from ktrade.strategy.benchmarks import BuyAndHold, Cash, EqualRisk, SimpleMomentum from ktrade.strategy.meanrev import ZScoreMeanReversion from ktrade.strategy.momentum import MovingAverageEnsemble, TimeSeriesMomentum _REGISTRY: dict[str, type[Strategy]] = { c.meta.name: c for c in (TimeSeriesMomentum, MovingAverageEnsemble, ZScoreMeanReversion, BuyAndHold, Cash, SimpleMomentum, EqualRisk) } def list_strategies() -> list[dict]: return [c.meta.model_dump() for c in _REGISTRY.values()] def get_strategy(name: str) -> type[Strategy]: if name not in _REGISTRY: raise KeyError(f"unknown strategy {name!r}; known: {sorted(_REGISTRY)}") return _REGISTRY[name] def strategy_names() -> list[str]: return list(_REGISTRY)