60 lines
1.8 KiB
Python
Raw Permalink Normal View History

2026-01-31 23:30:51 +09:00
"""Strategy registry."""
from typing import Dict, Type
from app.strategies.base import BaseStrategy
from app.strategies.composite.multi_factor import MultiFactorStrategy
from app.strategies.composite.magic_formula import MagicFormulaStrategy
from app.strategies.composite.super_quality import SuperQualityStrategy
from app.strategies.factors.momentum import MomentumStrategy
from app.strategies.factors.f_score import FScoreStrategy
from app.strategies.factors.value import ValueStrategy
from app.strategies.factors.quality import QualityStrategy
from app.strategies.factors.all_value import AllValueStrategy
# 전략 레지스트리
STRATEGY_REGISTRY: Dict[str, Type[BaseStrategy]] = {
'multi_factor': MultiFactorStrategy,
'magic_formula': MagicFormulaStrategy,
'super_quality': SuperQualityStrategy,
'momentum': MomentumStrategy,
'f_score': FScoreStrategy,
'value': ValueStrategy,
'quality': QualityStrategy,
'all_value': AllValueStrategy,
# TODO: 'super_value_momentum': SuperValueMomentumStrategy,
}
def get_strategy(strategy_name: str, config: Dict = None) -> BaseStrategy:
"""
전략 인스턴스 생성.
Args:
strategy_name: 전략 이름
config: 전략 설정
Returns:
전략 인스턴스
Raises:
ValueError: 전략을 찾을 없는 경우
"""
if strategy_name not in STRATEGY_REGISTRY:
raise ValueError(f"전략을 찾을 수 없습니다: {strategy_name}")
strategy_class = STRATEGY_REGISTRY[strategy_name]
return strategy_class(config=config)
def list_strategies() -> Dict[str, str]:
"""
사용 가능한 전략 목록.
Returns:
{전략 이름: 전략 설명} 딕셔너리
"""
return {
name: strategy_class.__doc__ or strategy_class.__name__
for name, strategy_class in STRATEGY_REGISTRY.items()
}