NOONOO TRADING무료 채팅방 입장

룩어헤드 편향(미래참조) — 백테스트 승률이 실전에서 반토막 나는 가장 흔한 이유

백테스트에서 승률 80%가 나왔는데 실전에서는 50%도 안 나오는 일이 반복된다면, 원인은 대개 전략이 아니라 검증 방식입니다. 그중 가장 흔하고 가장 안 보이는 것이 룩어헤드 편향(미래참조)입니다. 진입 시점에는 존재하지 않았던 정보가 조건에 한 칸이라도 섞이면, 그 백테스트는 전략을 잰 것이 아니라 답을 미리 본 것입니다.

룩어헤드 편향이란 무엇인가

정의는 한 줄입니다. 진입 버튼을 누르는 그 순간에 알 수 없었던 값을 조건이나 계산에 사용한 것이 룩어헤드 편향입니다. 미래참조라고도 부릅니다. 코드가 틀린 것이 아니라 시점이 틀린 오류라서, 프로그램은 오류 없이 끝까지 돌고 결과도 깔끔하게 나옵니다. 그래서 대부분 발견되지 않은 채 "검증된 전략"이 됩니다.

기준은 딱 하나입니다. 어떤 값이 조건에 들어간다면 "이 값을 진입 시각에 화면에서 볼 수 있었나"를 묻습니다. 볼 수 없었다면 그 값은 신호가 아니라 정답지입니다.

진입 시각 기준 판별

써도 되는 값
· 이미 마감된 이전 캔들의 시가·고가·저가·종가
· 그 값들로 계산한 지표(이동평균·RSI 등)
· 현재 캔들의 실시간 가격(그 시점까지의 값)
· 이미 공개된 펀딩비·미결제약정 수치

쓰면 안 되는 값
· 진입한 캔들의 종가·고가·저가
· 이후 도달한 최고가·최저가
· 이 거래가 이겼는지 졌는지
· 나중에 수정 공표된 데이터
· "이 구간은 상승장이었다" 같은 사후 라벨

형태 1 — 일봉 종가 신호로 그날 진입 처리

가장 많이 나오는 형태입니다. "종가가 20일선 위로 올라오면 매수"라는 규칙을 만들고, 백테스트에서는 그 캔들의 종가에 진입한 것으로 계산합니다. 그런데 종가는 캔들이 닫혀야 확정됩니다. 캔들이 닫히기 전에는 그 조건이 성립하는지 알 수 없고, 확정된 순간에는 이미 그 가격에 살 수 없습니다.

같은 규칙, 진입 시점만 다르게 (BTC 일봉 · 200회 신호 가정)

A. 신호 캔들 종가에 진입 (미래참조)
평균 진입가 = 종가 그대로
승률 61% · 평균 손익 +0.9%

B. 다음 캔들 시가에 진입 (정상)
갭만큼 불리하게 체결
승률 52% · 평균 손익 +0.1%

→ 규칙은 동일. 바뀐 것은 한 칸의 시점뿐
→ 여기에 왕복 수수료 0.10%와 슬리피지를 얹으면 남는 것이 사라진다

위 숫자는 구조를 보여주기 위한 가정 예시지만, 방향은 항상 같습니다. 종가 진입은 종가가 좋았던 날만 골라 사는 것과 같기 때문에 반드시 유리하게 나옵니다. 신호는 캔들이 닫힌 뒤에 확정되고 체결은 그다음 캔들에서 일어나므로, 백테스트도 반드시 그 순서를 따라야 합니다. 이 문제는 일봉 마감을 몇 시로 잡느냐에 따라 신호 자체가 달라지기도 합니다 — 차트 시간대와 일봉 마감 기준 쪽을 같이 보면 됩니다.

형태 2 — 지표를 사후에 다시 계산

