트레이딩 엔진
자동매매 엔진은 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_momentum | 1시간봉 | 3,600초 (1시간) |
crypto_scalp | 5분봉 | 300초 (5분) |
config/trading.yaml에서 변경 가능:
yaml
strategies:
- name: crypto_momentum
timeframe: "1h"
interval_seconds: 3600
- name: crypto_scalp
timeframe: "5m"
interval_seconds: 300Paper vs Live 모드
Paper 모드 (기본)
bash
python scripts/auto_trader.py --paperPaperTrader가 가상 잔고로 시뮬레이션set_price()호출 후 market order 즉시 체결- 실제 거래소에 주문 전송하지 않음
- 가격 데이터만 실시간 조회
Live 모드
bash
python scripts/auto_trader.py --liveBinanceBroker가 실제 Binance Spot에 주문.env에BINANCE_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으로 안전하게 종료합니다:
- 엔진 루프 중지
- 진행 중인 작업 완료 대기
- 최종 포트폴리오 요약 출력
- Telegram 종료 알림 발송
- 데이터 피드 연결 해제
- 브로커 연결 해제
감시 종목
config/trading.yaml에서 트레이딩 대상 심볼을 설정합니다:
yaml
symbols:
- BTC/USDT
- ETH/USDT
- SOL/USDT
- BNB/USDTBinance 심볼 형식
Binance Spot 심볼 형식(BASE/QUOTE)을 사용합니다. 예: BTC/USDT, ETH/BTC