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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
# Trading Platform — TODO
> Last updated: 2026-04-01
## Current State
- **268 tests passing**, lint clean
- 6 microservices + CLI + shared library
- 8 strategies, REST API, Prometheus/Grafana/Loki, CI/CD, multi-exchange, advanced risk
---
## Critical (기능 오류 — 즉시 수정 필요)
### 1. Strategy Engine 멀티 심볼 버그
- **파일:** `services/strategy-engine/src/strategy_engine/main.py:54-63`
- **문제:** `for symbol in config.symbols:` 안에 `while True` 루프가 있어서 첫 번째 심볼만 처리
- **영향:** BTC/USDT, ETH/USDT, SOL/USDT 설정 시 BTC/USDT만 영원히 처리
- **수정:** `asyncio.create_task()`로 각 심볼 병렬 처리
### 2. Portfolio Snapshot 첫 실행 지연
- **파일:** `services/portfolio-manager/src/portfolio_manager/main.py:48`
- **문제:** `snapshot_loop()`이 `asyncio.sleep()` 먼저 실행 → 첫 스냅샷이 24시간 후
- **수정:** 스냅샷을 먼저 찍고 sleep, 또는 시작 시 즉시 한 번 실행
### 3. .env.example 누락 필드
- **파일:** `.env.example`
- **누락:** `RISK_TRAILING_STOP_PCT`, `RISK_MAX_OPEN_POSITIONS`, `RISK_VOLATILITY_LOOKBACK`, `RISK_VOLATILITY_SCALE`
- **수정:** 4개 필드 추가
### 4. API 서비스 헬스체크 없음
- **파일:** `docker-compose.yml` — api 서비스에 `healthcheck` 블록 없음
- **수정:** curl 기반 healthcheck 추가
### 5. API 엔드포인트 에러 처리 없음
- **파일:** `services/api/src/trading_api/routers/*.py`
- **문제:** DB 연결 실패 시 500 에러 + 스택 트레이스 노출
- **수정:** try/except + HTTPException으로 적절한 에러 응답
### 6. Alembic 하드코딩된 DB 인증정보
- **파일:** `shared/alembic.ini:3`
- **문제:** `postgresql+asyncpg://postgres:postgres@localhost:5432/trading` — docker-compose는 `trading:trading` 사용
- **수정:** `DATABASE_URL` 환경변수 우선 참조 (env.py에서 이미 처리하지만 alembic.ini 기본값 불일치)
---
## High Priority (Production 전)
### 7. Binance WebSocket 전용 문제
- **파일:** `services/data-collector/src/data_collector/binance_ws.py`
- **문제:** `exchange_id` 설정은 있지만 WebSocket은 Binance 하드코딩
- **수정:** 거래소별 WebSocket 추상화 또는 ccxt pro의 watchOHLCV 사용
### 8. Backtester Config 상속 오류
- **파일:** `services/backtester/src/backtester/config.py`
- **문제:** `BacktestConfig(BaseSettings)` — 다른 서비스는 `Settings` 상속
- **수정:** `class BacktestConfig(Settings):`로 변경, 중복 `database_url` 제거
### 9. CI에 Docker 빌드 테스트 없음
- **파일:** `scripts/ci.sh`
- **문제:** pytest + ruff만 실행, Dockerfile 빌드 검증 없음
- **수정:** `docker compose build` 단계 추가
### 10. Health Port 오프셋 문서화
- **파일:** 각 서비스 main.py
- **문제:** `health_port + 0/1/2/3` 하드코딩, 변경 시 혼란
- **수정:** 각 서비스별 `HEALTH_PORT` 환경변수 또는 문서화
---
## Medium Priority (안정화)
### 11. 테스트 미커버 모듈
- CLI 명령어 6개 (backtest, data, portfolio, strategy, trade, service)
- API 라우터 3개 (portfolio, orders, strategies)
- BinanceWebSocket 클래스
- 각 서비스 main.py 실행 루프
### 12. Realized PnL 미추적
- **파일:** `services/portfolio-manager/src/portfolio_manager/main.py:32`
- **문제:** `realized_pnl=Decimal("0")` 하드코딩 — 실현 손익 미계산
- **수정:** 매도 시 실현 PnL 누적 → 스냅샷에 반영
### 13. Test Warning 수정
- **파일:** `shared/tests/test_db.py:315`
- **문제:** `RuntimeWarning: coroutine was never awaited`
- **수정:** `MagicMock()` → `AsyncMock()`
### 14. Order Executor last_id 추적
- **파일:** `services/order-executor/src/order_executor/main.py:92-96`
- **문제:** `last_id`가 실제로 업데이트되지 않음 (항상 "$")
- **영향:** 재시작 시 메시지 유실 가능
- **수정:** Redis consumer group 사용 또는 last_id 추적
---
## Future Ideas (미계획)
- WebSocket 기반 실시간 대시보드
- 백테스트 결과 시각화 (matplotlib/plotly)
- OpenTelemetry 분산 추적
- 멀티 타임프레임 전략
- 머신러닝 시그널 필터
- 주문 유형 확장 (LIMIT, STOP_LIMIT, OCO)
- Kubernetes 배포
- 알림 채널 확장 (Discord, Slack)
- 백테스트 결과 DB 저장 및 비교
---
## Estimated Effort
| 카테고리 | 예상 작업량 |
|----------|------------|
| Critical (1-6) | 2-3시간 |
| High (7-10) | 4-6시간 |
| Medium (11-14) | 1-2주 |
---
## Quick Start
```bash
cp .env.example .env # API 키 입력
pip install -e shared/ # 의존성 설치
make infra # Redis + PostgreSQL 시작
make migrate # DB 마이그레이션
make test # 268 tests 실행
make up # 서비스 시작
make e2e # E2E 테스트
curl localhost:8000/health # API 헬스체크
```
|