feat: 프로젝트 기본 구조 구축
This commit is contained in:
0
strategies/management/__init__.py
Normal file
0
strategies/management/__init__.py
Normal file
0
strategies/management/commands/__init__.py
Normal file
0
strategies/management/commands/__init__.py
Normal file
78
strategies/management/commands/init_strategies.py
Normal file
78
strategies/management/commands/init_strategies.py
Normal file
@@ -0,0 +1,78 @@
|
||||
"""
|
||||
전략 레지스트리를 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)}개'))
|
||||
Reference in New Issue
Block a user