""" 전략 레지스트리를 DB에 초기화하는 management command """ from django.core.management.base import BaseCommand from strategies.base import StrategyRegistry from strategies.models import QuantStrategy, StrategyVersion class Command(BaseCommand): help = '레지스트리에 등록된 모든 전략을 데이터베이스에 초기화합니다' def handle(self, *args, **options): self.stdout.write(self.style.MIGRATE_HEADING('전략 초기화 시작...')) # 레지스트리에서 모든 전략 가져오기 available_strategies = StrategyRegistry.list_strategies() created_strategies = 0 updated_strategies = 0 created_versions = 0 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 created: created_strategies += 1 self.stdout.write( self.style.SUCCESS(f' ✓ 전략 생성: {strategy_name}') ) else: # 설명이 변경된 경우 업데이트 if strategy_obj.description != strategy_info['description']: strategy_obj.description = strategy_info['description'] strategy_obj.save() updated_strategies += 1 self.stdout.write( self.style.WARNING(f' ⟳ 전략 업데이트: {strategy_name}') ) # 각 버전 생성 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 version_created: created_versions += 1 self.stdout.write( self.style.SUCCESS(f' → 버전 생성: v{version_info["version"]}') ) else: # 파라미터가 변경된 경우 업데이트 if version_obj.parameters != version_info['default_parameters']: version_obj.parameters = version_info['default_parameters'] version_obj.save() self.stdout.write( self.style.WARNING(f' → 버전 업데이트: v{version_info["version"]}') ) self.stdout.write('') self.stdout.write(self.style.MIGRATE_HEADING('초기화 완료!')) self.stdout.write(self.style.SUCCESS(f' 생성된 전략: {created_strategies}개')) self.stdout.write(self.style.SUCCESS(f' 업데이트된 전략: {updated_strategies}개')) self.stdout.write(self.style.SUCCESS(f' 생성된 버전: {created_versions}개')) self.stdout.write(self.style.SUCCESS(f' 총 전략 수: {len(available_strategies)}개'))