Skip to content

Repository files navigation

QuantMiroFish

다중 AI 애널리스트 기반 퀀트 트레이딩 시뮬레이션 시스템. yfinance로 SPY ETF 30년+ 데이터를 수집하고, 3명의 규칙 기반 애널리스트가 독립 분석 후 앙상블로 매매 판단을 내리며, 백테스트로 성과를 검증합니다.

시스템 아키텍처

┌─────────────────────────────────────────────────────────────┐
│                    Vue.js Frontend (:3000)                   │
│  ┌─────────┬──────────┬──────────┬──────────┬─────────────┐ │
│  │ Step 1  │ Step 2   │ Step 3   │ Step 4   │  Step 5     │ │
│  │데이터수집│분석설정  │시뮬레이션│백테스트  │ 리포트      │ │
│  └─────────┴──────────┴──────────┴──────────┴─────────────┘ │
│         TradingView Charts  │  Dashboard  │  History        │
└─────────────────────┬───────────────────────────────────────┘
                      │ /api/* (Proxy)
┌─────────────────────▼───────────────────────────────────────┐
│                  Flask Backend (:5001)                       │
│  ┌──────────┬────────────┬───────────┬──────────────┐       │
│  │ data API │analysis API│backtest AP│ history API   │       │
│  └────┬─────┴─────┬──────┴─────┬─────┴──────┬───────┘       │
│       │           │            │            │               │
│  ┌────▼─────┬─────▼──────┬─────▼──────┬─────▼─────┐        │
│  │  data    │  analysis  │  backtest  │  history  │        │
│  │ service  │  service   │  service   │  service  │        │
│  └────┬─────┴─────┬──────┴─────┬──────┴───────────┘        │
└───────┼───────────┼────────────┼────────────────────────────┘
        │           │            │
┌───────▼───────────▼────────────▼────────────────────────────┐
│                    Core Engine (Python)                      │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │data_collector│  │data_processor│  │  ensemble.py │       │
│  │  (yfinance)  │  │  (ta 지표)   │  │  (가중 결합) │       │
│  └──────────────┘  └──────────────┘  └──────┬───────┘       │
│                                             │               │
│  ┌──────────────┬──────────────┬─────────────┤               │
│  │MacroAnalyst  │TechAnalyst   │SentAnalyst  │               │
│  │(추세/이평선) │(RSI/MACD/BB) │(거래량/모멘텀)│              │
│  │  35%         │  40%         │  25%        │               │
│  └──────────────┴──────────────┴─────────────┘               │
│                                                              │
│  ┌──────────────┐                                            │
│  │ backtester   │ → 수익률, 샤프비율, MDD, 승률              │
│  └──────────────┘                                            │
└──────────────────────────────────────────────────────────────┘

프로젝트 구조

QuantMiroFish/
│
├── main.py                  # CLI 실행 진입점 (UI 없이 콘솔에서 테스트)
├── config.py                # 전체 설정 상수
├── data_collector.py        # yfinance 데이터 수집 + CSV 캐싱
├── data_processor.py        # 기술적 지표 19개 계산 (ta 라이브러리)
├── ensemble.py              # 애널리스트 신호 가중 앙상블
├── backtester.py            # 포트폴리오 시뮬레이션 + 성과 지표
├── requirements.txt         # 코어 엔진 의존성
│
├── analysts/                # AI 애널리스트 모듈
│   ├── base_analyst.py      # 추상 베이스 클래스 + AnalystSignal 타입
│   ├── macro_analyst.py     # 거시경제: SMA 크로스, 이격도, ATR 변동성
│   ├── technical_analyst.py # 기술적: RSI 과매수/과매도, MACD 크로스, 볼린저밴드
│   └── sentiment_analyst.py # 시장심리: 거래량 비율, OBV 추세, ROC, 스토캐스틱
│
├── backend/                 # Flask 백엔드 (Web UI용)
│   ├── run.py               # 서버 진입점
│   ├── requirements.txt
│   └── app/
│       ├── __init__.py      # App factory
│       ├── config.py        # Flask 설정
│       ├── api/             # REST API (4개 Blueprint)
│       │   ├── data.py      # /api/data/* - 데이터 수집
│       │   ├── analysis.py  # /api/analysis/* - 앙상블 분석
│       │   ├── backtest.py  # /api/backtest/* - 백테스트
│       │   └── history.py   # /api/history/* - 히스토리 CRUD
│       ├── models/
│       │   ├── task.py      # TaskManager (비동기 작업 추적)
│       │   └── session.py   # 세션별 DataFrame 인메모리 관리
│       ├── services/        # 코어 엔진 래핑 서비스
│       │   ├── data_service.py
│       │   ├── analysis_service.py
│       │   ├── backtest_service.py
│       │   └── history_service.py
│       └── utils/
│           ├── serializers.py  # DataFrame → JSON 변환
│           └── logger.py
│
├── frontend/                # Vue.js 프론트엔드
│   ├── package.json
│   ├── vite.config.js       # /api/* → localhost:5001 프록시
│   └── src/
│       ├── App.vue
│       ├── main.js
│       ├── router/index.js
│       ├── api/             # Axios API 클라이언트
│       │   ├── index.js     # 공통 인스턴스 + 폴링 헬퍼
│       │   ├── data.js
│       │   ├── analysis.js
│       │   ├── backtest.js
│       │   └── history.js
│       ├── views/
│       │   ├── Home.vue     # 랜딩 + 히스토리 목록
│       │   └── MainView.vue # 5단계 워크플로우 컨테이너
│       └── components/
│           ├── StepIndicator.vue
│           ├── Step1DataCollection.vue
│           ├── Step2AnalysisConfig.vue
│           ├── Step3SimulationRun.vue
│           ├── Step4BacktestResults.vue
│           ├── Step5AnalysisReport.vue
│           ├── charts/      # TradingView lightweight-charts
│           │   ├── PriceChart.vue       # 캔들스틱 + SMA
│           │   ├── PortfolioChart.vue   # 전략 vs 벤치마크
│           │   ├── DrawdownChart.vue
│           │   └── SignalChart.vue      # 애널리스트별 신호
│           ├── dashboard/
│           │   ├── MetricsGrid.vue      # 8개 KPI 카드
│           │   ├── TradeTable.vue       # 거래내역 페이지네이션
│           │   └── SignalDistribution.vue
│           └── common/
│               ├── LoadingSpinner.vue
│               └── ProgressBar.vue
│
└── .gitignore

기술 스택

구분 기술
데이터 yfinance (무료, API 키 불필요)
지표 계산 ta (순수 Python, TA-Lib 대체)
백엔드 Flask + Flask-CORS
프론트엔드 Vue 3 + Vite + Vue Router + Axios
차트 lightweight-charts (TradingView 오픈소스)
통신 2초 간격 폴링 (비동기 작업 추적)

설치 및 실행

사전 요구사항

  • Python 3.11+
  • Node.js 18+

방법 1: CLI 모드 (UI 없이 콘솔 테스트)

cd QuantMiroFish
pip install -r requirements.txt
python main.py

콘솔에 백테스트 결과 + matplotlib 차트 4개가 출력됩니다.

방법 2: Web UI 모드

# 터미널 1: 백엔드 (포트 5001)
cd QuantMiroFish/backend
pip install -r requirements.txt
python run.py

# 터미널 2: 프론트엔드 (포트 3000)
cd QuantMiroFish/frontend
npm install
npm run dev

브라우저에서 http://localhost:3000 접속

워크플로우 (5단계)

Step 1. 데이터 수집

  • 티커 선택 (기본: SPY), 기간 설정 (전체/10년/5년/1년)
  • yfinance에서 OHLCV 데이터 다운로드
  • 기술적 지표 19개 자동 계산 (SMA, EMA, RSI, MACD, BB, ATR, 스토캐스틱, ROC, OBV 등)
  • 캔들스틱 차트 + SMA 50/200 오버레이로 데이터 확인

Step 2. 분석 설정

  • 3명 애널리스트 가중치 슬라이더 조정 (기본: 거시 35%, 기술 40%, 심리 25%)
  • RSI 과매수/과매도 임계값, 시그널 임계값 설정
  • 초기 자본, 수수료율 설정

Step 3. 시뮬레이션 실행

  • 전체 기간에 대해 매일 3명의 애널리스트가 독립 분석 수행
  • 실시간 진행률 표시 (2초 폴링)
  • 각 애널리스트의 라이브 신호/신뢰도 카드 표시
  • 분석 완료 후 자동으로 백테스트 실행

Step 4. 백테스트 결과

  • 8개 KPI 카드: 총 수익률, 연간수익률, 샤프비율, MDD, 거래 횟수, 승률, 수익/손실 비율, Alpha
  • 포트폴리오 차트: 전략 수익 vs Buy & Hold 비교
  • 드로다운 차트: 최대 낙폭 시각화
  • 거래내역 테이블: 전체 매매 기록 (페이지네이션)

Step 5. 분석 리포트

  • 애널리스트별 신호 시계열 차트
  • BUY/SELL/HOLD 시그널 분포
  • 애널리스트별 평균 신호, 평균 신뢰도 요약
  • 히스토리 저장 기능 (과거 시뮬레이션 비교 가능)

결과 확인 포인트

지표 의미 기준
총 수익률 전략의 전체 수익 양수면 수익
연간 수익률 연평균 수익률 시장 평균(~10%) 대비 비교
샤프 비율 위험 대비 수익 1.0 이상이면 양호
최대 낙폭 (MDD) 최대 손실 구간 작을수록 좋음 (-20% 이내 양호)
승률 수익 거래 비율 50% 이상이면 양호
수익/손실 비율 총 이익 / 총 손실 1.0 이상이면 수익 우위
Alpha Buy & Hold 대비 초과 수익 양수면 시장 대비 우수

애널리스트 상세

거시경제 애널리스트 (MacroAnalyst)

  • SMA 50/200 골든/데드 크로스 체제 판단
  • 가격 vs SMA 200 이격도로 과열/과매도 감지
  • ATR 기반 변동성 필터로 신뢰도 조절

기술적 분석 애널리스트 (TechnicalAnalyst)

  • RSI 30/70 과매도/과매수 시그널
  • MACD 히스토그램 크로스오버 감지
  • 볼린저밴드 %B로 밴드 돌파/스퀴즈 판단

시장심리 애널리스트 (SentimentAnalyst)

  • 거래량 비율 (현재 vs 20일 평균)로 세력 확인
  • OBV 20일 기울기로 매집/분산 추세 판단
  • ROC 모멘텀 + 스토캐스틱 %K/%D 크로스

파라미터 튜닝 가이드

config.py에서 조정 가능한 주요 값들:

# 거래 빈도 조절
SIGNAL_THRESHOLD = 0.2    # 낮추면 거래 빈번, 높이면 보수적

# 애널리스트 비중
ANALYST_WEIGHTS = {
    "macro": 0.35,        # 추세 추종 강화 시 증가
    "technical": 0.40,    # 단기 시그널 강화 시 증가
    "sentiment": 0.25,    # 거래량 확인 강화 시 증가
}

# 지표 민감도
RSI_OVERBOUGHT = 70       # 65로 낮추면 매도 민감도 증가
RSI_OVERSOLD = 30         # 35로 높이면 매수 민감도 증가

# 비용
COMMISSION_PCT = 0.001    # 수수료율 (0.1%)
INITIAL_CAPITAL = 100_000 # 초기 자본금

제한사항

  • 이 시스템은 교육/시뮬레이션 목적이며 실제 투자 조언이 아닙니다
  • 과거 성과가 미래 수익을 보장하지 않습니다
  • Long-only 전략 (공매도 미지원)
  • 슬리피지, 시장 충격 등 실제 거래 비용은 미반영
  • yfinance 데이터는 조정 종가 기준이며 실시간 데이터가 아닙니다

About

Quant trading simulation benchmarked against MiroFish

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages