ccxt 기반 암호화폐 자동 트레이딩봇. Python 3.11+
# API 키 없이 전체 기능 체험 (합성 데이터)
python3 main.py --demo --tournament --dashboard
# ML 학습 후 실행
python3 scripts/train_ml.py --demo --model rf
python3 main.py --demo --tournament --dashboardpip install ccxt pandas numpy python-dotenv requests| 패키지 | 기능 | 설치 |
|---|---|---|
| scikit-learn | RandomForest ML | pip install scikit-learn |
| torch | LSTM (없으면 numpy fallback) | pip install torch |
| websockets | Binance WebSocket (없으면 REST) | pip install websockets |
| openai | GPT-4o 앙상블 (없으면 Claude 단독) | pip install openai |
| anthropic | Claude 분석/앙상블 (없으면 mock) | pip install anthropic |
# 거래소 API
BINANCE_API_KEY=your_api_key
BINANCE_API_SECRET=your_api_secret
# 알림 (선택)
TELEGRAM_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id
# LLM (선택)
ANTHROPIC_API_KEY=your_anthropic_key
OPENAI_API_KEY=your_openai_key
# 뉴스 (선택)
CRYPTOPANIC_API_KEY=your_key| 파라미터 | 기본값 | 설명 |
|---|---|---|
symbol |
"BTC/USDT" |
거래 심볼 |
timeframe |
"1h" |
캔들 주기 |
capital |
10000 |
초기 자본 (USD) |
risk_per_trade |
0.01 |
트레이드당 리스크 (1%) |
max_daily_loss |
0.05 |
일일 최대 손실 (5%) |
max_drawdown |
0.20 |
최대 낙폭 (20%) |
python3 main.py [OPTIONS]
| 옵션 | 설명 |
|---|---|
--demo |
MockExchangeConnector 사용 (API 키 불필요) |
--live |
실거래 모드 (API 키 필요, backtest gate 자동) |
--tournament |
전략 토너먼트 실행 후 최고 전략 선택 |
--loop |
캔들 마감마다 반복 실행 |
--dashboard |
웹 대시보드 (기본 포트 8080) |
--websocket |
Binance WebSocket 실시간 피드 (REST fallback) |
--ensemble |
Claude + GPT-4o 앙상블 신호 |
--walk-forward |
Walk-Forward 파라미터 최적화 후 실행 |
# 데모 전체 기능
python3 main.py --demo --tournament --dashboard
# 실거래 풀 스택
python3 main.py --live --websocket --ensemble --walk-forward --loop --dashboard
# 백테스트만
python3 main.py --demo --tournament| 이름 | 설명 | 예상 Sharpe | 데이터 요구사항 |
|---|---|---|---|
ema_cross |
EMA20/50 골든/데드크로스 | 0.5~1.0 | OHLCV |
donchian_breakout |
20바 Donchian 채널 돌파 | 0.5~1.2 | OHLCV |
funding_rate |
펀딩비 역추세 (극단값 반전) | 1.66~3.5 | OHLCV + 펀딩비 |
residual_mean_reversion |
BTC-neutral 잔차 z-score | ~2.3 | OHLCV |
pair_trading |
BTC-ETH 공적분 스프레드 | ~2.45 | BTC+ETH OHLCV |
ml_rf |
RandomForest (15피처) | 학습 의존 | OHLCV + 학습 필요 |
ml_lstm |
LSTM 2-layer (torch/numpy) | 학습 의존 | OHLCV + 학습 필요 |
rsi_divergence |
RSI 강세/약세 다이버전스 | 0.8~1.5 | OHLCV |
bb_squeeze |
Bollinger Band 스퀴즈 돌파 | 0.7~1.3 | OHLCV |
# 9개 전략 병렬 백테스트 → Sharpe 순위 → 최고 전략 자동 선택
python3 main.py --demo --tournament- 기준: Sharpe≥1.0, MDD≤20%, PF≥1.5, 거래≥30
- 72사이클마다 자동 재평가 (C3 auto-tournament)
# 데모 데이터로 학습
python3 scripts/train_ml.py --demo --model rf
# 실제 데이터로 학습 (API 키 필요)
python3 scripts/train_ml.py --symbol BTC/USDT --timeframe 1h --limit 2000 --model rf# numpy fallback (torch 없이)
python3 scripts/train_ml.py --demo --model lstm
# PyTorch LSTM (torch 설치 시)
pip install torch
python3 scripts/train_ml.py --demo --model lstm- 모델 저장 경로:
models/rf_btcusdt_<date>.pkl/models/lstm_btcusdt_<date>.pt - 통과 기준: test_accuracy ≥ 54%
- Walk-Forward: 60/20/20 시간순 분할 (train/val/test)
15개 학습 피처: return_1/3/5/10/20, RSI14, RSI z-score, ATR%, volatility_20, EMA ratio, price_vs_EMA20/50, volume_ratio_20, Donchian%, price_vs_VWAP
from src.backtest.engine import BacktestEngine
from src.strategy.ema_cross import EmaCrossStrategy
engine = BacktestEngine()
result = engine.run(EmaCrossStrategy(), df)
print(result.summary())from src.backtest.walk_forward import optimize_ema_cross
result = optimize_ema_cross(df, n_windows=3)
print(result.summary())
# STABLE이면 result.best_params 사용- IS/OOS 비율 < 0.5 → 과최적화 경고
- OOS Sharpe std > 0.8 → UNSTABLE 판정
from src.data.sentiment import SentimentFetcher
sf = SentimentFetcher()
score = sf.get_score() # -3 ~ +3
# 데모: SentimentFetcher.mock()- Fear & Greed Index (alternative.me, 무료)
- Binance 펀딩비 / 미결제약정
from src.data.onchain import OnchainFetcher
oc = OnchainFetcher()
score = oc.get_score() # -3 ~ +3
# 데모: OnchainFetcher.mock()- blockchain.com: 해시레이트, 거래량, 거래소 유입량
- Glassnode (API 키 필요 시)
from src.data.news import NewsMonitor
nm = NewsMonitor()
events = nm.get_latest_events()
# HIGH: hack/exploit/breach → 진입 자동 차단- CryptoPanic API (무료 티어 지원)
- HIGH/MEDIUM/LOW 자동 분류
from src.alpha.context import MarketContextBuilder
ctx = MarketContextBuilder().build(use_mock=True)
# ctx.composite_score: -3 ~ +3
# ctx.adjust_signal(signal) → 신호 조정/차단- composite_score = sentiment×0.6 + onchain×0.4
- HIGH 뉴스 시 진입 완전 차단
from src.data.order_flow import OrderFlowFetcher
of = OrderFlowFetcher()
score = of.get_score() # OFI 기반 -3 ~ +3- Binance depth API (상위 20호가)
- OFI = (bid_vol - ask_vol) / total_vol
| 조건 | 동작 |
|---|---|
일일 손실 ≥ max_daily_loss |
당일 거래 중단 |
낙폭 ≥ max_drawdown |
봇 종료 |
| 연속 손실 ≥ 5회 | 거래 일시 중단 |
| 5분 내 가격 ≥ 10% 급락 | 플래시크래시 감지, 즉시 중단 |
- 트레이드당 자본의
risk_per_trade% 리스크 - ATR 기반 손절 자동 계산
- 최대 포지션: 자본의 10%
python3 main.py --demo --dashboard
# http://localhost:8080 접속- 30초 자동 갱신
- 현재 포지션 / 일일 PnL / 전략 토너먼트 결과
- 서킷 브레이커 상태
- stdlib HTTP (외부 의존성 없음)
main.py
└── BotOrchestrator
├── DataFeed (OHLCV 수집)
│ ├── ExchangeConnector (ccxt)
│ └── BinanceWebSocketFeed (실시간)
├── MarketContextBuilder (알파 소스 통합)
│ ├── SentimentFetcher (Fear&Greed, 펀딩비)
│ ├── OnchainFetcher (blockchain.com)
│ └── NewsMonitor (CryptoPanic)
├── Strategy Tournament
│ └── BacktestEngine (Sharpe/MDD/PF/거래수)
├── TradingPipeline
│ ├── BaseStrategy.generate() → Signal
│ ├── MarketContext.adjust_signal()
│ ├── MultiLLMEnsemble (Claude + GPT-4o)
│ ├── LLMAnalyst (분석 텍스트, 주문 금지)
│ └── RiskManager → 포지션 사이즈/손절
├── PositionTracker / DailyPnL
├── CircuitBreaker (하드코딩)
├── TelegramNotifier
└── Dashboard (HTTP)
src/
strategy/ — 9개 매매 전략
exchange/ — ccxt 연결, MockConnector
data/ — OHLCV, WebSocket, 감성/온체인/뉴스/주문흐름
alpha/ — MarketContext, LLMAnalyst, Ensemble
ml/ — FeatureBuilder, Trainer, RF/LSTM 모델
backtest/ — BacktestEngine, WalkForwardOptimizer
pipeline/ — TradingPipeline (신호→주문 흐름)
risk/ — RiskManager, CircuitBreaker
scripts/
train_ml.py — ML 학습 CLI
tests/ — 단위/통합 테스트 (294 passed)
models/ — 학습된 모델 저장 (.pkl / .pt)
config/ — 설정 파일
.claude-state/ — 작업 상태 파일
# 전체 테스트
~/Library/Python/3.9/bin/pytest tests/ -q
# 특정 모듈
~/Library/Python/3.9/bin/pytest tests/test_backtest_engine.py -v
~/Library/Python/3.9/bin/pytest tests/test_lstm_strategy.py -v
# 결과: 294 passed, 11 skipped
# skipped: scikit-learn / torch 미설치 시 자동 스킵ConnectionError: binance ...
→ .env의 API 키 확인. 샌드박스 테스트: EXCHANGE_SANDBOX=true
MLRFStrategy: 모델 없음 — HOLD fallback
→ python3 scripts/train_ml.py --demo --model rf 실행
SKIPPED [sklearn not installed]
→ pip install scikit-learn 후 재실행
LSTMSignalGenerator: torch=False
→ 정상 동작 (numpy 모멘텀 fallback). PyTorch 원하면 pip install torch
donchian_breakout: 거래 없음
→ MockExchangeConnector는 합성 데이터 사용. 실제 데이터에서 재검증 필요.
→ funding_rate는 펀딩비 데이터 주입 필요, pair_trading은 ETH 데이터 필요.
- 자동 재연결 (MAX_RETRY=5, 지수 백오프)
- 최종 실패 시 REST fallback 자동 전환
| Phase | 내용 |
|---|---|
| 인프라 | BotOrchestrator, BacktestEngine, RiskManager, Dashboard, Telegram |
| Phase A | FundingRate, ResidualMeanReversion, PairTrading 전략 |
| Phase B | SentimentFetcher, OnchainFetcher, NewsMonitor, MarketContext |
| Phase C | FeatureBuilder, WalkForwardTrainer, MLRFStrategy, LLMAnalyst, auto-tournament |
| Phase D | MultiLLMEnsemble, BinanceWebSocket, WalkForwardOptimizer, LSTM, OrderFlow |
| 추가 | RsiDivergence, BbSqueeze, scripts/train_ml.py |