← Back to Projects

Snowball Bot

운영중·2025-03·backend
PythonFastAPIXGBoostSupabaseTelegram BotUpbit APIAPScheduler
Snowball Bot

Overview

Upbit 거래소에서 BTC/ETH/SOL을 자동으로 매매하는 퀀트 트레이딩 봇입니다. 매 시간 200개의 1분봉 캔들 데이터를 수집하고, 6가지 기술적 지표(RSI, MACD, EMA, 볼린저밴드, ADX, ATR)를 분석합니다. 4개의 독립적인 전략(RSI 역추세, 추세추종+모멘텀, 그리드+스퀴즈, 트렌드)을 복합 가중치로 결합하여 매매 시그널을 생성하고, XGBoost ML 모델로 예측 정확도를 보완합니다.

Key Features

01매 시간 자동 실행: 외부 크론이 POST /run → 3개 심볼 × 200 캔들 수집 → 지표 계산 → 시그널 생성 → 주문 실행
024개 독립 전략의 CompositeStrategy: RSI 역추세, 추세추종+모멘텀, 그리드+스퀴즈 브레이크아웃, 트렌드 전략을 가중치로 결합
03리스크 관리 시스템: 포지션 사이징, 스톱로스, 서킷브레이커(5회 연속 에러 시 자동 중단)
04XGBoost ML 모델: 기술적 지표를 피처로 사용하여 가격 방향 예측, 전략 시그널 보완
05실시간 모니터링: Telegram 봇으로 매매 알림, FastAPI 엔드포인트로 상태/설정/백테스트 조회
06SaaS 대시보드: Next.js로 구축한 오너 전용 대시보드에서 거래내역, 포지션, 설정 관리
07자동 블로그 퍼블리싱: AI가 일일 시장 분석 리포트를 자동 생성하여 WordPress에 발행

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

Problem

4개 전략이 서로 상반된 시그널을 낼 때 어떤 전략을 우선할지 결정할 수 없었음

Solution

CompositeStrategy 패턴으로 각 전략에 가중치를 부여하고, 백테스팅으로 최적 가중치 조합을 탐색. 시장 상태(상승/하락/횡보)별로 다른 가중치 프리셋을 적용

Problem

라이브 환경에서 API 에러, 네트워크 지연, 거래소 점검 등 예외 상황이 빈번하게 발생

Solution

서킷브레이커 패턴 구현 (5회 연속 에러 시 자동 중단), 재시도 로직, Telegram 긴급 알림으로 안정성 확보

Problem

전략을 수정할 때마다 과거 성과를 다시 검증하기 어려웠음

Solution

워크포워드 + 몬테카를로 방식의 백테스팅 엔진을 구축하여, 전략 변경 시 과거 데이터로 즉시 검증 가능한 파이프라인 완성