백테스트 수익률이 실전에서 재현되지 않는 이유: 과최적화·미래정보 참조·생존편향 점검법
백테스트에서 난 수익이 실전에서 사라졌다면, 전략을 버리기 전에 과최적화·미래정보 참조·생존편향부터 점검해야 합니다. 그다음 거래 비용과 체결 가정, 아직 보지 않은 기간에서의 평가를 차례로 확인합니다.

- 백테스트와 실전의 차이는 검증 설계 오류, 정보 시점 오류, 체결 조건 차이, 기간·시장 차이로 먼저 분류해 한 거래씩 추적합니다.
- 과최적화는 시도한 후보를 기록해 드러내고, 미래정보 참조는 정보가 생긴 시각부터 체결 시각까지 나눠 막으며, 생존편향은 당시 거래 가능했던 목록을 복원해 줄입니다.
- 비용·불리한 체결 가정을 함께 적용하고, 자료를 시간 순서대로 개발·검증·최종 평가 구간으로 나눠 선택에 쓰지 않은 기간에서 규칙을 평가합니다.
목차
백테스트에서는 수익이 났는데 실제로 거래하니 결과가 달라졌다고 해봅시다. 이때 바로 "이 전략은 쓸모없다"고 결론 내릴 수도, "운이 나빴다"고 넘길 수도 없어요. 과거 성적을 부풀린 오류가 있었는지, 실제 거래 조건이 달랐는지, 시장과 표본이 달라졌는지를 나눠서 확인해야 합니다.
30강에서는 정해진 규칙으로 가상 과거 거래를 계산했습니다. 이번 31강에서는 계산 결과가 맞더라도 그것을 실전 판단에 써도 되는지 살펴봅니다. 프로그램이 오류 없이 실행됐다는 사실과 검증 설계가 타당하다는 사실은 전혀 다른 이야기거든요. 본문의 숫자는 모두 설명용 가정이며 실제 시장에서 실행한 전략 성과가 아닙니다.
백테스트 결과가 실전에서 재현되지 않으면 무엇부터 확인할까?
백테스트와 실전 결과의 차이는 먼저 검증 설계 오류, 정보 시점 오류, 체결 조건 차이, 기간과 시장 차이의 네 가지로 분류해 확인합니다. 원인을 나누지 않으면 전략을 성급히 버리거나 운 탓으로 넘기기 쉽습니다.
백테스트는 과거 가격과 정해진 주문·비용 가정을 이용한 재구성입니다. 반면 실제 거래는 앞으로 발생하는 가격과 실제 주문으로 이뤄지죠. 같은 전략이라도 비교 기간, 투자금, 수량, 거래소가 다르면 수익률을 그대로 비교하기 어렵습니다.
| 차이의 종류 | 간단한 예 | 먼저 확인할 것 |
|---|---|---|
| 검증 설계 오류 | 좋았던 설정이나 살아남은 종목만 선택 | 시도 기록과 당시 종목 목록 |
| 정보 시점 오류 | 봉 마감 후 알게 된 값으로 봉 시작에 진입 | 자료 공개와 판단과 주문 시간 |
| 체결 조건 차이 | 백테스트는 전량 체결, 실전은 일부 체결 | 주문 종류와 유동성 및 비용 |
| 기간과 시장 차이 | 과거 상승장과 이후 횡보장 비교 | 규칙이 작동했던 환경과 거래 수 |
좋은 과거 성적을 해석하기 전에는 아래 세 가지를 먼저 묻고, 그다음 거래 비용과 체결 가정, 그리고 새로운 기간을 점검합니다.
왜 전략 버전부터 맞춰야 할까?
같은 전략 이름이라도 이동평균 기간, 신호 확인 시점, 거래 대상이 바뀌면 다른 규칙이기 때문입니다. 그래서 첫 단계는 버전을 맞추는 거예요. 코드나 규칙 문서의 버전, 자료 출처, 테스트 기간, 비용 설정을 함께 저장해 두세요.
차이가 시작된 지점은 어떻게 찾을까?
수익률만 보지 말고 한 거래씩 신호 생성, 주문 제출, 실제 체결을 순서대로 비교합니다. 예를 들어 과거 계산은 10시 봉의 최종 종가로 신호를 만들고 10시에 주문했다고 기록했는데, 실제 신호는 11시 마감 후에 나왔다면 시간부터 잘못 맞춘 것입니다.
백테스트 과최적화란 무엇이고 어떻게 알아챌까?
과최적화는 특정 과거 자료에서 성적이 좋아지도록 규칙을 지나치게 맞춰, 새 자료에서는 잘 작동하지 않는 문제입니다. 같은 시험지를 여러 번 풀며 정답 위치만 외웠다가 새 시험에서 실력이 드러나는 상황과 비슷해요.
후보를 여러 개 시험하면 무엇이 숨겨질까?
- 후보 수 세기이동평균 기간 4개, 손절 폭 3개, 목표 폭 3개를 조합하면 4 × 3 × 3 = 36개 후보가 됩니다.
- 최고 후보만 공개그중 가장 높은 수익률 하나만 보여 주면, 선택 과정에서 얼마나 많은 실패를 거쳤는지가 사라집니다.
- 우연이 섞임최고 후보의 성적에는 전략의 특성뿐 아니라 선택 과정의 우연도 섞일 수 있습니다.
한 설정에서만 성과가 튀면 어떻게 봐야 할까?
아래 가상 그림에서 설정 기간 18~22의 가정 수익률은 6%, 8%, 30%, 7%, 5%입니다. 기간 20만 유독 높죠. 이는 버그, 일부 큰 수익 거래, 작은 표본, 특정 시장 조건 등을 조사할 이유가 됩니다. 다만 튀는 값 자체가 과최적화의 확증은 아닙니다.

