백테스트에서 이긴 전략이 실전에서 지는 5가지 이유 — OOS 검증이 필요한 순간

백테스트 수익 곡선은 거의 언제나 실제보다 아름답습니다. 전략이 틀려서가 아닙니다. 백테스트는 전략을 만든 데이터로 그 전략을 채점하기 때문입니다. 이 글은 그 착시가 생기는 다섯 가지 경로와, 그것을 걸러내는 OOS 검증의 규칙을 정리합니다.

이 연구소의 모든 전략은 이 글의 기준을 통과해야 다음 단계로 넘어갑니다. 전체 검증 단계는 연구소 소개에 있습니다.

1. 과최적화: 많이 찾으면 반드시 무언가 찾아진다

이동평균 기간, 손절 폭, 진입 시각 같은 파라미터를 바꿔 가며 가장 좋은 조합을 고르면, 그 조합은 과거 데이터의 우연한 잡음까지 함께 학습합니다. 시험해 본 조합이 많을수록 순전히 운으로 좋아 보이는 조합이 섞여 있을 가능성도 커집니다.

  • 몇 개의 조합을 시험했는지 기록합니다. 가장 좋은 결과 하나만 보고하면 그 숫자는 부풀려져 있습니다.
  • 최적값 한 점이 아니라 주변 값에서도 성과가 유지되는지 봅니다. 한 점에서만 좋은 전략은 대개 잡음입니다.

2. 미래 데이터 누수: 그 순간에는 알 수 없던 정보

백테스트 코드는 과거의 모든 데이터를 한꺼번에 들고 있기 때문에, 실수로 그 시점에는 아직 없던 정보를 쓰기 쉽습니다. 수익률이 비현실적으로 매끄럽다면 가장 먼저 의심할 부분입니다.

  • 봉이 끝나야 확정되는 값(종가, 당일 고가·저가, 봉 단위 지표)으로 신호를 만들고 같은 봉 안에서 체결시키는 경우
  • 나중에 확정된 데이터(수정 주가, 사후에 정리된 종목 목록)를 과거 시점에 그대로 쓰는 경우
  • 전체 기간의 평균·표준편차로 정규화한 뒤 그 값을 과거 신호에 쓰는 경우

3. 비용과 체결: 가장 흔하게 전략을 지우는 단계

수수료와 세금, 슬리피지는 거래할 때마다 빠져나갑니다. 거래가 잦은 전략일수록 비용을 넣기 전과 후의 차이가 커지고, 거래 한 번의 평균 기대수익이 왕복 비용보다 작으면 전략은 비용만큼 확실하게 손실을 냅니다.

  • 수수료·세금은 실제 거래 조건대로, 슬리피지는 보수적으로 넣습니다.
  • 원하는 가격에 원하는 수량이 체결된다고 가정하지 않습니다. 호가가 얇은 종목은 미체결과 부분 체결이 생깁니다.
  • 비용을 넣은 뒤 Profit Factor(총이익 ÷ 총손실)가 1보다 작으면 그 전략은 손실 전략입니다.

4. 표본 편향: 운 좋은 기간만 본 결과

상승장 한 구간, 변동성이 컸던 몇 달처럼 특정 시장 상황만 담긴 데이터로는 전략의 성격을 알 수 없습니다. 현재 남아 있는 종목만으로 과거를 시험하면, 중간에 사라진 종목이 빠져 결과가 좋아 보이는 생존 편향도 생깁니다.

5. 시장 체제 변화: 과거에 통하던 이유가 사라질 때

변동성, 거래 참여자, 규칙이 바뀌면 전략이 기대던 패턴 자체가 없어질 수 있습니다. 그래서 한 번 검증했다고 끝나지 않고, 실제 운용 중에도 백테스트·DRY RUN과의 차이를 계속 추적해야 합니다.

OOS 검증의 규칙

OOS(Out-of-Sample)는 전략을 만들고 고칠 때 한 번도 보지 않은 데이터입니다. 학습 구간에서 규칙과 파라미터를 정하고, 그 규칙을 그대로 고정한 채 OOS 구간에서 한 번 채점합니다.

  • OOS는 한 번만 본다. OOS 결과를 보고 규칙을 고친 뒤 다시 OOS로 확인하면, 그 데이터는 더 이상 표본 외가 아닙니다.
  • 시간 순서를 지킨다. 무작위로 섞어 나누지 않고, 학습 구간보다 뒤의 기간을 OOS로 씁니다.
  • 성과가 줄어드는 것은 정상이다. 중요한 것은 비용을 넣은 뒤에도 방향과 성격이 유지되는지입니다.
  • 기간을 밀어 가며 반복한다(walk-forward). 한 번의 분할보다 여러 구간에서 같은 결론이 나오는지가 더 믿을 만합니다.

LIVE로 가기 전 체크리스트 10개

  1. 시험한 파라미터 조합 수를 기록했다.
  2. 최적값 주변에서도 성과가 유지된다.
  3. 신호에 쓰는 모든 값이 그 시점에 실제로 알 수 있던 값이다.
  4. 체결 가정이 신호 시점보다 뒤에 있다.
  5. 수수료·세금을 실제 조건대로 넣었다.
  6. 슬리피지를 보수적으로 넣었다.
  7. 서로 다른 시장 상황이 포함된 기간으로 시험했다.
  8. OOS를 한 번만, 시간 순서대로 확인했다.
  9. 비용 반영 후 OOS에서도 Profit Factor가 1보다 크다.
  10. DRY RUN으로 실제 데이터 흐름에서 같은 신호가 나오는지 확인했다.

이 연구소의 글에서는 위 단계 중 실제로 통과한 것만 상단 배지(BACKTEST, OOS VERIFIED, DRY RUN, LIVE)로 표시합니다.

다음 실험

다음 기록부터는 이 기준을 실제 전략에 적용한 결과를 올립니다. 그 전에 기록을 올릴 서버를 어떻게 만들었는지는 서버·자동화 구축기에 정리했습니다. 관련 기록은 백테스트 카테고리에 모입니다.

본 사이트의 콘텐츠는 정보 및 연구 기록을 목적으로 하며 특정 금융상품의 매수·매도를 권유하지 않습니다. 투자 판단과 결과에 대한 책임은 투자자 본인에게 있습니다. 투자 고지 전문

댓글 남기기