퀀트 백테스트, 왜 실전에서 안 통할까?
퀀트 투자를 시작하면 누구나 백테스트(Backtest)부터 돌려본다. 과거 데이터로 전략을 검증하고, 수익 곡선이 우상향하면 “이거다!” 하고 실전에 투입한다. 그런데 백테스트 수익률과 실전 수익률은 거의 항상 다르다. 왜 그럴까? 이 글에서는 퀀트 백테스트에서 가장 흔한 함정 5가지를 정리한다.
1. 과최적화(Overfitting) — 가장 치명적인 함정
과최적화는 과거 데이터에 지나치게 맞춘 전략을 의미한다. 파라미터를 계속 조정해서 백테스트 수익률을 끌어올리면, 과거엔 완벽하지만 미래엔 무용지물인 전략이 만들어진다.
예를 들어, 이동평균선 교차 전략에서 “5일선과 17일선이 교차할 때 진입”처럼 너무 구체적인 숫자를 찾아내면 위험하다. 그 숫자는 과거 특정 구간에서만 유효했을 가능성이 높다.
해결법
- Out-of-Sample 테스트: 데이터를 학습용과 검증용으로 분리한다. 학습 구간에서 만든 전략을 검증 구간에서 재확인한다.
- 파라미터 민감도 분석: 파라미터를 약간 바꿔도 결과가 크게 변하면 과최적화를 의심한다.
- 단순한 전략 유지: 파라미터가 적을수록 과최적화 위험이 줄어든다.
2. 생존자 편향(Survivorship Bias)
상장폐지된 종목, 거래정지된 코인은 데이터에서 빠져 있는 경우가 많다. 살아남은 종목만으로 백테스트하면 수익률이 과대평가된다.
예를 들어, 2020년 코인 시장에서 수백 개의 알트코인이 사라졌지만, 현재 거래소 데이터에는 살아남은 코인만 존재한다. 이 데이터로 “저가 매수 전략”을 백테스트하면 당연히 수익이 나온다 — 살아남은 코인만 테스트했으니까.
해결법
- 상장폐지 종목을 포함한 전체 유니버스 데이터를 확보한다.
- 무료 데이터보다는 상장폐지 종목까지 포함하는 유료 데이터 소스를 사용한다.
3. 슬리피지와 수수료 무시
백테스트에서 “체결가 = 신호 발생 시점 가격”으로 가정하면 실전과 큰 괴리가 생긴다. 실제로는 슬리피지(Slippage)가 발생한다. 주문을 넣는 순간 가격이 밀리고, 특히 유동성이 낮은 종목에서는 체결 자체가 안 될 수 있다.
| 항목 | 백테스트 가정 | 실전 |
|---|---|---|
| 체결가 | 종가 즉시 체결 | 슬리피지 0.1~0.5% 발생 |
| 수수료 | 무시 또는 최저 수수료 | 거래소별 0.04~0.1% |
| 유동성 | 무한 유동성 | 호가창 두께에 따라 제한 |
고빈도 전략일수록 슬리피지와 수수료의 영향이 커진다. 하루 10번 거래하면 연간 수수료만으로 원금의 상당 부분이 소모된다.
해결법
- 백테스트에 보수적인 슬리피지(0.1~0.3%)와 실제 수수료를 반영한다.
- 거래 빈도가 높은 전략은 계좌 생존 규칙을 먼저 점검한다.
4. 미래 정보 참조(Look-Ahead Bias)
백테스트 코드에서 아직 발생하지 않은 데이터를 사용하는 실수다. 흔한 예시:
- 당일 종가를 사용해서 당일 오전에 매매 결정을 내리는 로직
- 다음 날 발표될 실적을 기반으로 전날 매수하는 전략
- 리밸런싱 시점에 미래 구성 종목 정보를 사용
이 실수는 코드 리뷰를 꼼꼼히 하지 않으면 발견하기 어렵다. 특히 판다스(Pandas)에서 shift() 함수를 빠뜨리면 자연스럽게 미래 데이터를 참조하게 된다.
해결법
- 모든 신호는 이전 봉 기준으로 생성하고, 진입은 다음 봉에서 실행한다.
- 코드 리뷰 시
shift(-1)이나 미래 인덱싱이 없는지 확인한다.
5. 시장 레짐 변화 무시
2020년 코로나 폭락장, 2021년 유동성 장세, 2022년 금리 인상기는 전혀 다른 시장이다. 한 레짐에서 잘 작동하는 전략이 다른 레짐에서도 작동할 보장은 없다.
추세추종 전략은 강한 트렌드 시장에서 빛나지만, 횡보장에서는 반복적으로 손절된다. 반대로 평균회귀 전략은 횡보장에서 수익을 내지만 강한 추세에서 큰 손실을 볼 수 있다.
해결법
- 다양한 시장 구간(상승장, 하락장, 횡보장)에서 모두 테스트한다.
- 전략의 최대 낙폭(MDD)을 반드시 확인하고, 감당할 수 있는 수준인지 판단한다.
- 단일 전략보다 멀티 전략 포트폴리오로 레짐 변화에 대응한다.
실전 체크리스트: 백테스트 검증 5단계
- Out-of-Sample 구간에서 성과를 재확인했는가?
- 상장폐지 종목을 포함한 전체 데이터를 사용했는가?
- 슬리피지와 수수료를 보수적으로 반영했는가?
- 미래 데이터 참조가 없는지 코드를 점검했는가?
- 상승장·하락장·횡보장 등 다양한 시장 레짐에서 테스트했는가?
결론
퀀트 백테스트는 전략의 가능성을 확인하는 도구이지, 미래 수익을 보장하는 예언서가 아니다. 위 5가지 함정만 피해도 “백테스트에서만 이기는 전략”을 실전에 투입하는 실수를 크게 줄일 수 있다. 백테스트 결과가 좋을수록 더 의심하라 — 그것이 퀀트 투자의 첫 번째 원칙이다.