Skip to content

트레이딩 엔진

자동매매 엔진은 3개의 asyncio 루프를 병렬로 실행하여 전략 평가, SL/TP 모니터링, 상태 표시를 동시에 처리합니다.

엔진 구조

TradingEngine
├── _strategy_loop()         전략별 인터벌로 시그널 생성 + 주문
├── _sl_tp_monitor_loop()    30초마다 오픈 포지션 SL/TP 체크
├── _status_display_loop()   10초마다 Rich 콘솔 상태 출력 + 정기 요약 발송
└── telegram.poll_loop()     Telegram 봇 커맨드 수신 (2초 폴링)

전략 루프 사이클

각 전략은 설정된 인터벌마다 모든 심볼을 순회합니다:

[1] CryptoFeed.fetch_ohlcv()     200봉 OHLCV 데이터 조회

[2] TechnicalAnalyzer.calculate() RSI, MACD, BB, SMA, EMA, ADX, ATR 계산

[3] strategy.evaluate()           시그널 생성 (BUY/SELL/HOLD + 신뢰도)

[4] RiskManager 체크              일일 한도, 포트폴리오 위험, 신뢰도

[5] RiskManager.position_size()   포지션 크기 결정

[6] Broker.place_order()          PaperTrader 또는 BinanceBroker

[7] PortfolioManager.open_position() 포지션 추적 시작

[8] Ledger + Telegram             기록 + 알림 발송 + 봇 커맨드 응답

기본 전략 스케줄

전략타임프레임실행 간격
crypto_momentum1시간봉3,600초 (1시간)
crypto_scalp5분봉300초 (5분)

config/trading.yaml에서 변경 가능:

yaml
strategies:
  - name: crypto_momentum
    timeframe: "1h"
    interval_seconds: 3600
  - name: crypto_scalp
    timeframe: "5m"
    interval_seconds: 300

Paper vs Live 모드

Paper 모드 (기본)

bash
python scripts/auto_trader.py --paper
  • PaperTrader가 가상 잔고로 시뮬레이션
  • set_price() 호출 후 market order 즉시 체결
  • 실제 거래소에 주문 전송하지 않음
  • 가격 데이터만 실시간 조회

Live 모드

bash
python scripts/auto_trader.py --live
  • BinanceBroker가 실제 Binance Spot에 주문
  • .envBINANCE_API_KEY, BINANCE_API_SECRET 필수
  • Market order만 사용 (limit order 복잡성 배제)
  • amount_to_precision()으로 LOT_SIZE 자동 조정

실거래 주의

Live 모드는 실제 자금으로 거래합니다. 반드시 Paper 모드에서 충분히 검증한 후 전환하세요.

콘솔 상태 표시

10초마다 Rich 테이블로 다음 정보를 표시합니다:

  • 포트폴리오 요약: 총자산, 현금, PnL, 수익률, 오늘 거래 수
  • 오픈 포지션 테이블: 심볼, 방향, 진입가, 현재가, 수량, PnL, SL/TP
  • 최근 시그널: 최근 5개 시그널의 시간, 심볼, 액션, 전략, 신뢰도

Graceful Shutdown

Ctrl+C 또는 SIGTERM으로 안전하게 종료합니다:

  1. 엔진 루프 중지
  2. 진행 중인 작업 완료 대기
  3. 최종 포트폴리오 요약 출력
  4. Telegram 종료 알림 발송
  5. 데이터 피드 연결 해제
  6. 브로커 연결 해제

감시 종목

config/trading.yaml에서 트레이딩 대상 심볼을 설정합니다:

yaml
symbols:
  - BTC/USDT
  - ETH/USDT
  - SOL/USDT
  - BNB/USDT

Binance 심볼 형식

Binance Spot 심볼 형식(BASE/QUOTE)을 사용합니다. 예: BTC/USDT, ETH/BTC

MIT License