Snowball Bot

Overview
Upbit 거래소에서 BTC/ETH/SOL을 자동으로 매매하는 퀀트 트레이딩 봇입니다. 매 시간 200개의 1분봉 캔들 데이터를 수집하고, 6가지 기술적 지표(RSI, MACD, EMA, 볼린저밴드, ADX, ATR)를 분석합니다. 4개의 독립적인 전략(RSI 역추세, 추세추종+모멘텀, 그리드+스퀴즈, 트렌드)을 복합 가중치로 결합하여 매매 시그널을 생성하고, XGBoost ML 모델로 예측 정확도를 보완합니다.
Key Features
Architecture
External Cron → POST /run → FastAPI Server (main.py) → Market Data: Upbit API에서 1분봉 200개 수집 → Indicator Engine: RSI, MACD, EMA, BB, ADX, ATR 계산 → Strategy Layer: 4개 전략 독립 시그널 생성 → Composite Strategy: 가중치 기반 시그널 결합 → ML Layer: XGBoost 예측으로 시그널 보완 → Risk Manager: 포지션 사이징 + 스톱로스 체크 → Order Executor: Upbit API 매매 실행 → Storage: Supabase (시장 스냅샷, 포지션, 거래 로그) → Notification: Telegram Bot → Dashboard: Next.js (Vercel)
Results
실제 자금으로 라이브 트레이딩 운영 중
208개 pytest 테스트 커버리지 (Python 3.11/3.12)
FastAPI 엔드포인트 10개+ (status, run, config, backtest, AI oracle 등)
Paper → Live 전환 시스템으로 안전한 전략 검증 가능
Challenges & Solutions
4개 전략이 서로 상반된 시그널을 낼 때 어떤 전략을 우선할지 결정할 수 없었음
CompositeStrategy 패턴으로 각 전략에 가중치를 부여하고, 백테스팅으로 최적 가중치 조합을 탐색. 시장 상태(상승/하락/횡보)별로 다른 가중치 프리셋을 적용
라이브 환경에서 API 에러, 네트워크 지연, 거래소 점검 등 예외 상황이 빈번하게 발생
서킷브레이커 패턴 구현 (5회 연속 에러 시 자동 중단), 재시도 로직, Telegram 긴급 알림으로 안정성 확보
전략을 수정할 때마다 과거 성과를 다시 검증하기 어려웠음
워크포워드 + 몬테카를로 방식의 백테스팅 엔진을 구축하여, 전략 변경 시 과거 데이터로 즉시 검증 가능한 파이프라인 완성