| 설정 기간 | 18 | 19 | 20 | 21 | 22 |
|---|---|---|---|---|---|
| 가정 수익률 | 6% | 8% | 30% | 7% | 5% |
주변 설정도 괜찮으면 민감도가 낮다는 단서가 되지만, 그것만으로 미래 성과가 보장되지는 않아요. 왜 그 조건이 작동할 것으로 생각했는지를 결과를 보기 전에 적어 두는 편이 좋습니다.
설정을 많이 시험하는 것 자체가 잘못일까?
항상 잘못은 아닙니다. 문제는 반복 탐색을 숨기고 최종 수익률을 처음부터 정했던 전략의 독립된 성과처럼 제시하는 것이에요. 버린 후보와 바꾼 규칙도 기록하고, 후보 선택에 쓰지 않은 자료를 따로 남겨 두세요.
미래정보 참조는 백테스트를 어떻게 부풀릴까?
미래정보 참조는 거래 판단 시점에 아직 알 수 없는 정보를 과거 판단에 넣는 것으로, 당시에 없던 답을 미리 보고 계산하는 셈입니다. 차트에 신호가 과거 위치에 그려져 있어도 그 신호를 실제로 알 수 있었던 시간이 같다는 뜻은 아니에요.
저점이 찍힌 봉과 저점을 확인한 봉은 왜 다를까?
가운데 봉의 저가가 좌우 두 봉보다 엄격히 낮으면 저점이라고 정해 봅시다. 8번~12번 봉의 저가가 103원, 101원, 98원, 100원, 102원이라면 10번 봉 저가 98원이 저점입니다. 하지만 오른쪽 두 봉(11번, 12번)이 모두 끝나야 이 조건을 확인할 수 있어요. 즉 발생 시점은 10번, 확인 시점은 12번 마감입니다.

