diff options
| author | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2026-04-01 18:18:38 +0900 |
|---|---|---|
| committer | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2026-04-01 18:18:38 +0900 |
| commit | 66d0b86af0630e5ae9cf9071420db214410e1780 (patch) | |
| tree | d59399e12ce91b7607650e9914f553d3a884a570 | |
| parent | 37c9cb4879fff1fa8b26f54f9450aee5a6e1c9fb (diff) | |
docs: trading strategy upgrade plan (4 phases)
Phase 1: Backtester realism (slippage, fees, stops, shorts, walk-forward)
Phase 2: Strategy infrastructure (ATR stops, ADX regime filter, volume
confirmation, conviction scoring, indicator library)
Phase 3: Individual strategy upgrades (divergence, filters, adaptive params)
Phase 4: Advanced risk management (portfolio VaR, dynamic sizing, scenarios)
| -rw-r--r-- | docs/TODO.md | 236 |
1 files changed, 185 insertions, 51 deletions
diff --git a/docs/TODO.md b/docs/TODO.md index 04f7a0c..d737b0f 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -4,64 +4,198 @@ ## Current State -- **298 tests**, lint clean, 0 TODO/FIXME in codebase -- **134 Python files**, 54 commits -- **Production-ready** — 모든 known issues 해결 완료 - -### 구현 완료 목록 - -| 카테고리 | 내용 | -|----------|------| -| **서비스 (6)** | data-collector, strategy-engine, order-executor, portfolio-manager, backtester, api (FastAPI) | -| **전략 (8)** | RSI, Grid, MACD, Bollinger Bands, EMA Crossover, VWAP, Volume Profile, Combined | -| **DB** | SQLAlchemy 2.0 async, Alembic 마이그레이션, transaction rollback | -| **메시징** | Redis Streams + consumer groups (pending recovery) | -| **모니터링** | Prometheus, Grafana (provisioned dashboard), Loki + Promtail | -| **알림** | Telegram (시그널, 주문, 에러, 일일 요약) | -| **리스크** | 포지션 한도, 일일 손실 한도, trailing stop, volatility sizing, max open positions | -| **보안** | Bearer token auth on /health /metrics | -| **CI/CD** | Gitea Actions, scripts/ci.sh, scripts/e2e-test.sh | -| **CLI** | backtest, strategy, portfolio, data, trade, service | -| **테스트** | unit (238), integration (7), edge cases (30), validation (41), API (8) | +- **298 tests**, lint clean, production-ready 인프라 +- 8 strategies, 6 services, full monitoring/CI/CD stack +- **트레이딩 전략 업그레이드 필요** — 아래 상세 --- -## Remaining — Future Enhancement Ideas +## Trading Strategy Upgrade Plan -아래는 현재 기능 완성 상태에서 추가로 개선할 수 있는 항목들입니다. 필수가 아닌 선택 사항이며, 필요에 따라 진행하면 됩니다. +### Phase 1: 백테스터 현실화 (최우선) -### 사용자 경험 -- [ ] **README.md** — 프로젝트 소개, 아키텍처 다이어그램, 설치/실행 가이드 -- [ ] **WebSocket 실시간 대시보드** — 포지션, PnL, 시그널을 실시간 웹으로 확인 -- [ ] **백테스트 시각화** — matplotlib/plotly로 수익 곡선, drawdown 차트, 진입/청산 포인트 표시 -- [ ] **알림 채널 확장** — Discord, Slack webhook 지원 +현재 백테스트 결과는 슬리피지/수수료 미포함으로 **실제 수익과 큰 차이**가 있음. 이것부터 수정해야 전략 개선의 효과를 정확히 측정 가능. -### 트레이딩 기능 -- [ ] **주문 유형 확장** — LIMIT, STOP_LIMIT, OCO (One-Cancels-the-Other) -- [ ] **멀티 타임프레임 전략** — 1h 추세 + 5m 진입 등 복합 타임프레임 -- [ ] **머신러닝 시그널 필터** — 전략 시그널을 ML 모델로 필터링 -- [ ] **백테스트 결과 DB 저장** — 백테스트 실행/결과를 DB에 저장하고 비교 -- [ ] **DCA (Dollar Cost Averaging) 전략** — 정기적/조건부 분할 매수 +#### 1-1. 슬리피지 + 수수료 모델링 +- **파일:** `backtester/simulator.py` +- **현재:** 시그널 가격 그대로 체결, 수수료 0 +- **수정:** 매수 시 `price * (1 + slippage_pct)`, 매도 시 `price * (1 - slippage_pct)` +- 수수료: `cost = price * quantity * fee_pct` (maker: 0.05%, taker: 0.1%) +- 슬리피지를 주문 크기에 비례하게 (대형 주문 → 더 큰 슬리피지) +- **설정:** `BacktestConfig`에 `slippage_pct`, `maker_fee_pct`, `taker_fee_pct` 추가 -### 인프라 -- [ ] **Kubernetes 배포** — Helm chart + HPA autoscaling -- [ ] **OpenTelemetry 분산 추적** — 서비스 간 request tracing -- [ ] **비 Binance 거래소 WebSocket** — ccxt pro 또는 거래소별 WS 구현 -- [ ] **DB 파티셔닝** — candles 테이블 시계열 파티셔닝 (대용량 데이터) -- [ ] **Secrets Manager** — API 키를 환경변수 대신 Vault/SOPS로 관리 +#### 1-2. 손절/익절 자동 실행 +- **파일:** `backtester/simulator.py` +- **현재:** 시그널로만 매매, 스탑 없음 +- **수정:** 각 포지션에 stop_loss, take_profit 가격 추적 +- 매 캔들마다 `high >= take_profit` 또는 `low <= stop_loss` 체크 → 자동 청산 +- `engine.py`에서 캔들 처리 시 시뮬레이터에 현재 가격 전달 + +#### 1-3. 공매도 지원 +- **파일:** `backtester/simulator.py` +- **현재:** 매도는 보유 수량 내에서만 가능 +- **수정:** `allow_short: bool` 설정, 공매도 시 음수 포지션 허용 +- 공매도 수수료 (borrow fee) 추가 + +#### 1-4. Walk-Forward Analysis +- **파일:** `backtester/engine.py` (신규 클래스) +- **현재:** 전체 데이터로 백테스트 → 과적합 위험 +- **수정:** `WalkForwardEngine` 클래스 + - 데이터를 N개 구간으로 분할 + - 각 구간: in-sample (파라미터 최적화) → out-of-sample (검증) + - 최종 결과는 out-of-sample 구간만 합산 +- 파라미터 최적화: grid search 또는 random search + +#### 1-5. 메트릭 정확도 개선 +- **파일:** `backtester/metrics.py` +- Sharpe/Sortino를 per-trade가 아닌 **일별 수익률 기반**으로 계산 +- Risk-free rate 설정 추가 (기본 5%) +- Recovery Factor (총수익 / 최대 drawdown) 추가 +- 최대 연속 손실 횟수 추가 +- 인트라 트레이드 drawdown (진입 후 최저점) 계산 + +--- + +### Phase 2: 전략 공통 인프라 + +모든 전략에 적용할 공통 기능. 개별 전략 개선 전에 인프라를 먼저 구축. + +#### 2-1. ATR 기반 동적 손절/익절 +- **파일:** `strategies/base.py` + 각 전략 +- **현재:** 어떤 전략도 손절/익절을 설정하지 않음 +- **수정:** `BaseStrategy`에 `calculate_stop_loss(candle, atr)` 메서드 추가 +- ATR (Average True Range) 유틸리티 함수 (`shared/` 또는 `strategies/indicators/`) +- 손절: entry - ATR * multiplier, 익절: entry + ATR * reward_ratio +- Signal에 `stop_loss`, `take_profit` 필드 추가 (`shared/models.py`) + +#### 2-2. 추세/횡보 레짐 필터 (ADX) +- **파일:** `strategies/indicators/adx.py` (신규) +- ADX (Average Directional Index) 계산 유틸리티 +- ADX > 25 = 추세장, ADX < 20 = 횡보장 +- 각 전략이 레짐에 따라 동작 변경: + - 추세 추종 전략 (MACD, EMA): ADX < 20이면 시그널 무시 + - 평균 회귀 전략 (RSI, Bollinger, Grid): ADX > 30이면 시그널 무시 + +#### 2-3. 볼륨 확인 필터 +- **파일:** 각 전략 +- **현재:** 모든 전략이 볼륨을 무시 (RSI, MACD, EMA 등) +- **수정:** 시그널 발생 시 해당 캔들의 볼륨이 최근 N개 평균 대비 일정 비율 이상인지 확인 +- 볼륨 < 평균의 50%면 시그널 무시 (유동성 부족) +- 볼륨 > 평균의 200%면 시그널 가중치 증가 + +#### 2-4. 시그널 강도 (Conviction Score) +- **파일:** `shared/models.py` Signal + 각 전략 +- **현재:** 시그널은 BUY/SELL/quantity만 있음 +- **수정:** Signal에 `conviction: float` (0.0~1.0) 필드 추가 + - RSI 5 → conviction 0.9, RSI 28 → conviction 0.3 + - MACD 히스토그램이 0에서 먼 크로스 → 높은 conviction +- Combined 전략에서 conviction 기반 가중치 사용 +- RiskManager에서 conviction 기반 포지션 사이징 + +#### 2-5. 지표 라이브러리 +- **디렉토리:** `strategies/indicators/` (신규) +- 재사용 가능한 기술 지표 함수: + - `atr(highs, lows, closes, period)` — Average True Range + - `adx(highs, lows, closes, period)` — Average Directional Index + - `ema(series, period)` — Exponential Moving Average + - `sma(series, period)` — Simple Moving Average + - `rsi(closes, period)` — RSI + - `bollinger_bands(closes, period, num_std)` — Bollinger + - `macd(closes, fast, slow, signal)` — MACD + - `volume_sma(volumes, period)` — Volume SMA +- 각 전략에서 직접 계산하지 않고 공통 라이브러리 사용 +- 테스트: 각 지표에 대한 unit test + +--- + +### Phase 3: 개별 전략 고도화 + +Phase 1-2 완료 후 각 전략을 전문가 수준으로 업그레이드. + +#### 3-1. RSI 전략 개선 +- [ ] RSI 다이버전스 감지 (가격 신고가 + RSI 하락 = 약세 다이버전스) +- [ ] ADX 레짐 필터 적용 (추세장에서는 RSI 매수 신호 무시) +- [ ] RSI 강도별 conviction score (RSI 5 vs RSI 28) +- [ ] ATR 기반 손절/익절 +- [ ] 볼륨 확인 필터 + +#### 3-2. MACD 전략 개선 +- [ ] 히스토그램 크로스오버 + MACD 제로라인 크로스오버 구분 +- [ ] MACD 다이버전스 감지 +- [ ] ADX 추세 확인 (ADX < 20이면 시그널 무시) +- [ ] 제로라인으로부터 거리 기반 시그널 강도 +- [ ] ATR 기반 손절 + +#### 3-3. Grid 전략 개선 +- [ ] ADX 기반 레짐 필터 (추세장 진입 차단) +- [ ] 동적 그리드 재설정 (실현 변동성 기반 범위 조정) +- [ ] 그리드 외 이탈 시 전 포지션 청산 + 알림 +- [ ] 볼륨 프로파일 기반 비균등 그리드 간격 + +#### 3-4. Bollinger Bands 전략 개선 +- [ ] 스퀴즈 감지 (밴드 압축 → 브레이크아웃 대비) +- [ ] %B 지표 활용 (밴드 내 위치 0~1) +- [ ] RSI 확인 (하단 밴드 터치 + RSI < 30 = 강한 매수) +- [ ] 볼륨 스파이크 확인 + +#### 3-5. EMA Crossover 전략 개선 +- [ ] ADX > 25 필터 (강한 추세만 진입) +- [ ] 풀백 진입 (크로스 후 단기 EMA로 되돌림 시 진입) +- [ ] 50 SMA 위/아래 필터 (장기 추세 방향 확인) +- [ ] 볼륨 확인 + +#### 3-6. VWAP 전략 개선 +- [ ] 일중 리셋 (매일 00:00 UTC에 VWAP 재계산) +- [ ] VWAP 표준편차 밴드 추가 (1σ, 2σ) +- [ ] ATR 기반 deviation threshold (고정값 대신 변동성 적응형) +- [ ] 세션 필터 (저유동성 시간대 진입 차단) + +#### 3-7. Volume Profile 전략 개선 +- [ ] HVN/LVN (고/저볼륨 노드) 식별 +- [ ] 세션 기반 프로파일 리셋 +- [ ] POC를 동적 지지/저항선으로 활용 +- [ ] 볼륨 델타 (매수량 - 매도량) 추적 + +#### 3-8. Combined 전략 개선 +- [ ] Sub-strategy conviction score 반영 +- [ ] Sub-strategy 간 상관관계 행렬 계산 → 중복 시그널 감쇄 +- [ ] 적응형 가중치 (최근 win rate 기반 동적 가중치 조정) +- [ ] 포트폴리오 집중도 제한 + +--- + +### Phase 4: 리스크 관리 고도화 + +#### 4-1. 포트폴리오 레벨 리스크 +- [ ] 전체 노출도 제한 (총 포지션 가치 / 잔고 비율) +- [ ] 포지션 간 상관관계 계산 → 실효 리스크 산출 +- [ ] VaR (Value at Risk) 계산 — 95% 신뢰 구간 + +#### 4-2. 동적 포지션 축소 +- [ ] Drawdown이 일정 수준 넘으면 포지션 크기 자동 축소 +- [ ] 연속 손실 N회 시 거래 일시 중단 → Telegram 알림 +- [ ] 시간대별 리스크 조정 (주말, 공휴일 축소) + +#### 4-3. 시나리오 분석 +- [ ] 과거 극단 이벤트 (FTX 사태, Luna 등)에 대한 포트폴리오 영향 시뮬레이션 +- [ ] 유동성 리스크 체크 (주문 크기 vs 호가창 깊이) --- -## Quick Start - -```bash -cp .env.example .env # API 키 입력 -pip install -e shared/ # 의존성 -make infra # Redis + PostgreSQL -make migrate # DB 마이그레이션 -make test # 298 tests -make up # 서비스 시작 -make e2e # E2E 테스트 -curl localhost:8000/health # API 확인 -curl localhost:8000/api/v1/strategies # 전략 목록 -``` +## Priority & Effort + +| Phase | 내용 | 예상 작업량 | 영향 | +|-------|------|------------|------| +| **Phase 1** | 백테스터 현실화 | 1-2일 | **최대** — 이것 없이는 전략 평가 불가 | +| **Phase 2** | 전략 공통 인프라 | 1-2일 | **높음** — 모든 전략의 기반 | +| **Phase 3** | 개별 전략 고도화 | 3-5일 | 중간 — 수익률 직접 개선 | +| **Phase 4** | 리스크 관리 고도화 | 2-3일 | 높음 — 손실 방지 | + +**권장 순서: Phase 1 → Phase 2 → Phase 4 → Phase 3** +(전략 개선보다 리스크 관리가 더 중요 — 돈을 벌기 전에 잃지 않는 게 먼저) + +--- + +## Previously Completed (Infrastructure) + +모든 인프라 항목 완료 (27개): SQLAlchemy, Alembic, structlog, Telegram, Prometheus/Grafana/Loki, CI/CD, FastAPI, multi-exchange, Redis consumer groups, realized PnL, bearer auth, 298 tests. |
