TUTORIAL
비트코인 자동매매 백테스팅 완벽 가이드
파이썬으로 비트코인 자동매매 전략을 백테스팅하는 방법. ccxt, pandas를 활용한 데이터 수집부터 전략 구현, 성과 분석까지 완벽 가이드.
럿지 AI 팀2025-01-1016분
백테스팅 워크플로우
1
데이터 수집
2
전략 구현
3
시뮬레이션
4
분석
1. 환경 설정 & 데이터 수집
ccxt와 pandas를 활용하여 거래소에서 OHLCV 데이터를 수집합니다.
import ccxt
import pandas as pd
from datetime import datetime
# 바이낸스 거래소 연결
exchange = ccxt.binance()
# BTC/USDT 1시간봉 데이터 수집
ohlcv = exchange.fetch_ohlcv(
'BTC/USDT',
timeframe='1h',
limit=1000
)
# DataFrame 변환
df = pd.DataFrame(
ohlcv,
columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']
)
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')2. 이동평균 크로스 전략
가장 기본적인 트레이딩 전략인 이동평균선 교차 전략을 구현합니다.
# 이동평균 계산 df['SMA_20'] = df['close'].rolling(window=20).mean() df['SMA_50'] = df['close'].rolling(window=50).mean() # 매매 신호 생성 df['signal'] = 0 df.loc[df['SMA_20'] > df['SMA_50'], 'signal'] = 1 # 매수 df.loc[df['SMA_20'] < df['SMA_50'], 'signal'] = -1 # 매도 # 포지션 변경점 찾기 df['position'] = df['signal'].diff() # 백테스트 실행 initial_capital = 10000 df['returns'] = df['close'].pct_change() df['strategy_returns'] = df['signal'].shift(1) * df['returns'] df['cumulative_returns'] = (1 + df['strategy_returns']).cumprod()
핵심 성과 지표
총 수익률
(최종 자산 - 초기 자산) / 초기 자산 × 100
샤프 비율
(평균 수익률 - 무위험 수익률) / 표준편차
최대 낙폭 (MDD)
(고점 - 저점) / 고점 × 100
승률
이익 거래 수 / 전체 거래 수 × 100
3. 성과 분석 코드
def calculate_metrics(df):
# 총 수익률
total_return = (df['cumulative_returns'].iloc[-1] - 1) * 100
# 샤프 비율 (연간화)
sharpe = (df['strategy_returns'].mean() * 252) / \
(df['strategy_returns'].std() * np.sqrt(252))
# 최대 낙폭 (MDD)
rolling_max = df['cumulative_returns'].cummax()
drawdown = (df['cumulative_returns'] - rolling_max) / rolling_max
mdd = drawdown.min() * 100
# 승률
wins = (df['strategy_returns'] > 0).sum()
total_trades = (df['strategy_returns'] != 0).sum()
win_rate = wins / total_trades * 100
return {
'Total Return': f'{total_return:.2f}%',
'Sharpe Ratio': f'{sharpe:.2f}',
'Max Drawdown': f'{mdd:.2f}%',
'Win Rate': f'{win_rate:.2f}%'
}백테스팅 주의사항
!
과최적화 방지
훈련/테스트 데이터 분리 필수
!
슬리피지 반영
실제 체결가격과 신호가격 차이
!
수수료 계산
거래 수수료 반드시 포함
!
생존 편향
상장폐지 코인 데이터 주의
결과 지표 예시
%
총 수익률
샤프 비율
-%
최대 낙폭
%
승률
관련 태그
#Bitcoin
#Backtesting
#Python
#Trading
#Crypto