"""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() }