ModuQuant
/좋은 백테스트의 조건
백테스트와 전략의 세계로

좋은 백테스트의 조건

마지막 수정: 2026. 7. 3. 오후 7:41:38약 14분 소요

좋은 백테스트의 조건 ⭐⭐

키워드: 데이터 품질, 현실성, 재현 가능성


1. 백테스트를 믿기 전에 던져야 할 질문

백테스트 결과를 보여주는 사람은 많다. "이 전략은 지난 20년간 연 25% 수익을 냈습니다"라는 말을 들으면 솔깃해진다. 그런데 그 숫자를 그대로 믿어도 될까?

백테스트는 설계 방식에 따라 결과가 극적으로 달라진다. 같은 전략이라도 어떤 가정을 쓰느냐에 따라 CAGR이 두 배 이상 차이날 수 있다. 그래서 백테스트 결과 앞에서 가장 먼저 해야 할 일은 숫자를 읽는 것이 아니라, 그 숫자가 어떤 조건에서 만들어졌는지를 따지는 것이다.

이 챕터는 "좋은 백테스트란 무엇인가"를 다섯 가지 핵심 조건으로 정리한다. 이 조건들을 체크리스트처럼 사용하면, 어떤 백테스트 결과 앞에서도 냉정하게 판단할 수 있다.


2. 조건 1 — 데이터의 품질과 완전성

2-1. 생존 편향 제거 (Survivorship Bias Free)

가장 흔하고 가장 치명적인 데이터 오류다.

현재 시장에 존재하는 종목들만을 대상으로 과거를 돌아보면, 이미 상장폐지되거나 합병·파산한 종목들이 빠진다. 살아남은 종목들은 대체로 좋은 기업이었기 때문에, 그것만으로 백테스트를 하면 실제보다 훨씬 좋은 결과가 나온다.

비유하자면 이렇다. "하버드 졸업생의 평균 연봉을 조사했더니 매우 높았다"는 결과는 하버드를 중퇴하거나 실패한 사람들을 제외한 결과다. 살아남은 성공자들만 보는 것이다.

생존 편향이 결과에 미치는 영향은 전략에 따라 다르지만, 소형주·가치주 전략에서 특히 크게 나타난다. 저평가 소형주 중 상당수는 실제로 상장폐지 되기도 하기 때문이다.

좋은 백테스트의 기준: 해당 시점에 실제로 존재했던 종목 전체를 포함한 데이터를 사용했는가.


2-2. 점수 조정 데이터 (Adjusted Price Data)

주가는 액면분할, 배당, 유상증자 등에 의해 인위적으로 변동된다. 예를 들어, 어떤 종목이 2:1 액면분할을 하면 주가가 하루 만에 절반으로 떨어진다. 이것을 조정하지 않은 원시 데이터로 백테스트를 하면, 그날 전략이 엄청난 손실 신호를 발생시키는 오류가 생긴다.

수정주가(Adjusted Close Price)를 사용해야 실제 투자자의 경험을 정확하게 반영할 수 있다.


2-3. 충분한 데이터 기간

데이터 기간이 짧으면 전략의 신뢰도가 낮아진다. 이유는 두 가지다.

첫째, 다양한 시장 국면을 포함해야 한다. 상승장, 하락장, 횡보장, 고변동성 국면, 저변동성 국면 등을 모두 거쳐야 전략의 진짜 성격을 알 수 있다. 2010~2020년 데이터만 사용한 백테스트는 미국 주식의 전례 없는 장기 상승장만 담은 것이다.

둘째, 통계적 유의성을 확보해야 한다. 거래 횟수가 30~50건 이하라면 어떤 통계도 신뢰하기 어렵다. 최소 수백 건의 거래 데이터가 있어야 승률, 손익비 등의 수치가 의미를 갖는다.

좋은 백테스트의 기준: 최소 10년 이상, 가능하면 20년 이상의 데이터를 사용하고 다양한 시장 국면을 포함했는가.


2-4. 선행 편향 제거 (Look-Ahead Bias Free)

선행 편향은 당시에 알 수 없었던 미래 정보를 사용해 신호를 만드는 오류다. 실전에서는 절대 불가능한 상황을 백테스트에서 만들어내는 것이다.

