백테스트가 거짓말하는 여섯 가지 방법
미래 정보 누수, 생존 편향, 다중 검정, 비용 누락, 죽은 데이터, 체결 가정. 과거 성적이 부풀려지는 경로와 이 서비스가 실제로 겪은 사례를 정리했습니다.
최종 수정 2026-09-18
1. 미래를 훔쳐보기
가장 흔하고 가장 치명적인 오류입니다. 과거 어느 날의 판단을 재현하면서 그날에는 알 수 없었던 정보를 쓰는 것입니다. 수정된 재무 데이터, 그날 종가로 계산한 지표로 그날 시가에 매수하기, 나중에 편입된 종목 목록이 대표적입니다.
이 서비스도 겪었습니다. 배치가 하루 누락되어 나중에 소급 실행했을 때, 날짜만 과거로 지정하면 가격 이력은 오늘까지 내려왔습니다. 사흘 뒤의 종가가 섞인 지표로 과거의 예측을 만들고, 채점은 그것을 "적중"으로 세는 구조였습니다. 지금은 소급 실행 시 기준일 이후의 봉을 잘라 냅니다.
더 미묘한 경우도 있었습니다. 예측 모델이 학습용 표를 만들면서 정답(다음 날 수익률)이 아직 없는 최신 봉을 버리고 있었고, 그 결과 어제의 데이터로 내일을 예측하고 있었습니다. 틀린 방향의 누수도 누수입니다.
이 서비스가 "시점정합"이라고 부르는 원칙입니다. 그 시점에 실제로 구할 수 있었던 정보만 모델에 넣습니다.
2. 살아남은 종목만 보기
지금 지수에 들어 있는 종목으로 10년 전부터 백테스트를 하면, 그 사이 망하거나 퇴출된 종목은 표본에 없습니다. 살아남은 종목만 모아 놓았으니 어떤 전략을 돌려도 성적이 좋게 나옵니다.
대응은 "그 시점의 구성 종목"을 쓰는 것입니다. 이 서비스의 손절·목표가 규칙은 시점별 S&P 500 구성 종목으로 약 4년 반을 검증했습니다. 시점별 구성을 구할 수 없는 시장에서는 결과가 위로 치우쳤다고 보고 읽어야 합니다.
3. 될 때까지 돌려 보기
이동평균 기간을 5일부터 200일까지 바꿔 가며 가장 좋은 값을 고르면, 그 값은 과거 데이터의 우연한 굴곡에 맞춰진 것입니다. 스무 가지 설정을 시험하면 그중 하나는 우연만으로도 통계적으로 "유의한" 성적을 냅니다.
- 시험한 설정의 개수를 기록합니다. 최종 성적은 그 개수만큼 할인해서 봅니다.
- 데이터를 나눠 앞부분으로 고르고 뒷부분으로 한 번만 확인합니다. 뒷부분을 보고 다시 고치면 그것도 학습 데이터가 됩니다.
- 설정을 조금 바꿨을 때 성적이 급변하면 과최적화입니다. 진짜 우위는 주변 값에서도 비슷하게 나옵니다.
이 서비스의 백테스트 화면이 결과 옆에 무작위 진입 벤치마크를 함께 놓는 이유입니다. 예측 모델을 시점정합으로 다시 검증했을 때 모델의 샤프지수는 0.74, 무작위는 0.73이었습니다. 이 숫자는 성적표 화면에 그대로 공개되어 있습니다.
4. 비용과 체결을 공짜로 치기
백테스트는 원하는 가격에 원하는 수량이 항상 체결된다고 가정합니다. 실제로는 스프레드가 있고, 내 주문이 가격을 밀며, 거래가 없는 시간에는 아예 체결되지 않습니다.
모의투자도 같은 문제를 가집니다. 이 서비스의 초기 모의 체결기는 지정가를 적으면 그 가격 그대로 체결해 주었습니다. 시세가 330달러인 종목에 1달러 매수 주문이 1달러에 체결되었고, 장이 닫혀 있어도 체결되었습니다. 지금은 현재가가 지정가에 닿아야 체결되고, 지정가는 당일 유효이며, 거래가 없는 시간대의 주문은 거래가 생길 때까지 남습니다.
5. 죽은 데이터를 살아 있는 것처럼 읽기
거래가 정지된 종목은 가격이 멈춥니다. 그러면 변동성은 0에 가까워지고, RSI 같은 지표는 극단값으로 퇴화합니다. 계산은 오류 없이 끝나지만 결과는 의미가 없습니다.
이 서비스의 백테스트에서 한때 순기대값이 −118,288R로 찍힌 적이 있습니다. R은 "손절 폭 대비 몇 배"인데, 250일 동안 종가가 한 번도 변하지 않은 종목의 변동성 지표(ATR)가 0.00000002였고, 그것으로 나눈 비용이 12억 배로 계산된 것입니다. 지금은 ATR이 가격의 0.2% 미만인 표본을 제외합니다.
같은 종목은 리포트에서도 문제를 일으켰습니다. 가격이 멈춰 RSI가 20 아래로 떨어지자 "역사적 과매도, 적극 매수"라는 등급이 나왔습니다. 살 수도 없는 종목에 대한 매수 신호였습니다.
6. 한 국면만 담긴 기간
최근 2년이 상승장이었다면, 그 2년으로 검증한 매수 전략은 거의 다 좋게 나옵니다. 그것은 전략의 성적이 아니라 시장의 성적입니다. 최소한 상승·하락·횡보가 한 번씩은 들어간 기간이 필요하고, 국면별로 나눠 본 성적이 함께 있어야 합니다.
국면별로 나누면 칸마다 표본이 줄어든다는 점도 함께 기억해야 합니다. 나눈 표는 표본 수를 같이 보여 줄 때만 읽을 수 있습니다.
백테스트 결과를 받아 들었을 때 물을 것
- 이 판단에 쓰인 정보는 그 시점에 구할 수 있었는가?
- 표본에 사라진 종목이 포함되어 있는가?
- 이 설정을 고르기까지 몇 가지를 시험했는가?
- 비용과 슬리피지를 뺐는가? 빼고도 남는가?
- 무작위 진입과 비교하면 얼마나 나은가?
- 하락장 구간의 성적은 따로 어떤가?
좋은 백테스트 결과는 "이 전략은 통한다"가 아니라 "이 전략은 아직 반증되지 않았다"로 읽어야 합니다. 나머지는 작은 금액으로 실제 시장에서 확인하는 수밖에 없습니다.
광고