-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
76 lines (63 loc) · 2.25 KB
/
Copy pathmain.py
File metadata and controls
76 lines (63 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
"""
QuantMiroFish - 퀀트 트레이딩 시뮬레이션
다중 AI 애널리스트 기반 SPY ETF 매매 전략 백테스트
파이프라인: 데이터 수집 → 지표 계산 → 3명 애널리스트 분석 → 앙상블 → 백테스트
"""
import time
import data_collector
import data_processor
from analysts import MacroAnalyst, TechnicalAnalyst, SentimentAnalyst
import ensemble
import backtester
import config
def main():
print("=" * 60)
print(" QuantMiroFish - 퀀트 트레이딩 시뮬레이션")
print(" 대상: SPY ETF | 전략: 다중 애널리스트 앙상블")
print("=" * 60)
start_time = time.time()
# 1. 데이터 수집
t0 = time.time()
df = data_collector.get_data(config.TICKER, use_cache=True)
print(f" 소요시간: {time.time()-t0:.1f}초\n")
# 2. 데이터 가공 + 기술적 지표
t0 = time.time()
df = data_processor.add_all_features(df)
print(f" 소요시간: {time.time()-t0:.1f}초\n")
# 3. 애널리스트 초기화
analysts = [
MacroAnalyst(),
TechnicalAnalyst(),
SentimentAnalyst(),
]
print(f"[애널리스트] {len(analysts)}명 초기화 완료")
for a in analysts:
w = config.ANALYST_WEIGHTS.get(a.name, 0)
print(f" - {a.name} (가중치: {w*100:.0f}%)")
print()
# 4. 앙상블 분석
t0 = time.time()
signals_df = ensemble.run_ensemble(df, analysts)
print(f" 소요시간: {time.time()-t0:.1f}초\n")
# 5. 백테스트
t0 = time.time()
result = backtester.run_backtest(df, signals_df)
print(f" 소요시간: {time.time()-t0:.1f}초")
# 6. 결과 출력
backtester.print_summary(result)
print(f"\n총 실행시간: {time.time()-start_time:.1f}초")
# 7. 차트 (선택)
if config.SHOW_CHARTS:
print("\n[차트] matplotlib 차트 표시 중...")
from utils.plotting import (
plot_portfolio_vs_benchmark,
plot_signals_on_price,
plot_drawdown,
plot_analyst_signals,
)
plot_portfolio_vs_benchmark(result["portfolio_values"], df)
plot_signals_on_price(df, signals_df)
plot_drawdown(result["portfolio_values"])
plot_analyst_signals(signals_df)
if __name__ == "__main__":
main()