| 봉 번호 | 8번 | 9번 | 10번 | 11번 | 12번 |
|---|---|---|---|---|---|
| 저가 | 103원 | 101원 | 98원 | 100원 | 102원 |
| 의미 | - | - | 저점 발생 | - | 마감 시 저점 확인 |
10번 봉에 저점 표식을 그리는 것은 가능합니다. 그러나 10번 저가 98원에 매수한 것으로 계산하면 당시 알 수 없던 확인 정보를 쓴 것이 됩니다.
경제 지표와 상위 시간봉에서도 같은 문제가 생길까?
생깁니다. 1시간봉을 거래하면서 아직 끝나지 않은 일봉의 최종 종가를 사용하면 같은 오류예요. 경제 지표도 해당 월의 수치라는 이유만으로 그달 첫날부터 알았던 것이 아닙니다. 실제 발표 시각과 이후 수정된 수치를 구분해야 합니다.
재무 자료는 결산 기준일과 공시일을 구분하고, 데이터 정제나 평균·표준편차 계산도 미래 구간 전체를 미리 사용하지 않습니다. 시점 일치 자료는 과거 각 시점에 공개되어 있던 값으로 계산하는 자료입니다. 자료 제공자가 공개 시점과 수정 이력을 어떻게 다루는지도 확인하세요.
한 봉 안에서 목표와 손절 중 무엇이 먼저였는지 알 수 있을까?
일반 고가·저가만으로는 알 수 없습니다. 진입 100원, 목표 105원, 손절 95원인데 다음 봉이 고가 106원·저가 94원이었다면, 목표와 손절 둘 다 닿았지만 순서는 알 수 없어요.
그래서 시간을 네 단계로 나눠 기록합니다.
- 정보가 생긴 시각가격·지표·공시 등 판단 재료가 실제로 공개된 때
- 신호를 판단한 시각규칙 조건이 확인된 때
- 주문을 보낸 시각실제 주문이 제출된 때
- 체결 시각주문이 실제로 체결된 때
다만 낮은 시간 단위 자료를 추가해도 주문 대기 순서나 실제 체결을 완벽하게 복원하는 것은 아니라는 점도 기억해 두세요.
생존편향은 백테스트 수익률을 얼마나 바꿀까?
생존편향은 검증 종료 시점까지 남아 있는 종목만 사용하면서 사라진 종목을 빠뜨리는 문제로, 손실을 수익처럼 보이게 만들 수 있습니다. 지금의 지수 구성 종목이나 현재 거래 가능한 코인 목록을 과거 전체에 적용하면 당시엔 알 수 없던 생존 결과가 반영돼요.
시작 시점에 가상 종목 A·B·C·D·E에 각각 100원씩 넣었다고 가정합니다. D와 E는 기간 중 거래 대상에서 사라졌고, 수익률은 가정한 청산 결과까지 반영한 값입니다.
| 종목 | 초기 금액 | 수익률 | 종료 금액 |
|---|---|---|---|
| A | 100원 | +20% | 120원 |
| B | 100원 | +10% | 110원 |
| C | 100원 | 0% | 100원 |
| D(사라짐) | 100원 | -40% | 60원 |
| E(사라짐) | 100원 | -90% | 10원 |
| A·B·C만 | 300원 | +10% | 330원 |
| 당시 전체 5종목 | 500원 | -20% | 400원 |
현재 남은 A·B·C만 보면 300원이 330원이 되어 +10%지만, 당시 다섯 종목 전체는 500원이 400원이 되어 -20%입니다. 같은 기간인데 부호가 뒤집혔죠. 이 계산은 동일 초기 비중, 추가 매매 없음, 비용 제외 조건이라 단순 평균과 포트폴리오 수익률이 같습니다. 모든 상장폐지가 같은 손실을 만든다는 뜻은 아닙니다.

