# 하이브리드 자동매매 멀티스레드 아키텍처

업비트 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.*`
