백테스트란 무엇인가?
백테스트(Backtest)는 과거 데이터를 활용해 매매 전략의 수익성을 검증하는 과정입니다. 퀀트 투자의 핵심 첫 단계이며, 실전 투입 전 반드시 거쳐야 할 필수 과정입니다. 아무리 좋아 보이는 전략도 백테스트 없이 실전에 적용하면 계좌가 위험해질 수 있습니다.
왜 파이썬인가?
파이썬은 퀀트 투자에서 가장 많이 사용되는 프로그래밍 언어입니다. 그 이유는 명확합니다.
- pandas — 시계열 데이터 처리에 최적화된 라이브러리
- numpy — 고속 수치 연산
- matplotlib — 수익 곡선, 드로다운 시각화
- backtrader, zipline, vectorbt — 전용 백테스트 프레임워크
특히 vectorbt는 벡터 연산 기반으로 수천 가지 파라미터 조합을 빠르게 테스트할 수 있어, 최근 개인 퀀트 트레이더 사이에서 인기가 급상승하고 있습니다.
백테스트 기본 구조 이해하기
백테스트는 크게 4단계로 구성됩니다.
- 데이터 수집 — 과거 OHLCV(시가·고가·저가·종가·거래량) 데이터 확보
- 전략 정의 — 진입·청산 조건을 코드로 작성
- 시뮬레이션 — 과거 데이터에 전략을 적용해 가상 매매 실행
- 성과 분석 — 수익률, 최대 낙폭(MDD), 샤프 비율 등 핵심 지표 평가
간단한 이동평균 교차 전략 예시
가장 기본적인 백테스트 전략인 골든크로스/데드크로스 전략을 살펴보겠습니다.
import pandas as pd
import numpy as np
# 1. 데이터 로드 (CSV 또는 API)
df = pd.read_csv('btc_daily.csv', parse_dates=['date'])
df.set_index('date', inplace=True)
# 2. 이동평균 계산
df['ma_short'] = df['close'].rolling(window=5).mean()
df['ma_long'] = df['close'].rolling(window=20).mean()
# 3. 매매 신호 생성
df['signal'] = 0
df.loc[df['ma_short'] > df['ma_long'], 'signal'] = 1 # 매수
df.loc[df['ma_short'] < df['ma_long'], 'signal'] = -1 # 매도
# 4. 수익률 계산
df['returns'] = df['close'].pct_change()
df['strategy_returns'] = df['signal'].shift(1) * df['returns']
# 5. 누적 수익률
cumulative = (1 + df['strategy_returns']).cumprod()
print(f"총 수익률: {(cumulative.iloc[-1] - 1) * 100:.2f}%")
이 코드는 5일 이동평균이 20일 이동평균을 상향 돌파하면 매수, 하향 돌파하면 매도하는 단순 전략입니다. 실전에서는 수수료와 슬리피지를 반드시 반영해야 합니다.
백테스트에서 반드시 확인할 핵심 지표
| 지표 | 의미 | 기준값 |
|---|---|---|
| 총 수익률 | 전략의 전체 누적 수익 | 벤치마크 대비 초과 수익 여부 |
| MDD (최대 낙폭) | 고점 대비 최대 하락폭 | 20% 이하 권장 |
| 샤프 비율 | 위험 대비 수익 효율 | 1.0 이상 양호, 2.0 이상 우수 |
| 승률 | 전체 거래 중 수익 거래 비율 | 40% 이상 + 손익비 확인 |
| 손익비 | 평균 수익 / 평균 손실 | 1.5 이상 권장 |
초보자가 자주 하는 백테스트 실수
백테스트를 처음 시작하면 누구나 빠지는 함정이 있습니다. 이 실수들을 알아두면 시간과 비용을 크게 절약할 수 있습니다.
1. 미래 데이터 참조 (Look-Ahead Bias)
아직 발생하지 않은 미래의 데이터를 전략에 사용하는 실수입니다. 예를 들어, 당일 종가를 기준으로 당일 매매 신호를 내는 경우가 대표적입니다. 반드시 shift(1)로 신호를 한 봉 지연시켜야 합니다.
2. 과최적화 (Overfitting)
파라미터를 과거 데이터에 지나치게 맞추면, 백테스트에서는 완벽하지만 실전에서는 처참한 결과가 나옵니다. In-Sample / Out-of-Sample 분리, Walk-Forward 분석을 반드시 적용하세요.
3. 수수료·슬리피지 무시
거래 빈도가 높은 전략일수록 수수료와 슬리피지의 영향이 큽니다. 코인 선물 기준 편도 0.04~0.06%의 수수료를 반영하면 수익이 크게 줄어드는 전략이 많습니다.
실전 적용 전 체크리스트
백테스트 결과가 좋다고 바로 실전에 투입하면 안 됩니다. 다음 항목을 반드시 점검하세요.
- ✅ 최소 2년 이상의 데이터로 테스트했는가?
- ✅ 상승장·하락장·횡보장 모두에서 결과를 확인했는가?
- ✅ 수수료와 슬리피지를 반영했는가?
- ✅ Out-of-Sample 데이터에서도 유효한가?
- ✅ MDD가 감당 가능한 수준인가?
- ✅ 소액으로 페이퍼 트레이딩을 먼저 진행했는가?
다음 단계: 자동매매 연결
백테스트로 검증된 전략은 거래소 API와 연결해 자동매매 시스템으로 발전시킬 수 있습니다. 다만 감정매매의 위험을 제거하는 것이 자동매매의 가장 큰 장점이라는 점을 기억하세요.
파이썬 백테스트는 퀀트 투자의 출발점입니다. 전략을 코드로 정의하고, 데이터로 검증하고, 숫자로 판단하는 습관을 들이면 투자 실력이 확실히 달라집니다.