가장 흔한 사례:

  • 오늘 종가로 오늘 매수 신호 생성 후 오늘 종가에 매수: 종가가 확정되는 시점에는 이미 그날 거래가 끝났다. 현실에서는 다음 날 시가에 매수할 수밖에 없다.
  • 재무제표 발표 전 데이터 사용: 기업의 연간 실적은 결산 후 몇 주~몇 달 뒤에 공시된다. 발표 전에 그 숫자를 알고 있는 것처럼 전략을 설계하면 선행 편향이다.
  • 지수 구성 종목 변경 반영: S&P500 편입 종목이 2023년에 변경되었다면, 2010년 백테스트에서 2023년의 구성 종목을 사용하면 안 된다.

선행 편향이 있는 백테스트는 결과가 비현실적으로 좋게 나오며, 실전에서는 그 성과를 재현하는 것이 원천적으로 불가능하다.


3. 조건 2 — 현실적인 거래 가정

3-1. 거래비용 반영

거래비용은 수수료, 세금, 스프레드(매수호가와 매도호가의 차이)를 모두 포함한다. 전략에 따라서는 거래비용이 수익의 대부분을 갉아먹기도 한다.

특히 단기 매매 전략일수록 거래비용의 영향이 크다. 하루에 여러 번 매매하는 전략이 거래비용을 0으로 가정하면 연 30% 수익처럼 보이지만, 현실적인 비용을 반영하면 실제로는 손실 전략인 경우가 많다.

거래비용의 현실적 가정 (가상 참고값):

  • 국내 주식: 편도 0.1~0.3% (세금 포함 시 0.3~0.5%)
  • 미국 주식 ETF: 편도 0.01~0.05%
  • 장기 전략(월 1회 이하 리밸런싱): 비용 영향 작음
  • 단기 전략(주 1회 이상 매매): 비용 영향 매우 큼

3-2. 슬리피지 반영 (Slippage)

슬리피지란 원하는 가격과 실제 체결 가격의 차이다. 내가 1만 원에 사고 싶었는데 1만 50원에 체결되는 현상이다. 거래량이 적은 종목일수록, 한 번에 거래하는 금액이 클수록 슬리피지는 커진다.

대부분의 간단한 백테스트는 슬리피지를 무시하거나 과소 반영한다. 이것이 실전과 백테스트 사이의 가장 큰 괴리 원인 중 하나다.


3-3. 유동성 제약 반영

아무리 좋은 신호가 발생해도, 유동성이 낮은 종목은 원하는 가격에 원하는 수량만큼 사고팔 수 없다. 특히 소형주나 거래량이 적은 종목에 집중된 전략은 백테스트에서는 좋아 보이지만, 실제로 수억 원 이상을 운용하면 그 성과를 재현할 수 없는 경우가 많다.

좋은 백테스트의 기준: 운용 자금 규모에 맞는 유동성 제약을 반영했는가.


3-4. 매매 시점의 현실성

"종가에 매수"와 "시가에 매수"는 전략의 성과에 상당한 차이를 만든다. 어떤 신호를 당일 종가 직전에 계산해 당일 종가에 매수하는 것은 현실에서 매우 어렵다. 대부분의 전략은 전날 종가 기준으로 신호를 계산하고 다음 날 시가나 종가에 매수하는 것이 현실적이다.


4. 조건 3 — 과최적화 방지

4-1. 과최적화란 무엇인가

과최적화(Overfitting)는 전략의 파라미터를 과거 데이터에 지나치게 맞추는 현상이다. 마치 지난 10년의 시험 문제를 완벽하게 외워서 그 문제들에서는 100점을 받지만, 새로운 문제 앞에서는 속수무책인 것과 같다.

예를 들어, 이동평균의 기간을 1일부터 500일까지 모두 시험해보고 과거에 가장 좋았던 파라미터를 선택한다면, 그 파라미터는 과거 데이터의 노이즈에 맞춰진 것일 가능성이 높다. 과거에는 완벽하지만 미래에는 무의미하다.


4-2. 과최적화의 징후

