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

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. 실시간 손절/익절 (이원화)

경로 트리거 클래스
진입/청산 (전략) 봉 마감 BarBuilderOrderExecutionQueue
손절/익절 매 틱 RealtimePositionMonitorOrderExecutionQueue
  • 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.*