summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-02 10:34:10 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-02 10:34:10 +0900
commite2344bc310817db763f697df3fb2a9be987ce6b0 (patch)
tree0dc100214a12f77357a3fc68d2fb1acbd485cb7f /docs
parent3618aecc4cfe06cb07abf73670385e8f97606468 (diff)
docs: rewrite TODO for US stock platform (remove all crypto references)
Diffstat (limited to 'docs')
-rw-r--r--docs/TODO.md296
1 files changed, 121 insertions, 175 deletions
diff --git a/docs/TODO.md b/docs/TODO.md
index d737b0f..fd4f7eb 100644
--- a/docs/TODO.md
+++ b/docs/TODO.md
@@ -1,201 +1,147 @@
-# Trading Platform — TODO
+# US Stock Trading Platform — TODO
-> Last updated: 2026-04-01
+> Last updated: 2026-04-02
## Current State
-- **298 tests**, lint clean, production-ready 인프라
-- 8 strategies, 6 services, full monitoring/CI/CD stack
-- **트레이딩 전략 업그레이드 필요** — 아래 상세
+- **375 tests**, lint clean
+- **US 주식 전용** (Alpaca API, 수수료 0%)
+- 6 microservices + CLI + shared library
+- MOC (Market on Close) 전략 + 기술적 전략 7개
+- Prometheus/Grafana/Loki 모니터링, CI/CD, Telegram 알림
+- Claude 기반 종목 스크리너
---
-## Trading Strategy Upgrade Plan
-
-### Phase 1: 백테스터 현실화 (최우선)
-
-현재 백테스트 결과는 슬리피지/수수료 미포함으로 **실제 수익과 큰 차이**가 있음. 이것부터 수정해야 전략 개선의 효과를 정확히 측정 가능.
-
-#### 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` 추가
-
-#### 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 (진입 후 최저점) 계산
+## Architecture
----
+```
+Alpaca API → data-collector (REST polling)
+ → Redis Streams → strategy-engine (MOC + 기술전략)
+ → signals → order-executor (Alpaca 주문)
+ → orders → portfolio-manager (포지션 추적)
-### 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
+Claude API → stock_screener.py (종목 분석/추천)
+FastAPI → REST API (/api/v1/portfolio, orders, strategies)
+```
----
+## 핵심 매매 전략: MOC (Market on Close)
-### 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 기반 동적 가중치 조정)
-- [ ] 포트폴리오 집중도 제한
+```
+[매일 ET 15:50] Claude 종목 분석 → 매수 종목 선정
+[ET 15:50~16:00] 장 마감 직전 매수 (MOC 주문)
+[다음날 ET 9:35~10:00] 시가 매도
+
+조건: 양봉 + 볼륨 > 평균 + RSI 30~60 + EMA 위 + 모멘텀 양호
+손절: -2%, 포지션당 자본금 20%, 최대 5종목
+```
---
-### Phase 4: 리스크 관리 고도화
+## Remaining Work
+
+### 즉시 해야 할 것
-#### 4-1. 포트폴리오 레벨 리스크
-- [ ] 전체 노출도 제한 (총 포지션 가치 / 잔고 비율)
-- [ ] 포지션 간 상관관계 계산 → 실효 리스크 산출
-- [ ] VaR (Value at Risk) 계산 — 95% 신뢰 구간
+#### 1. MOC 백테스트 스크립트
+- [ ] `scripts/backtest_moc.py` — 합성 데이터로 MOC 전략 파라미터 최적화
+- [ ] 5개 주식 (AAPL, MSFT, TSLA, NVDA, AMZN) 대상 90일 백테스트
+- [ ] RSI 범위, 손절률, EMA period 그리드 서치
+- [ ] Makefile target: `make backtest-moc`
-#### 4-2. 동적 포지션 축소
-- [ ] Drawdown이 일정 수준 넘으면 포지션 크기 자동 축소
-- [ ] 연속 손실 N회 시 거래 일시 중단 → Telegram 알림
-- [ ] 시간대별 리스크 조정 (주말, 공휴일 축소)
+#### 2. 실제 데이터 백테스트
+- [ ] Alpaca API로 과거 데이터 다운로드 → DB 저장
+- [ ] 실제 데이터 기반 MOC 전략 검증
+- [ ] Walk-forward analysis로 과적합 확인
-#### 4-3. 시나리오 분석
-- [ ] 과거 극단 이벤트 (FTX 사태, Luna 등)에 대한 포트폴리오 영향 시뮬레이션
-- [ ] 유동성 리스크 체크 (주문 크기 vs 호가창 깊이)
+#### 3. Paper Trading 배포
+- [ ] `.env` 설정 (ALPACA_PAPER=true)
+- [ ] `make up` → 전 서비스 실행
+- [ ] 2-4주 모의 매매 → 실제 성과 확인
+- [ ] Telegram 알림으로 매일 결과 수신
---
-## Priority & Effort
+### 개선 사항
-| Phase | 내용 | 예상 작업량 | 영향 |
-|-------|------|------------|------|
-| **Phase 1** | 백테스터 현실화 | 1-2일 | **최대** — 이것 없이는 전략 평가 불가 |
-| **Phase 2** | 전략 공통 인프라 | 1-2일 | **높음** — 모든 전략의 기반 |
-| **Phase 3** | 개별 전략 고도화 | 3-5일 | 중간 — 수익률 직접 개선 |
-| **Phase 4** | 리스크 관리 고도화 | 2-3일 | 높음 — 손실 방지 |
+#### 4. Claude 스크리너 고도화
+- [ ] SEC 공시 분석 (10-K, 10-Q, 8-K)
+- [ ] 실적 서프라이즈 감지 (EPS beat/miss)
+- [ ] 섹터 로테이션 분석
+- [ ] 뉴스 감성 분석 (Yahoo Finance, MarketWatch)
-**권장 순서: Phase 1 → Phase 2 → Phase 4 → Phase 3**
-(전략 개선보다 리스크 관리가 더 중요 — 돈을 벌기 전에 잃지 않는 게 먼저)
+#### 5. 주문 유형 확장
+- [ ] Limit order 지원
+- [ ] 프리마켓/애프터마켓 주문
+- [ ] 분할 매수/매도
+
+#### 6. 추가 전략
+- [ ] ORB (Opening Range Breakout) — 장 시작 30분 전략
+- [ ] Gap & Go — 갭 상승 종목 추격 전략
+- [ ] Earnings Play — 실적 발표 전후 전략
+
+#### 7. 리스크 관리 개선
+- [ ] 섹터 집중도 제한 (같은 섹터 3개 이상 금지)
+- [ ] 실적 발표일 매매 회피
+- [ ] 시장 전체 하락 시 매매 중단 (SPY RSI 기반)
---
-## Previously Completed (Infrastructure)
+## Quick Start
+
+```bash
+# 1. 환경 설정
+cp .env.example .env
+# ALPACA_API_KEY, ALPACA_API_SECRET 입력
+# ANTHROPIC_API_KEY 입력 (Claude 스크리너용)
+
+# 2. 의존성 설치
+pip install -e shared/
+
+# 3. 인프라 실행
+make infra # Redis + PostgreSQL
+make migrate # DB 마이그레이션
+
+# 4. 테스트
+make test # 375 tests
+
+# 5. 종목 스크리닝
+make screen # Claude가 33개 종목 분석 → Top 5 추천
+
+# 6. 서비스 실행
+make up # 전 서비스 시작 (paper trading)
+
+# 7. 모니터링
+docker compose --profile monitoring up -d
+# Grafana: http://localhost:3000
+# API: http://localhost:8000/api/v1/strategies
+
+# 8. CLI
+trading strategy list
+trading backtest run --strategy moc --symbol AAPL --timeframe 1Day
+trading portfolio show
+```
+
+---
-모든 인프라 항목 완료 (27개): SQLAlchemy, Alembic, structlog, Telegram, Prometheus/Grafana/Loki, CI/CD, FastAPI, multi-exchange, Redis consumer groups, realized PnL, bearer auth, 298 tests.
+## Completed (Infrastructure)
+
+- [x] Alpaca API 클라이언트 (paper + live)
+- [x] MOC 전략 (종가 매수 / 시가 매도)
+- [x] Claude 종목 스크리너 (33개 유니버스)
+- [x] Data collector (Alpaca REST polling)
+- [x] Order executor (Alpaca submit_order)
+- [x] SQLAlchemy ORM + Alembic 마이그레이션
+- [x] structlog 구조화 로깅
+- [x] Telegram 알림
+- [x] Retry + Circuit Breaker
+- [x] Prometheus + Grafana + Loki
+- [x] Redis consumer groups
+- [x] Portfolio snapshots + realized PnL
+- [x] Bearer token auth
+- [x] CI/CD (Gitea Actions)
+- [x] E2E test script
+- [x] FastAPI REST API
+- [x] 백테스터 (슬리피지, 수수료, SL/TP, 공매도, walk-forward)
+- [x] 기술 지표 라이브러리 (ATR, ADX, RSI, MACD, Bollinger, Stochastic, OBV)
+- [x] 포트폴리오 VaR, 상관관계, drawdown 기반 리스크
+- [x] 375 tests, lint clean