ModuQuant
/백테스트와 실전 갭
백테스트 설계와 해석

백테스트와 실전 갭

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

Chapter 45. 백테스트와 실전 갭 ⭐⭐⭐⭐

키워드: 오버피팅, 슬리피지, 거래비용, 심리적 오류


1. 전략 개요

한 문장 정의: 백테스트(과거 데이터 시뮬레이션)에서 보인 수익과 실제 거래(실전)에서의 수익이 극단적으로 다른 현상을 이해하고 극복하는 방법.

핵심 아이디어: 완벽한 백테스트 결과도 현실에서는 절반 이하의 수익을 기록하는 경우가 많다. 이는 과거 데이터에 과도하게 최적화된 "오버피팅", 거래비용과 세금, 심리적 약점, 시간 갭 등 여러 이유로 발생한다. 성공하려면 이 갭을 정확히 이해하고 사전에 보정해야 한다.

어떤 투자자에게 적합한가:

  • 시스템 거래자 (백테스트 기반)
  • 수량화된 거래를 하는 투자자
  • 이론적 성과와 현실의 차이를 줄이고 싶은 사람
  • 거래 시스템을 정교하게 검증하려는 사람

2. 백테스트의 치명적 오류

오류 1: 오버피팅 (Overfitting)

과거 데이터에 너무 정확히 맞추려다 미래 예측력을 잃는 것.

시나리오:
변수 조정으로 과거 수익 극대화

백테스트:
연 10% 기대 → 변수 조정 → 연 25% 달성
"완벽한 전략 발견!"

하지만 실제:
2025년 실전: 연 3% (백테스트의 12%)

왜 차이?
과거 데이터에만 완벽하게 최적화된 것
미래 데이터는 과거와 다름

예시:
"지난 10년 3월 15일은 항상 상승했다"
→ 3월 15일 자동 매수 규칙 수립
→ 백테스트: 연 수익 엄청남
→ 2025년 3월 15일: 폭락

이유: 3개 데이터 포인트 (10년 ÷ 3)에 과적합

오류 2: 생존편향 (Survivorship Bias)

사라진 기업/자산은 제외하고 분석하는 오류.

시나리오:
과거 20년 S&P 500 지수 거래 백테스트

백테스트 포함:
- Apple, Microsoft, Google (계속 존재)
- Amazon, Tesla (계속 존재)

백테스트 제외 (생존편향):
- 망한 기업들 (이미 제외됨)
- 파산한 기업들

결과:
백테스트: 연 +12% (생존한 우수 기업 중심)
현실: 연 +8~9% (망한 기업도 포함해야 실제)

동일 전략을 개별주 20개에 적용 시:
백테스트: 연 +15%
실제: 몇 개 망함, 연 +5~7%

오류 3: 거래 순서 오류 (Execution Order Bias)

거래 체결 순서와 타이밍을 현실적으로 반영하지 않는 것.

시나리오:
백테스트 룰: "5일선이 20일선을 올라가면 매수"

백테스트 시뮬레이션:
5일선이 20일선을 돌파 → 즉시 매수 @ 종가

현실:
9:30AM 개장 (5일선이 20일선 접근)
9:31AM (5일선이 20일선 돌파!)
"매수 신호 감지, 주문 입력"
9:32AM (주문 체결) → 실제 가격 +0.3% 높음

결과:
백테스트: 매수가 $100.00
실제: 매수가 $100.30

작은 차이지만 100회 거래 × 0.3% = 30% 손실!

3. 실전과 백테스트의 구체적 갭

갭 1: 거래비용

백테스트: 거래비용 0 또는 극소 (0.01%)
현실: 거래비용 0.1~0.2% (거래소 기준)

예시:
기대 월별 수익: +1%

거래 횟수: 월 20회 (활동적 거래)
거래비용 (편도 0.05%): 20회 × 0.05% × 2 (왕복) = 2%

발생:
월 수익 +1% - 거래비용 2% = -1% (손실!)

현실:
자주 거래하면 거래비용으로 수익 완전 상쇄

갭 2: 슬리피지 (Slippage)

예상 가격과 실제 체결 가격의 차이.

백테스트: 정확히 계획한 가격에 체결
현실: 수십 틱 차이

시나리오:
신호 발생: "매수, 목표 가격 $100"

백테스트:
매수: $100.00
목표: +2% = $102
수익: $2

현실:
신호 발생 → 주문 입력 → 체결
매수: $100.15 (스프레드)
추가 시간 = 움직임 더함
실제 매수: $100.30
목표: $102.00
실제 수익: $1.70
손실: $0.30 (15%)

갭 3: 심리적 오류

백테스트는 감정이 없지만, 실전은 심리와의 전쟁이다.

심리 오류 1: 손절 회피
백테스트 규칙: -2% 손절
실제 거래:
"아, 조금만 더 기다리면 반등할 거 같은데"
→ 손절 안 함
→ -5% 손실