지표 중에는 나중 값이 들어와야 과거 값이 확정되는 것들이 있습니다. 대표적으로 지그재그, 피봇 고점·저점, 일부 필터가 그렇습니다. 차트에 그려진 선을 보면 과거 고점이 정확히 찍혀 있지만, 그 점은 그 시점이 아니라 한참 뒤에 확정된 것입니다.

지그재그 고점 표시

차트에서 보이는 것
→ 3월 12일 $71,200 에 고점 표시

실제로 그 표시가 생긴 시각
→ 3월 17일 (5% 반대 움직임이 확인된 뒤)

이 고점을 3월 12일 조건에 쓰면
→ 5일 뒤의 정보를 5일 전에 쓴 것

재계산되는 지표를 백테스트에 쓰려면 "언제 확정됐는가"를 별도로 기록해야 합니다. 그게 번거로우면 확정 시점이 명확한 지표만 쓰는 편이 안전합니다. 캔들이 닫힐 때 값이 고정되는 이동평균·RSI·ATR 같은 것들은 이 문제가 없습니다.

형태 3 — 미래 결과로 걸러낸 표본

가장 티가 안 나는 형태이고, 승률 90% 이상이 나오는 규칙은 대부분 여기에 걸려 있습니다. 조건 자체는 정상인데 검사 대상을 고르는 과정에 결과가 들어간 경우입니다.

승률 100% 규칙의 정체

과정
① 크게 오른 거래 200건을 먼저 추린다
② 그 거래들의 진입 직전 공통 조건을 찾는다
③ "RSI 34 아래 + 거래량 2배" 라는 규칙이 나온다
④ 그 200건에 적용 → 승률 100%

같은 규칙을 전체 기간에 그대로 재생하면
→ 조건 충족 신호 3,180건
→ 실제 진입(중복·보유중 제외) 740건
→ 승률 54%

①에서 이미 답을 보고 시작했기 때문에 ④의 100%는 규칙의 성능이 아니라 선별의 성능입니다. 검사 대상이 이긴 거래로만 채워져 있으면 어떤 조건을 넣어도 승률은 높게 나옵니다. 파일명이나 데이터 컬럼에 결과·최대이익·최대손실·승패 같은 단어가 섞여 있다면 그 표본은 실시간 규칙 검증에 쓸 수 없습니다. 성격은 다르지만 생존 편향과 같은 뿌리입니다 — 살아남은 것만 세는 순간 분모가 사라집니다.

구분법은 간단합니다. 전체 기간을 처음부터 끝까지 한 번도 건너뛰지 않고 재생했는가. 신호 수, 중복 처리 기준, 보유 중이라 넘어간 횟수, 실제 진입 수, 승패, 평균·최대 손실폭까지 같이 나오지 않으면 그것은 성과가 아니라 검산 표본입니다.

형태 4 — 데이터 자체의 시점 오류

규칙과 표본이 멀쩡해도 데이터 파일에서 새는 경우가 있습니다.

데이터에서 새는 경로

· 시간대 오파싱 — 한국시간을 UTC로 읽으면 9시간짜리 미래참조가 통째로 생긴다
· 상장폐지 종목 누락 — 지금 거래되는 종목만 받아오면 죽은 종목이 빠진다
· 수정 공표 데이터 — 나중에 정정된 값이 과거 자리에 들어가 있다
· 캔들 정렬 기준 혼용 — 시작 시각 기준 파일과 종료 시각 기준 파일을 섞어 쓴다
· 지표 시프트 실수 — 한 칸 당기는 처리를 빠뜨린다

첫 줄이 특히 위험합니다. 타임스탬프를 잘못 읽으면 코드 어디에도 미래를 참조하는 줄이 없는데 결과만 좋아집니다. 데이터를 새로 붙일 때는 아무 거래나 하나 골라 진입 시각의 실제 차트를 열어 그때 그 값이 보였는지 눈으로 대조하는 것이 가장 확실한 검사입니다.

내 백테스트에 미래참조가 있는지 확인하는 법

순서대로 보면 대부분 잡힙니다.

점검 체크리스트

