2.6 KiB
2.6 KiB
하이브리드 자동매매 멀티스레드 아키텍처
업비트 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)
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.*