68 lines
2.6 KiB
Markdown
68 lines
2.6 KiB
Markdown
# 하이브리드 자동매매 멀티스레드 아키텍처
|
|
|
|
업비트 20여 종목·가변 분봉·실시간 손절/익절을 위한 **이벤트 기반 비동기 파이프라인** 설계 및 구현 요약.
|
|
|
|
## 1. 시스템 레이어
|
|
|
|
| 레이어 | 구현 클래스 | 역할 |
|
|
|--------|-------------|------|
|
|
| **Ingestion** | `UpbitWebSocketClient` | WS 수신·파싱만 수행 → `TradeEventQueue.offer()` |
|
|
| **Event Buffer** | `TradeEventQueue` | `LinkedBlockingQueue` (기본 65536) |
|
|
| **Core Engine** | `CoreEngineWorkerPool` + `MarketTickProcessor` | 고정 워커 풀(기본 6) → 캔들·SL/TP |
|
|
| **Execution** | `OrderExecutionQueue` | 단일 쓰레드 + Guava `RateLimiter` (기본 5/s) |
|
|
|
|
## 2. 가변 분봉
|
|
|
|
- `BarBuilder`: 체결 틱 → 1m 조립 → 3m/5m/15m/30m/1h/4h/1d 전파
|
|
- **봉 마감 시** `evaluateStrategyOnBarClose()` — 1m 및 상위 TF 마감마다 ta4j 전략 평가
|
|
- `CANDLE_CLOSE` / `REALTIME_TICK` 실행 방식 유지
|
|
|
|
## 3. 실시간 손절/익절 (이원화)
|
|
|
|
| 경로 | 트리거 | 클래스 |
|
|
|------|--------|--------|
|
|
| 진입/청산 (전략) | 봉 마감 | `BarBuilder` → `OrderExecutionQueue` |
|
|
| 손절/익절 | 매 틱 | `RealtimePositionMonitor` → `OrderExecutionQueue` |
|
|
|
|
- SL/TP 비율: **백테스트 설정** (`GcBacktestSettings` / API) 재사용
|
|
- 모의투자 ON + 보유 포지션일 때만 동작
|
|
|
|
## 4. 장애 대응
|
|
|
|
| 기능 | 클래스 | 설정 |
|
|
|------|--------|------|
|
|
| WS 재연결 | `UpbitWebSocketClient` + `WebSocketStalenessMonitor` | `stale-tick-seconds: 30` |
|
|
| 갭 백필 | `CandleGapBackfillService` | cron `0 */5 * * * *`, REST 20봉 |
|
|
| 메모리 상한 | `Ta4jStorage` | 파이프라인 ON 시 `max-bars-per-series: 500` |
|
|
|
|
## 5. 설정 (`application.yml`)
|
|
|
|
```yaml
|
|
goldenchart:
|
|
trading:
|
|
pipeline:
|
|
enabled: true
|
|
queue-capacity: 65536
|
|
worker-threads: 6
|
|
order-rate-per-second: 5.0
|
|
max-bars-per-series: 500
|
|
stale-tick-seconds: 30
|
|
gap-backfill-cron: "0 */5 * * * *"
|
|
gap-backfill-candle-count: 20
|
|
```
|
|
|
|
`enabled: false` 시 기존 동기 경로(WS → `BarBuilder.onTick` 직접)로 폴백.
|
|
|
|
## 6. 모니터링 API
|
|
|
|
| 엔드포인트 | 용도 |
|
|
|------------|------|
|
|
| `GET /api/trading/pipeline/status` | 파이프라인 전체 스냅샷 (프로세스·JVM·트래픽·스레드) |
|
|
| `GET /api/dashboard/summary` | 운영 대시보드 (`systemMonitor` 필드에 동일 스냅샷 포함) |
|
|
|
|
**systemMonitor** 주요 항목: `processes`(레이어별 상태), `jvm`(Heap·스레드), `traffic`(초당 틱/WS/주문), `memory`(Ta4j), `queue`/`workers`/`orders`, `threads`, `staleMarkets`.
|
|
|
|
## 7. 패키지
|
|
|
|
`com.goldenchart.trading.pipeline.*`
|