생존편향은 어떻게 줄일까?
당시 거래 가능했던 목록을 복원하는 것이 출발점입니다. 각 날짜에 상장되어 있었는지, 거래 정지 중이었는지, 당시 선정 조건에 맞았는지를 기준으로 종목을 고릅니다. 사라진 종목의 자료도 보관하고, 거래 중단 뒤 보유 물량을 어떤 가격과 절차로 처리할지 명시하세요.
비트코인 한 종목 연구도 생존편향일까?
경우에 따라 다릅니다. 현재 잘 알려진 비트코인 한 종목을 연구했다고 그 결과를 모든 코인으로 일반화할 수는 없어요. 반대로 미리 정한 단일 종목 연구와, 현재 승자만 골라 과거 전체를 테스트한 연구는 구분해서 설명해야 합니다.
거래 비용과 체결 가정은 백테스트 성과를 얼마나 바꿀까?
규칙과 자료가 올바르더라도 체결을 너무 유리하게 가정하면 실전과 차이가 나며, 비용 가정이 조금만 바뀌어도 수익이 손실로 뒤집힐 수 있습니다. 수수료, 매수·매도 호가 차이, 예상보다 불리하게 체결되는 미끄러짐, 상품에 따른 펀딩이나 차입 비용을 살펴보세요.
지정가에 가격이 닿았다고 반드시 전량 체결되는 것도 아닙니다. 아래는 같은 20회 왕복 거래, 같은 수량을 고정한 비용 민감도 산술 예시입니다.
| 항목 | 기본 비용 가정 | 미끄러짐 증가 가정 |
|---|---|---|
| 비용 전 총손익 | +300원 | +300원 |
| 진입과 청산 수수료 합계 | -80원 | -80원 |
| 미끄러짐 비용 합계 | -120원 | -200원 |
| 순지급 펀딩 합계 | -40원 | -40원 |
| 비용 후 총손익 | +60원 | -20원 |
기본 가정에서는 300 − 80 − 120 − 40 = 60원입니다. 그런데 미끄러짐만 80원 더 커지면 300 − 80 − 200 − 40 = −20원이 돼요. 실제 시장 자료로 체결을 다시 시뮬레이션한 결과는 아닙니다.
주문 규모가 커지면 무엇이 달라질까?
수량이 늘면 여러 호가에 나뉘어 체결되거나 일부만 체결될 수 있습니다. 주문 지연, 통신 장애, 최소 주문 단위도 차이를 만들죠. 모의 거래에서 좋은 결과가 나와도 실제 주문 대기 순서와 시장에 주는 영향까지 검증된 것은 아닙니다.
비용 증가로 계좌 잔액이 달라지면 이후 주문 수량과 거래 가능 여부도 바뀔 수 있어요. 그래서 단순 비용 차감 표로 민감도를 살펴본 뒤, 실제 전략 검증에서는 바뀐 비용·체결 조건으로 전체 과정을 다시 실행해야 합니다. 기본 가정과 불리한 가정의 결과는 함께 보관하세요.
아직 보지 않은 기간에서는 어떻게 검증할까?
과거 자료를 시간 순서대로 개발·검증·최종 평가 구간으로 나누고, 선택을 마친 규칙을 마지막 구간과 이후 새로 쌓이는 자료에서 평가합니다. 검증 구간도 후보 선택에 사용됐다면 완전히 새로운 시험지는 아니라는 점을 기억하세요.
| 가상 자료의 순서 | 역할 | 운영 원칙 |
|---|---|---|
| 1~12개월 | 개발 | 가설과 후보 설정 및 오류 수정 |
| 13~18개월 | 검증과 후보 선택 | 미리 정한 기준으로 비교하고 시도 기록 |
| 19~24개월 | 최종 평가 | 규칙을 고정한 뒤 결과 확인 |
| 그 이후 | 전진 검증 | 새로 쌓이는 자료에서 같은 규칙 관찰 |
이 분할은 설명용입니다. 24개월이라는 길이나 특정 거래 수가 충분함을 보장하지 않으니 시장 환경과 거래 빈도를 고려해야 해요. 시계열을 무작위로 섞으면 미래와 과거가 뒤섞이거나 겹치는 관측치에서 정보가 새어 들어갈 수 있으므로 시간 순서를 지킵니다.
구간 경계는 어떻게 처리할까?
- 지표 계산에 필요한 준비 자료는 평가 시작 전 과거 자료에서 가져오되, 준비 구간의 손익은 평가 수익에 넣지 않습니다.
- 경계를 넘는 보유 포지션의 시작 가치와 종료 처리를 미리 정합니다.
- 경계를 이유로 불리한 거래만 삭제하지 않습니다.
- 거래 결과를 학습하는 방식에서는 결과가 다음 구간까지 겹치는 표본도 분리합니다.
워크포워드 검증은 무엇일까?
워크포워드는 과거 구간에서 규칙을 정하고 그다음 구간에서 평가하는 과정을 앞으로 이동하며 반복하는 방법입니다. 각 평가 구간에 들어가기 전에 규칙이 정해져 있어야 해요. 이후 모의 거래에서는 신호·주문·가정 체결을 대조하고, 실거래를 검토한다면 손실 한도와 중단 기준을 먼저 문서화합니다.
백테스트 점검 기록은 어떻게 남길까?
결과 보고서는 가장 높은 수익률만 남기는 문서가 아니라, 어떤 자료와 정보 시점, 어떤 비용과 주문 가정으로 계산했는지가 보이는 문서여야 합니다. 다음 순서로 한 전략의 기록을 확인하세요.
- 규칙 버전과 시도한 후보 적기버린 후보와 바꾼 규칙까지 포함합니다.
- 자료의 공개 시각과 당시 거래 대상 목록 확인미래정보 참조와 생존편향을 걸러냅니다.
- 신호에서 체결까지 임의의 거래 추적모호한 봉을 어떻게 처리했는지도 확인합니다.
- 비용과 불리한 체결 가정 적용기본 가정과 불리한 가정의 결과를 함께 남깁니다.
- 선택에 쓰지 않은 기간과 전진 기록 분리 보관개발에 영향을 준 자료와 섞지 않습니다.
이런 기록은 실패를 숨긴 결과보다 다음 연구 방향을 훨씬 분명히 알려 줍니다.
백테스트 성적을 부풀리는 흔한 실수는?
1. 최고 후보만 독립된 성과처럼 보여 준다
36개 후보 중 가장 좋은 하나만 남기면 선택 과정의 우연이 성과로 둔갑합니다.
점검: 시도한 후보 수와 버린 후보를 기록에 남겼나2. 확인되기 전의 신호로 진입한 것으로 계산한다
12번 봉 마감에야 확인되는 저점을 10번 봉 98원 매수로 계산하는 식입니다.
점검: 정보 발생·신호 판단·주문·체결 시각을 나눠 적었나3. 지금 남은 종목만 과거 전체에 넣는다
사라진 D·E를 빼면 -20%가 +10%로 보입니다.
점검: 당시 거래 가능했던 목록으로 종목을 골랐나4. 모호한 봉과 비용을 늘 유리하게 처리한다
목표가 항상 먼저 닿았다고 보거나 비용을 낮게 잡으면 결과가 낙관적으로 바뀝니다.
점검: 불리한 체결 가정 결과도 함께 보관했나5. 최종 평가를 보고 고친 뒤 같은 구간으로 다시 평가한다
그 구간은 이미 개발에 영향을 준 자료라 독립 검증이 아닙니다.
점검: 수정 버전은 새 구간이나 전진 자료로 평가했나
상황 판단 문제, 직접 풀어볼까요?
Q1. 10번 봉 저가 98원이 저점으로 표시됐습니다. 백테스트에서 98원에 매수한 것으로 계산해도 될까요?
안 됩니다. 좌우 두 봉보다 낮다는 조건은 12번 봉이 끝나야 확인되므로, 10번 저가에 매수했다고 계산하면 당시 알 수 없던 정보를 쓴 미래정보 참조입니다.
Q2. 비용 전 +300원, 수수료 -80원, 펀딩 -40원인 전략에서 미끄러짐이 120원에서 200원으로 커지면 비용 후 손익은?
300 − 80 − 200 − 40 = −20원입니다. 기본 가정의 +60원이 손실로 바뀌므로 불리한 가정 결과도 함께 보관해야 합니다.
Q3. 최종 평가 구간 결과를 보고 규칙을 고쳤더니 같은 구간에서 성적이 좋아졌습니다. 검증을 통과했다고 볼 수 있을까요?
아닙니다. 그 구간은 이제 개발에 영향을 준 자료예요. 수정한 버전은 새로 남긴 구간이나 이후 전진 자료에서 평가해야 합니다.
이 강의를 마치고 해볼 것은?
30강에서 만든 백테스트 하나를 꺼내 위 다섯 단계 순서대로 다시 기록해 보세요. 시도한 후보 수, 자료의 공개 시각, 당시 종목 목록, 모호한 봉 처리, 불리한 비용 가정, 선택에 쓰지 않은 기간의 결과를 채우다 보면 어디서 성적이 부풀었는지 드러납니다.
좋은 백테스트는 미래 수익을 약속하는 결과가 아니라 가정과 한계를 추적할 수 있는 결과입니다. 다음 고급 32강 「트레이딩 전략의 성과 평가하는 방법」에서는 기대값·손익비·최대 낙폭·수익계수와 표본 수를 함께 읽는 법을 다룹니다.