심리 오류 2: 추격 매수
백테스트 규칙: 정확한 신호에서만 진입
실제 거래:
신호 발생 후 가격 +1% 상승했을 때
"아, 놓친 기회다! 지금이라도 사자"
→ 높은 가격에 진입
→ 평균 손실 증가

심리 오류 3: 과신 거래
초기 성공 후 포지션 크기 극단적 증가
"이제 나는 무패다"
"포지션 5배로 늘려야겠다"
→ 다음 손실이 극심

이들은 백테스트에서 감지 불가능

갭 4: 시간 갭

거래 신호 발생과 체결 사이의 시간 차이.

백테스트: 신호 → 즉시 체결 (0초)
현실: 신호 → 확인 → 주문 입력 → 체결 (수초~수분)

중기 거래 (1주일):
시간 갭 5분 = 거의 무시 가능

단기 거래 (1시간):
시간 갭 5분 = 5/60 = 8.3% 수익 손실 가능

초단기 거래 (1분):
시간 갭 5초 = 이미 신호 끝남
다음 신호까지 5초 + 집행 5초 = 10초 딜레이
→ 매 신호 놓침

갭 5: 데이터 품질

백테스트 데이터 문제:

1. 조정되지 않은 주가
   - 배당금 미반영
   - 액면분할 미반영
   - 과거 수익 왜곡

2. 환율 변동 미반영
   - 국제 거래 시 환율 영향
   - 백테스트: USD로만 계산
   - 현실: KRW로 환산 시 차이

3. 극단 이벤트 누락
   - 2008 금융위기
   - 2020 코로나
   - 2025년 미예측 사건
   → 과거 데이터에만 최적화
   → 극단 상황 대응 불가

4. 오버피팅의 신호와 탐지

신호 1: 백테스트 결과와 실제 결과의 극단 차이

신호:
백테스트 년수익: +25%
실전 첫 분기: +2%

판단:
오버피팅 가능성 높음

확인:
아웃오브샘플 테스트 (Out-of-Sample Test)
→ 최적화에 사용하지 않은 데이터로 재백테스트
→ 결과가 +25%에 못 미치면 오버피팅

수정:
파라미터 완화
더 일반적인 규칙 적용

신호 2: 변수가 너무 많음

위험한 백테스트:
"최적 진입: RSI 35~45, MACD 크로스오버, 
거래량 3일 평균의 120%, 보유 기간 3~7일,
매도 신호: RSI 60, 또는 +2.5% 수익, 또는 -1.2% 손실,
추가 필터: 요일, 시간대, 달력"

변수: 20개 이상

문제:
20개 변수 조정하면 과거 데이터에 완벽 맞춤 가능
미래 데이터는 이 조합이 안 나올 가능성 높음

해결:
변수 최소화 (3~4개만)
이론적 근거 있는 변수만 사용

신호 3: 극도의 승률

위험한 결과:
백테스트 승률: 85%+

현실적 거래:
승률이 85%라는 것은 거의 불가능
(주식시장은 예측 불가능)

가능한 경우:
1. 극단 오버피팅
2. 선택편향 (좋은 거래만 카운트)
3. 데이터 오류

확인:
극단 손실 구간 있는가?
약세장에서도 높은 승률?
→ 오버피팅 신호

5. 백테스트 → 실전 변환 공식

단계 1: 거래비용 포함

백테스트 결과: 연 +10%
거래 횟수: 월 5회 (연 60회)

거래비용:
스프레드: 0.03% × 2 (왕복)
수수료: 0.05% × 2
슬리피지: 0.05%
총: 0.16% 거래당

연간: 60회 × 0.16% = 9.6%

조정 수익: 10% - 9.6% = +0.4% (극도로 낮음)

단계 2: 심리적 감소

백테스트: 규칙 100% 준수

현실:
- 손절 회피: 5% (거래 중 5%가 손절 안 함)
- 추격 매수: 3% (거래 중 3%가 높은 가격에 사기)
- 과신 거래: 2% (크기 조정)

심리적 감소: -10% (수익의)

단계 3: 데이터 품질 조정

백테스트 데이터: 이상적
현실 데이터: 갭, 오류, 극단

조정: -3% (수익의)

단계 4: 최종 기대값

백테스트: +10%
거래비용 조정: -9.6%
심리 조정: -10%
데이터 조정: -3%

예상 실전: 10% - 9.6% - 1% - 0.3% = -0.9% (손실!)

현실:
거래 횟수를 절반으로 줄이면?
거래비용: 4.8%
심리: -5%
→ 10% - 4.8% - 0.5% - 0.3% = +4.4% (현실적)

6. 실전에서의 조정 전략

전략 1: 보수적 예상

백테스트 결과의 절반만 기대

