Files
executor/list_strategies.py

99 lines
3.3 KiB
Python
Executable File

#!/usr/bin/env python
"""전략 목록 및 구조 확인 스크립트"""
import os
from strategies.base import StrategyRegistry
from strategies import implementations
def main():
print("=" * 80)
print("전략 모듈 구조")
print("=" * 80)
print()
# 모듈 구조 출력
print("📁 strategies/impls/")
print("├── __init__.py")
print("├── trend_following.py # 추세 추종 전략")
print("├── mean_reversion.py # 평균 회귀 전략")
print("├── volatility_breakout.py # 변동성 돌파 전략")
print("└── asset_allocation.py # 자산 배분 전략")
print()
print()
# 레지스트리에 등록된 전략 목록
print("=" * 80)
print("등록된 전략 목록")
print("=" * 80)
print()
available_strategies = StrategyRegistry.list_strategies()
# 카테고리별로 그룹화
categories = {
"추세 추종 (Trend Following)": ["MovingAverageCrossover"],
"평균 회귀 (Mean Reversion)": ["RSIMeanReversion"],
"변동성 돌파 (Volatility Breakout)": ["BollingerBandBreakout"],
"자산 배분 (Asset Allocation)": ["BoldAssetAllocation"],
}
for category, strategy_names in categories.items():
print(f"📊 {category}")
print("-" * 80)
for strategy_name in strategy_names:
if strategy_name in available_strategies:
strategy_info = available_strategies[strategy_name]
print(f"\n{strategy_name}")
print(f" 설명: {strategy_info['description']}")
for version_info in strategy_info['versions']:
print(f" 버전: {version_info['version']}")
print(f" 파라미터:")
for param, value in version_info['default_parameters'].items():
if isinstance(value, (int, float)):
print(f" - {param}: {value}")
elif isinstance(value, bool):
print(f" - {param}: {value}")
elif isinstance(value, str) and value:
print(f" - {param}: '{value}'")
elif value is None:
print(f" - {param}: null")
print()
# 통계
print("=" * 80)
print("통계")
print("=" * 80)
total = len(available_strategies)
print(f"총 전략 수: {total}")
print(f"카테고리 수: {len(categories)}")
print()
# 파일 크기 확인
print("=" * 80)
print("모듈 파일 크기")
print("=" * 80)
impls_dir = os.path.join(os.path.dirname(__file__), "strategies", "impls")
files = {
"trend_following.py": "추세 추종",
"mean_reversion.py": "평균 회귀",
"volatility_breakout.py": "변동성 돌파",
"asset_allocation.py": "자산 배분"
}
for filename, description in files.items():
filepath = os.path.join(impls_dir, filename)
if os.path.exists(filepath):
size = os.path.getsize(filepath)
lines = sum(1 for _ in open(filepath, 'r', encoding='utf-8'))
print(f"{filename:25s} ({description:12s}): {size:6,d} bytes, {lines:4d} lines")
print()
if __name__ == "__main__":
main()