60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
"""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()
|
|
}
|