백테스트: +20%
예상 실전: +10%
현실 비관적: +5%

운영:
최악의 시나리오 -10%까지 대비
→ 포지션 크기 조정
→ 손절선 엄격히 유지

전략 2: 점진적 진입

한 번에 풀 포지션 진입 X
단계적 진입 O

예:
완전 포지션: $100,000
단계 1 (1달): $30,000 진입
→ 실전 성과 확인
단계 2 (1달): 추가 $30,000
→ 누적 성과 확인
단계 3 (1달): 최종 $40,000

목표:
- 실제 거래 환경 경험
- 규칙 준수 여부 확인
- 심리적 대비

전략 3: 데일리 모니터링

백테스트: 월 1회 확인
현실: 주 1회 이상

확인 항목:
1. 예상 거래 vs 실제 거래
2. 거래비용 확인
3. 심리적 오류 감지
4. 규칙 준수 율
5. 실제 수익 vs 백테스트 수익

갭 감지 → 즉시 조정

7. 아웃오브샘플 테스트 (Out-of-Sample Test)

방법론

데이터: 2000~2024년 (25년)

인샘플 (최적화용): 2000~2019 (20년)
→ 파라미터 최적화
→ 최고 성과 조합 도출

아웃오브샘플 (검증용): 2020~2024 (5년)
→ 최적 파라미터로 거래
→ 미래 성과 예측

비교:
인샘플: +15% (최적화)
아웃오브샘플: +8% (검증)

판단:
아웃오브샘플이 인샘플의 50% 이상: 강한 신호
아웃오브샘플이 인샘플의 25% 이하: 오버피팅 의심

워크포워드 테스트 (Walk-Forward Test)

더 엄격한 검증.

방법:
1. 2000-2004 (5년) 최적화
   → 2005 (1년) 거래 시뮬레이션

2. 2001-2005 (5년) 최적화
   → 2006 (1년) 거래 시뮬레이션

3. 2002-2006 (5년) 최적화
   → 2007 (1년) 거래 시뮬레이션

...반복...

결과:
20년 거래 시뮬레이션
각 1년마다 새로 최적화
실전과 유사한 조건

이 결과가 진정한 "기대 수익"

8. 실전 거래 일지 샘플

거래 수행 후 정기적으로 기록.

거래 기록: 2025-01-15 (수요일)

신호 발생:
1월 효과 + 금요일 (실제는 수요일) + RSI 50~60

백테스트 기대: +2.5%

진입:
계획: 10:00 AM @ $100
실제: 10:05 AM @ $100.25 (+0.25% 슬리피지)

거래비용:
스프레드: 0.03% × 2 = 0.06%
수수료: 0.05% × 2 = 0.10%
총: 0.16%

청산:
계획: 1월 20일
실제: 1월 17일 (+$1.75 수익, 1.75%)

심리 오류:
"역사 거래 기준 4% 기대했는데 1.75%...
더 기다리면 2% 까지 될 수도?"
→ 판단: 과신 오류, 손절 회피 본능
→ 실행: 계획대로 청산 (규칙 준수)

실제 수익:
청산: $101.75
비용: -0.16%
순 수익: +1.59%

백테스트 대비: 2.5% 예상 vs 1.59% 실제 (-36%)

평가:
- 거래비용: -6% (수익 중)
- 슬리피지: -10%
- 심리: 회피 (규칙 준수)
- 총 갭: -16% (예상 대비)

누적:
15거래 누적: 기대 +37.5% vs 실제 +18.2%
갭: -51% (우려)

액션:
거래 횟수 줄이기 → 거래비용 감소
포지션 크기 확인 → 심리 안정
신호 강화 → 거짓 신호 감소

9. 리스크 조정: 실전 포트폴리오

백테스트 기반 포트폴리오

자산: $1,000,000

계획:
1월 효과: $300,000 (30%)
배당주 거래: $400,000 (40%)
기타: $300,000 (30%)

백테스트:
기대 수익: +12%
변동성: 12%
샤프지수: 1.0

조정된 실전 포트폴리오

자산: $1,000,000

현실 기대 수익: +12% × 50% = +6% (백테스트 절반)
변동성: 12% (변함 없음)
샤프지수: 0.5 (절반)

의미:
- 극도로 낮은 기대 수익
- 거래비용과 심리를 고려하면 +3~4% 정도
- 기본 S&P 500 (10%) 대비 언더퍼폼

판단:
이 전략은 가치 없음
→ 더 큰 거래 신호만 수용
→ 거래 횟수 극도로 감소
→ 거래비용 제거

10. 백테스트 vs 실전 요약 카드

항목백테스트실전조정값
기대 수익+12%+6%÷2
거래비용0%0.16% × 60 = 9.6%-10%
심리 오류0%-10%-10%
슬리피지0%-5%-5%
순 수익+12%+1.4%-88%