feat: 프로젝트 기본 구조 구축
This commit is contained in:
@@ -4,3 +4,56 @@ 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}")
|
||||
|
||||
Reference in New Issue
Block a user