Files
goldenChart/multi_thread_base_archiitecture.md
T
2026-05-23 15:11:48 +09:00

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.*`