다음 중 해당하는 항목이 많을수록 과최적화 위험이 높다.

  • 파라미터가 매우 구체적이다 (예: 이동평균 23일, RSI 기준 34.7)
  • 파라미터를 조금만 바꿔도 성과가 급격히 나빠진다
  • 거래 횟수가 매우 적다 (수십 건 이하)
  • 수익 구간이 특정 몇 번의 거래에 집중되어 있다
  • 아웃오브샘플 성과가 인샘플 성과보다 현저히 나쁘다
  • 조건이 지나치게 복잡하고 많다

4-3. 과최적화를 방지하는 설계 원칙

단순성 원칙: 파라미터가 적고 규칙이 단순한 전략이 강건하다. 5개의 조건으로 만든 전략보다 2개의 조건으로 만든 전략이 미래에 더 잘 작동하는 경우가 많다.

파라미터 범위 원칙: 최적 파라미터 주변의 값들에서도 비슷한 성과가 나와야 한다. 20일 이동평균 전략이 좋다면, 18일이나 22일에서도 비슷하게 작동해야 한다.

논리 우선 원칙: 파라미터는 데이터에서 찾는 것이 아니라, 전략의 논리에서 먼저 정당화되어야 한다. "왜 20일인가"에 대한 논리적 설명이 있어야 한다.


5. 조건 4 — 아웃오브샘플 검증

5-1. 왜 아웃오브샘플 검증이 필수인가

인샘플 결과만 좋은 전략은 과거를 외운 것일 뿐이다. 전략의 진짜 가치는 한 번도 본 적 없는 데이터에서 어떻게 작동하는가로 판단해야 한다.

아웃오브샘플 검증의 핵심 원칙은 단순하다. 전략을 설계하고 최적화할 때 사용한 데이터와, 검증에 사용하는 데이터를 완전히 분리하는 것이다.


5-2. 워크포워드 분석 (Walk-Forward Analysis)

단순히 데이터를 두 구간으로 나누는 것보다 발전된 방법이다. 전체 기간을 여러 개의 창(window)으로 나누어, 각 창에서 인샘플로 최적화하고 직후 아웃오브샘플로 검증하는 과정을 반복한다.

[IS 1] → [OOS 1] → [IS 2] → [OOS 2] → [IS 3] → [OOS 3] ...

이 방식으로 나온 OOS 구간들의 성과를 합산한 것이 전략의 진짜 성과에 가깝다. 인샘플과 아웃오브샘플의 성과 차이가 작을수록 강건한 전략이다.


5-3. 성과 저하율 (Degradation Rate)

$$성과 저하율 = (IS 성과 - OOS 성과/IS 성과) × 100$$

일반적으로 OOS 성과는 IS 성과보다 낮다. 문제는 얼마나 낮으냐다.

해석 기준 (가상 참고값):

  • 저하율 20% 이내: 강건한 전략
  • 저하율 20~50%: 보통 수준, 주의 필요
  • 저하율 50% 이상: 과최적화 의심, 실전 사용 재고

6. 조건 5 — 다양한 시장 국면 포함과 구간 분석

6-1. 시장 국면별 성과 분해

좋은 백테스트는 전체 기간의 종합 성과뿐 아니라, 시장 국면별로 성과를 분해해서 보여준다.

예를 들어:

  • 상승장 구간: CAGR 28%, MDD -12%
  • 하락장 구간: CAGR -5%, MDD -35%
  • 횡보장 구간: CAGR 8%, MDD -10%

이런 분해가 있어야 전략이 어떤 환경에서 작동하고 어떤 환경에서 실패하는지를 이해할 수 있다. 전체 기간 평균 CAGR 18%라는 숫자 뒤에 하락장에서의 큰 손실이 숨어 있을 수 있다.


6-2. 연도별 수익률 분포

연도별 수익률을 나열해보면 전략의 일관성을 파악할 수 있다. 특정 몇 년의 대박 수익이 전체 평균을 끌어올리고 나머지 기간은 손실인 전략과, 매년 꾸준히 수익을 내는 전략은 전혀 다른 성격이다.

연도별 수익률을 볼 때 확인할 사항:

  • 손실이 난 연도의 수가 전체의 몇 %인가
  • 최악의 연도 수익률은 얼마인가
  • 수익의 연속성은 얼마나 유지되는가

6-3. 벤치마크와의 비교