① 조건에 쓰인 모든 값에 대해 "진입 시각에 볼 수 있었나"를 답할 수 있다
② 신호 확정 시점과 체결 시점이 분리돼 있다 (같은 캔들 종가 진입 없음)
③ 전체 기간을 건너뛰지 않고 재생했다 (표본을 미리 고르지 않음)
④ 수수료·슬리피지·스프레드가 반영돼 있다
⑤ 같은 캔들에서 익절가와 손절가가 동시에 닿았을 때 처리 규칙이 정해져 있다
⑥ 앞 절반으로 만든 규칙을 뒷 절반에서 그대로 돌려봤다

결과가 갑자기 나빠지는 항목이 곧 새던 곳이다

⑤는 놓치기 쉬운데 영향이 큽니다. 한 캔들 안에서 고가와 저가가 둘 다 목표에 닿았을 때 어느 쪽이 먼저였는지는 캔들 데이터로 알 수 없습니다. 여기서 "이긴 쪽이 먼저 닿았다"고 처리하면 그것도 미래참조입니다. 불리한 쪽(손절 먼저)으로 고정하는 것이 안전한 기본값입니다.

⑥은 가장 실용적인 검사입니다. 절차로 정리한 것이 워크포워드 분석입니다. 규칙을 만든 구간과 검사하는 구간을 시간 순서로 분리하면, 미래참조가 있는 전략은 뒤쪽 구간에서 거의 예외 없이 무너집니다. 성적이 앞 구간에만 몰려 있다면 과최적화일 수도 있으니 둘을 같이 의심하면 됩니다.

고쳤는데도 성적이 남아 있다면

미래참조를 다 걷어내고도 결과가 유지된다면 다음 질문은 표본 수입니다. 거래 30건짜리 승률 60%는 우연으로도 자주 나옵니다. 판단에 필요한 최소 거래 수와 오차 범위는 거래 표본 크기에서 다룹니다. 그다음이 비용입니다. 승률이 남아도 스프레드슬리피지를 얹으면 사라지는 전략이 많습니다. 특히 진입이 잦은 단타일수록 비용이 성적 전체를 결정합니다.

세 관문을 통과했다면 마지막은 실시간 확인입니다. 같은 규칙을 모의 매매로 앞으로 돌려서, 과거 재생 성적과 앞으로의 성적이 비슷한 범위에 들어오는지를 봅니다. 백테스트에서만 좋고 실시간에서 무너지는 전략은 거의 항상 시점 문제였습니다. 비교 기준으로는 승률보다 손익비(PF) 쪽이 흔들림이 적습니다.

정리

룩어헤드 편향 = 진입 시각에 몰랐던 값을 조건에 쓴 것
오류 메시지가 안 뜨기 때문에 결과만 좋아지고 그대로 통과된다
신호 캔들 종가 진입은 가장 흔한 형태다 — 체결은 다음 캔들부터
재계산되는 지표는 확정 시점을 따로 기록해야 쓸 수 있다
승률 90% 이상 규칙은 대개 결과로 표본을 고른 것이다
시간대 오파싱 한 번이면 코드가 멀쩡해도 몇 시간짜리 미래참조가 생긴다
검사는 워크포워드 — 앞으로 만든 규칙을 뒤에서 그대로 돌린다

한 줄로 줄이면 이렇습니다. 백테스트는 과거를 맞히는 시험이 아니라 그 시점의 정보만으로 결정을 재현하는 시험입니다. 결과가 지나치게 좋으면 전략을 의심하기 전에 시점을 먼저 의심하는 편이 빠릅니다. 기본 절차부터 다시 보려면 백테스팅 하는 법백테스트 뜻과 함정을 순서대로 보면 됩니다.

NOONOO TRADING 무료 채팅방에서 실시간 트레이딩을 같이 보세요.

무료 채팅방 입장 →

📈 OKX 신규 가입 시 거래 수수료 할인

OKX 수수료 할인 가입 →