백테스트 설계와 해석
백테스트와 실전 갭
마지막 수정: 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% |