전략의 성과는 반드시 **비교 기준(벤치마크)**과 함께 제시되어야 의미가 있다. 같은 기간 코스피 지수나 S&P500 지수와 비교하지 않으면, 전략이 시장보다 나은지 나쁜지조차 알 수 없다.

단순히 "예금보다 낫다"는 비교는 충분하지 않다. 주식 전략은 주식 시장 지수와 비교해야 하고, 자산배분 전략은 유사한 자산배분 기준 포트폴리오와 비교해야 한다.


7. 백테스트 결과 해석 시 자주 저지르는 실수

실수 1: 최고 성과 기간만 보는 것

백테스트 결과를 가장 좋게 보이는 기간을 선택해서 제시하는 경우가 있다. 이를 데이터 마이닝 편향(Data Mining Bias) 또는 백테스트 기간 선택 편향이라 한다. 전략 제안자가 수백 개의 파라미터를 시험하고 가장 좋은 결과만 보여준다면, 그것은 통계적으로 의미 없는 우연의 산물일 가능성이 크다.

실수 2: 거래비용을 무시하는 것

"거래비용은 요즘 거의 없다"고 생각하는 사람이 많지만, 단기 전략에서 거래비용이 성과에 미치는 영향은 여전히 크다. 연 24%의 수익을 내는 전략이 월 2회 매매를 한다면, 편도 0.2% 거래비용만으로 연 9.6%포인트가 차감된다. 즉 실제 수익은 14.4%로 줄어든다.

실수 3: 결과만 보고 원인을 분석하지 않는 것

CAGR, 샤프지수 같은 수치가 좋다고 해서 전략이 좋은 것이 아니다. 그 수치가 좋은지를 이해해야 한다. 특정 몇 번의 거래에서 엄청난 수익이 났고, 그것이 전체 성과를 끌어올린 것이라면 그 전략은 실전에서 불안정하다.

실수 4: 수익 구간만 확인하는 것

손실 구간을 분석하는 것이 더 중요하다. 언제, 왜 손실이 났는지를 이해하지 못하면 실전에서 같은 상황이 왔을 때 전략을 포기하게 된다.


8. 좋은 백테스트 체크리스트

아래 항목들을 통과한 백테스트만 신뢰할 수 있다.

항목 확인 여부
생존 편향 없는 데이터 사용 ✅ / ❌
수정주가 데이터 사용 ✅ / ❌
10년 이상 데이터 기간 ✅ / ❌
선행 편향 없는 신호 설계 ✅ / ❌
현실적 거래비용 반영 ✅ / ❌
슬리피지 반영 ✅ / ❌
아웃오브샘플 검증 포함 ✅ / ❌
파라미터 민감도 확인 ✅ / ❌
시장 국면별 성과 분해 ✅ / ❌
벤치마크와 비교 ✅ / ❌
연도별 수익률 분포 확인 ✅ / ❌
거래 횟수 충분 (100건 이상) ✅ / ❌

📋 챕터 요약 카드

조건 핵심 내용 위반 시 결과
데이터 품질 생존 편향 제거, 수정주가, 충분한 기간 실제보다 과대 성과
선행 편향 제거 당시 알 수 없는 정보 미사용 재현 불가능한 성과
현실적 거래 가정 비용, 슬리피지, 유동성 반영 실전 성과와 큰 괴리
과최적화 방지 단순성, 파라미터 범위 확인 미래 성과 급락
OOS 검증 인샘플과 별도 검증 기간 분리 신뢰도 없는 결과
국면 분석 시장 국면별 성과 분해 리스크 과소평가

📌 핵심 요약 (3줄)

백테스트 결과 수치보다 그 수치가 어떤 가정 위에서 만들어졌는지가 더 중요하다. 생존 편향, 선행 편향, 과최적화는 백테스트를 무의미하게 만드는 3대 함정이다. 아웃오브샘플 검증을 통과하지 못한 전략은 과거를 암기한 것일 뿐, 미래를 위한 전략이 아니다.

➡️ 다음 챕터 예고: Chapter 4에서는 "시장은 왜 비효율적인가"를 다룬다. 효율시장가설이란 무엇인지, 왜 그것이 완벽하지 않은지, 그리고 그 비효율성에서 어떻게 수익 기회가 생겨나는지를 살펴본다. 이것이 모든 전략의 이론적 뿌리다.