from django.apps import AppConfig class StrategiesConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'strategies' def ready(self): """앱 초기화 시 전략 데이터를 DB에 로드""" # 마이그레이션이나 다른 명령어 실행 중에는 초기화하지 않음 import sys if 'runserver' in sys.argv or 'test' in sys.argv: self._initialize_strategies() def _initialize_strategies(self): """전략 레지스트리를 DB에 초기화""" try: from .base import StrategyRegistry from .models import QuantStrategy, StrategyVersion available_strategies = StrategyRegistry.list_strategies() for strategy_name, strategy_info in available_strategies.items(): # QuantStrategy 생성 또는 업데이트 strategy_obj, created = QuantStrategy.objects.get_or_create( name=strategy_name, defaults={ 'description': strategy_info['description'], 'is_active': True } ) # 설명이 변경된 경우 업데이트 if not created and strategy_obj.description != strategy_info['description']: strategy_obj.description = strategy_info['description'] strategy_obj.save() # 각 버전 생성 for version_info in strategy_info['versions']: version_obj, version_created = StrategyVersion.objects.get_or_create( strategy=strategy_obj, version=version_info['version'], defaults={ 'implementation_key': f"{strategy_name}:{version_info['version']}", 'parameters': version_info['default_parameters'], 'is_current': True } ) # 파라미터가 변경된 경우 업데이트 if not version_created and version_obj.parameters != version_info['default_parameters']: version_obj.parameters = version_info['default_parameters'] version_obj.save() except Exception as e: # DB가 아직 준비되지 않았거나 마이그레이션 전인 경우 무시 import logging logger = logging.getLogger(__name__) logger.debug(f"전략 초기화 건너뜀: {e}")