백테스트란 무엇인가?
퀀트 투자에서 백테스트(Backtest)는 과거 데이터를 기반으로 전략의 수익성을 검증하는 과정입니다. 자동매매 시스템을 구축하기 전, 전략이 실제로 수익을 낼 수 있는지 확인하는 필수 단계죠. 하지만 많은 투자자들이 백테스트 결과를 맹신하다가 실전에서 큰 손실을 경험합니다.
이 글에서는 백테스트에서 흔히 발생하는 함정들을 정리하고, 실전 자동매매에서 같은 실수를 반복하지 않는 방법을 알려드립니다.
함정 1: 과최적화(Overfitting)
백테스트에서 가장 치명적인 실수는 과최적화입니다. 과거 데이터에 지나치게 맞춘 전략은 미래에 전혀 통하지 않습니다.
과최적화가 발생하는 패턴
- 파라미터 과다 조정: 이동평균 기간, RSI 임계값 등을 소수점 단위로 최적화하는 경우
- 조건 과다 추가: “월요일 오전 9시~10시, RSI 30 이하, 거래량 200% 이상”처럼 조건을 계속 추가하는 경우
- 특정 구간 집중: 2020년 3월 폭락장이나 2021년 상승장 등 특정 시장 상황에만 맞추는 경우
과최적화 방지법
전체 데이터를 학습 구간(In-Sample)과 검증 구간(Out-of-Sample)으로 분리하세요. 학습 구간에서 전략을 만들고, 검증 구간에서 성과를 확인합니다. 검증 구간에서도 유사한 수익률이 나와야 실전 적용이 가능합니다.
# Python 예시: 데이터 분리
train_data = df[df.index < '2024-01-01'] # 학습 구간
test_data = df[df.index >= '2024-01-01'] # 검증 구간
# 학습 구간에서 전략 최적화
strategy = optimize(train_data)
# 검증 구간에서 성과 확인
result = backtest(strategy, test_data)
print(f"검증 구간 수익률: {result.total_return:.2%}")
함정 2: 생존자 편향(Survivorship Bias)
상장 폐지된 종목이나 사라진 코인을 데이터에서 제외하면, 백테스트 결과가 실제보다 훨씬 좋게 나옵니다. 이것이 생존자 편향입니다.
예를 들어, 2020년에 존재했던 암호화폐 중 상당수는 이미 사라졌습니다. 현재 살아남은 코인만으로 백테스트를 돌리면, 자연스럽게 “성공한 코인”만 매매한 결과가 나옵니다.
해결 방법
- 상장 폐지 종목을 포함한 전체 히스토리 데이터를 사용하세요
- 코인의 경우, 계좌 생존 규칙을 함께 적용하면 리스크를 줄일 수 있습니다
함정 3: 슬리피지와 수수료 무시
백테스트에서 “호가 기준 즉시 체결”을 가정하면 현실과 큰 괴리가 생깁니다. 실전에서는 반드시 슬리피지(Slippage)와 수수료가 발생합니다.
| 항목 | 백테스트 가정 | 실전 현실 |
|---|---|---|
| 체결 가격 | 시그널 발생 시점 종가 | 0.1~0.5% 슬리피지 발생 |
| 수수료 | 0% (무시) | 거래당 0.04~0.1% |
| 주문 지연 | 0ms | 50~500ms API 지연 |
| 유동성 | 무한 유동성 | 호가창 깊이에 의존 |
스캘핑처럼 거래 빈도가 높은 전략일수록 수수료와 슬리피지의 영향이 커집니다. 일 50회 거래하는 전략이라면 수수료만으로 일 2~5%의 비용이 발생할 수 있습니다.
함정 4: 룩어헤드 바이어스(Look-Ahead Bias)
룩어헤드 바이어스는 백테스트 시점에서 아직 알 수 없는 미래 정보를 사용하는 실수입니다. 코드상으로는 작은 버그처럼 보이지만, 결과에 치명적인 영향을 줍니다.
흔한 예시
- 당일 종가를 사용해 당일 매수 결정을 내리는 경우
- 기업 실적 발표 전에 실적 데이터를 전략에 반영하는 경우
- 주식 분할(Split) 조정을 소급 적용하지 않는 경우
# ❌ 잘못된 예: 당일 종가로 당일 진입
if df['close'][i] > df['ma20'][i]:
buy_at_close(i) # 종가를 알기 전에 종가로 진입 결정
# ✅ 올바른 예: 전일 종가로 당일 진입
if df['close'][i-1] > df['ma20'][i-1]:
buy_at_open(i) # 전일 시그널로 당일 시가에 진입
함정 5: 시장 체제 변화 무시
과거에 잘 작동한 전략이 현재에도 통한다는 보장은 없습니다. 시장은 상승장, 횡보장, 하락장을 반복하며, 각 체제에서 최적 전략이 다릅니다.
- 추세추종 전략: 강한 추세장에서 수익, 횡보장에서 손실
- 평균회귀 전략: 횡보장에서 수익, 추세장에서 손실
- 변동성 매매: 고변동성 구간에서 수익, 저변동성에서 기회 부족
하나의 전략만 운용하면 특정 시장 체제에서 반드시 손실이 발생합니다. 복구매매의 유혹에 빠지지 않으려면, 전략 포트폴리오를 구성해 시장 체제 변화에 대응해야 합니다.
실전 체크리스트: 백테스트 검증 5단계
자동매매 전략을 실전에 투입하기 전, 아래 체크리스트를 반드시 확인하세요.
- 데이터 분리: In-Sample / Out-of-Sample 구간을 나눴는가?
- 현실 비용 반영: 슬리피지, 수수료, API 지연을 포함했는가?
- 생존자 편향 제거: 상장 폐지 종목이 데이터에 포함되어 있는가?
- 룩어헤드 확인: 미래 데이터를 참조하는 코드가 없는가?
- 다중 시장 체제 테스트: 상승장, 횡보장, 하락장 모두에서 검증했는가?
마무리
백테스트는 퀀트 투자의 핵심 도구지만, 그 결과를 맹신하면 실전에서 큰 대가를 치르게 됩니다. 과최적화, 생존자 편향, 비용 무시, 룩어헤드 바이어스, 시장 체제 변화 — 이 다섯 가지 함정만 피해도 자동매매 전략의 실전 성공 확률은 크게 올라갑니다.
좋은 백테스트 결과보다 중요한 것은 나쁜 백테스트를 걸러내는 능력입니다. 화려한 수익 곡선에 속지 말고, 위 체크리스트를 꼼꼼히 점검하세요.