자주 묻는 질문
백테스트 수익률이 실전에서 재현되지 않는 이유는 무엇인가요?
과최적화, 미래정보 참조, 생존편향처럼 과거 성적을 부풀린 검증 오류가 있거나, 거래 비용·체결 조건이 달랐거나, 기간과 시장 환경이 달라졌기 때문일 수 있습니다. 원인을 네 가지로 분류한 뒤 한 거래씩 신호 생성, 주문 제출, 실제 체결을 비교해 차이가 시작된 지점을 찾습니다.
백테스트 과최적화는 어떻게 확인하나요?
시도한 후보 수를 기록하고, 최고 성과 설정의 주변 설정 성과도 함께 봅니다. 한 설정만 유독 높으면 버그, 일부 큰 수익 거래, 작은 표본, 특정 시장 조건을 조사하고, 후보 선택에 쓰지 않은 기간에서 고정된 규칙을 평가합니다.
미래정보 참조(룩어헤드)는 어떤 경우에 생기나요?
거래 판단 시점에 아직 알 수 없던 정보를 과거 판단에 넣을 때 생깁니다. 나중에 확인되는 저점 가격에 매수했다고 계산하거나, 끝나지 않은 일봉 종가를 1시간봉 거래에 쓰거나, 경제 지표·재무 자료의 발표·공시 시점을 무시하는 경우가 대표적입니다.
생존편향이 있으면 수익률이 얼마나 달라지나요?
강의의 가상 예시에서 다섯 종목에 100원씩 넣었을 때 전체는 -20%였지만, 사라진 두 종목을 빼고 남은 세 종목만 보면 +10%로 보였습니다. 당시 거래 가능했던 목록을 복원하고 사라진 종목의 처리 원칙을 명시해야 합니다.
백테스트에 거래 비용은 어떻게 반영해야 하나요?
수수료, 호가 차이, 미끄러짐, 상품에 따른 펀딩·차입 비용을 살피고 기본 가정과 불리한 가정을 함께 계산합니다. 같은 비용을 중복으로 더하지 않으며, 실제 검증에서는 바뀐 비용·체결 조건으로 전체 과정을 다시 실행합니다.
워크포워드 검증이란 무엇인가요?
과거 구간에서 규칙을 정하고 그다음 구간에서 평가하는 과정을 시간 순서대로 앞으로 이동하며 반복하는 방법입니다. 각 평가 구간에 들어가기 전에 규칙이 정해져 있어야 독립적인 평가가 됩니다.
인용 안내 이 글을 인용할 때는 출처를 함께 적어 주세요.이재민, 「백테스트 수익률이 실전에서 재현되지 않는 이유: 과최적화·미래정보 참조·생존편향 점검법」, 트레이드캠프, 2026-11-06. https://tradecamp.co.kr/post/backtest-live-trading-gap-check
본문의 숫자와 종목·전략은 모두 설명용 가정이며 실제 시장에서 실행한 전략 성과가 아닙니다. 트레이드캠프의 모든 콘텐츠는 교육 목적으로 제공되며 투자 권유나 자문이 아닙니다. 투자 판단과 그 결과에 대한 책임은 투자자 본인에게 있으며, 가상자산과 주식은 원금 손실 위험이 있습니다.



