인사이트

백테스트 결과 해석, 룩어헤드 오류 하나가 비트코인 수익률을 1.9배로 만든 실험

백테스트 결과가 좋을수록 먼저 의심해야 합니다. 같은 비트코인 이동평균 규칙이 올바르게는 +1,306%, 룩어헤드 오류를 넣으면 +2,452%였고 학습 1위 설정은 검증에서 8위였습니다.

대형 거울 앞에 선 금빛 비트코인 동전의 거울 속 모습이 실제보다 훨씬 크고 화려하게 비치는 사진풍 장면, 글자·숫자 없음
목차
  1. 백테스트 결과 해석 전에, 비교할 두 가지 계산 방식
  2. 백테스트 오류가 결과에 미친 영향, 총수익·승률·낙폭 모두 좋아졌다
  3. 백테스트 신뢰를 높이려면, 학습과 검증을 나눠야 한다
  4. 백테스트 결과 해석 전에 거래 목록부터, 오류가 만든 차이는 어디서 나왔나
  5. 백테스트 결과 해석 체크리스트, 이 숫자들로 말할 수 있는 것과 없는 것
  6. 시스템트레이딩이라면 백테스트 결과를 어떻게 검증하는가
  7. 자주 묻는 질문
  8. Q. 백테스트 결과 해석은 무엇부터 보나요?
  9. Q. 룩어헤드 편향이란 무엇인가요?
  10. Q. 백테스트 오류를 어떻게 찾나요?
  11. Q. 백테스트 신뢰도를 높이는 방법이 있나요?
  12. Q. 백테스트 결과가 좋으면 바로 자동매매에 써도 되나요?
  13. 출처

백테스트 결과를 해석할 때 가장 먼저 의심해야 할 것은 좋은 숫자 자체입니다. 규칙은 하나도 바꾸지 않았는데 계산 방식 하나만 달라져 결과가 크게 좋아지는 경우가 실제로 있습니다. 이 글은 그 차이를 직접 만들어서 보여 드립니다.

같은 20일·60일 이동평균 규칙을 비트코인 일봉 2018년 1월 1일~2026년 10월 26일(3,221일)에 적용했습니다. 올바르게 계산하면 총수익 +1,306%였고, 그날 마감 뒤에야 아는 신호를 그날 수익률에 쓰는 룩어헤드 오류를 넣으면 +2,452%가 나왔습니다. 이어서 설정값 25개를 학습 구간과 검증 구간으로 나눠, 가장 좋아 보이던 설정이 얼마나 무너졌는지도 확인했습니다.

백테스트 결과 해석 전에, 비교할 두 가지 계산 방식

두 계산은 같은 데이터와 같은 규칙을 씁니다. 유일한 차이는 신호를 언제 수익률에 반영하느냐입니다.

  • 신호 계산 — 올바른 계산: 일봉 마감 때 이동평균 비교 · 룩어헤드 오류 계산: 같음
  • 신호 반영 시점 — 올바른 계산: 신호가 나온 다음 날 수익률부터 · 룩어헤드 오류 계산: 신호가 나온 그날 수익률부터
  • 수수료 — 올바른 계산: 편도 0.1% · 룩어헤드 오류 계산: 같음

두 번째 방식은 이동평균을 가로지르는 날의 움직임을 이미 알고 사는 셈입니다. 실제 매매에서는 그날 종가가 나오기 전에는 신호를 알 수 없으므로 불가능한 계산입니다. 초보자가 흔히 만드는 코드 실수와 같습니다.

백테스트 오류가 결과에 미친 영향, 총수익·승률·낙폭 모두 좋아졌다

네 가지 지표를 나란히 놓았습니다. 오류가 있는 쪽이 모든 항목에서 좋았습니다.

  • 총수익 — 올바른 계산: +1,306% · 룩어헤드 오류: +2,452%
  • 연환산 수익률 — 올바른 계산: 35.0% · 룩어헤드 오류: 44.4%
  • 최대 낙폭 — 올바른 계산: −51.2% · 룩어헤드 오류: −44.2%
  • 승률 — 올바른 계산: 43.8% · 룩어헤드 오류: 50.0%
  • 신고점 미갱신 최장 기간 — 올바른 계산: 817일 · 룩어헤드 오류: 612일

총수익은 1.9배, 연환산 수익률은 9.4%포인트 높아졌고, 낙폭이 줄고 승률이 오르는 등 방어력까지 좋아 보였습니다. 규칙은 하나도 바뀌지 않았습니다. 결과가 좋을수록 의심해야 하는 이유가 여기에 있습니다. 숫자가 이렇게까지 좋아 보이는 전략을 발견했다면 대부분은 전략이 아니라 계산의 문제입니다.

올바른 계산과 룩어헤드 오류 계산의 최대 낙폭 비교 막대 차트(실데이터)
올바른 계산과 룩어헤드 오류 계산의 연환산 수익률 비교 막대 차트(실데이터)

백테스트 신뢰를 높이려면, 학습과 검증을 나눠야 한다

설정값을 바꿔 가며 가장 좋은 값을 고르면 또 다른 문제가 생깁니다. 과거 데이터에 맞춰진 설정이 미래에도 맞는다는 보장이 없습니다. 이를 확인하려고 데이터를 2018~2022년(학습)과 2023~2026년 10월 26일(검증)으로 나눴습니다. 단기 이동평균 5·10·15·20·30일과 장기 이동평균 40·60·90·120·150일 중 단기가 장기보다 짧은 25개 조합을 모두 계산했습니다.

  • 25개 조합 수익률 중앙값 — 학습 구간: +307.3% · 검증 구간: +166.7%
  • 학습 1위(5일·150일) — 학습 구간: +837.9% · 검증 구간: +194.3%
  • 학습 1위의 검증 순위 — 학습 구간: 1위 · 검증 구간: 25개 중 8위

학습 구간 수익률과 검증 구간 수익률의 상관계수는 0.05였습니다. 학습 때 높았던 설정이 검증 때도 높다는 관계가 사실상 없었습니다. 학습 1위가 검증에서 8위였다는 것은 우연히 과거에 잘 맞았다는 뜻일 수 있습니다. 반대로 말하면 학습 구간 성적만 보고 고른 설정은 미래 성적을 거의 알려 주지 못합니다.

25개 설정의 학습·검증 수익률 중앙값과 학습 1위 설정의 학습·검증 수익률 막대 차트(실데이터)

백테스트 결과 해석 전에 거래 목록부터, 오류가 만든 차이는 어디서 나왔나

룩어헤드 오류가 수익률을 부풀린 이유는 단순합니다. 이동평균 신호가 바뀌는 날은 대개 가격이 크게 움직인 날이기 때문으로 보입니다. 올바른 계산은 그다음 날부터 보유하므로 그 움직임을 놓치지만, 오류 계산은 신호가 나온 바로 그날의 움직임을 이미 받아 갑니다. 거래마다 신호가 나온 날의 움직임을 한 번씩 더 가져간 셈이라, 거래 횟수가 같아도 결과가 크게 벌어졌습니다.

그래서 승률도 43.8%에서 50.0%로 올랐습니다. 올바른 계산에서는 14번이 이익이었는데 오류 계산에서는 16번이 이익이었으니, 두 번의 손실이 이익으로 바뀐 것입니다. 숫자 하나가 좋아지는 것이 아니라 총수익, 승률, 낙폭이 한꺼번에 좋아지는 패턴이 나타나면 오류를 의심하는 것이 맞습니다.

백테스트 결과 해석 체크리스트, 이 숫자들로 말할 수 있는 것과 없는 것

말할 수 있는 것은 계산 방식 하나로 수익률이 1.9배가 될 수 있고, 학습 구간 1위가 검증에서 8위로 내려갈 수 있다는 사실입니다. 말할 수 없는 것도 분명합니다. 이 결과는 이동평균 규칙 하나, 비트코인 8년, 설정값 25개에 대한 것이어서 모든 전략이 이렇게 부풀려진다고 일반화할 수 없습니다. 검증 구간도 4년이어서 짧은 편이고, 진입이 32번뿐이라 큰 거래 몇 개에 결과가 크게 흔들립니다. 실제로 가장 큰 거래 3개를 빼면 올바른 계산의 총수익은 −29.0%가 됩니다.

올바른 계산과 룩어헤드 오류 계산의 신고점 미갱신 최장 기간 비교 막대 차트(실데이터)

시스템트레이딩이라면 백테스트 결과를 어떻게 검증하는가

결과가 좋을 때일수록 아래 순서로 확인합니다. 하나라도 빠지면 그 숫자는 아직 쓸 수 없는 숫자입니다.

  • 시점 표를 만듭니다. 신호를 계산하는 시점, 체결하는 시점, 수익률을 반영하는 시점을 한 줄씩 적고 코드가 그대로 구현됐는지 확인합니다.
  • 미래 행을 쓰지 않았는지 줄 단위로 봅니다. 같은 행에서 종가와 신호와 수익률이 섞여 있으면 오류 가능성이 큽니다.
  • 구간을 나눠 한 번도 본 적 없는 데이터로 확인합니다. 설정을 고른 구간과 평가하는 구간이 겹치지 않아야 합니다.
  • 인접한 설정에서도 비슷하게 나오는지 봅니다. 한 점만 좋고 이웃은 나쁘면 우연일 가능성이 높습니다.
  • 좋은 결과에 질문을 하나 더 겁니다. "이 숫자가 사실이라면 왜 다른 사람은 이미 쓰고 있지 않은가"를 묻습니다.

퀀트알파는 마감이 확정되기 전의 숫자로는 주문하지 않습니다. 이 글의 룩어헤드 오류를 구조적으로 막는 원칙에 가깝습니다. 과최적화 실험은 "백테스팅 과최적화"에서, 추세 강도 필터는 "ADX 지표 보는법"에서, 같은 규칙의 연도별 성적은 같은 날 공개한 "코인 자동매매 수익"에서 다뤘습니다.

한 봉우리만 뾰족하게 솟은 지형과 그 옆의 넓고 완만한 언덕, 백테스팅 과최적화를 상징하는 일러스트백테스팅 과최적화, 비트코인 이동평균 162개 조합으로 확인한 학습과 검증의 차이백테스팅 과최적화를 비트코인 데이터로 직접 시험했습니다. 이동평균 교차 162개 조합 중 학습 구간 1위(+126%)는 검증 구간에서 −24%로 160위였고, 두 구간 순위 상관은 −0.13이었습니다. 과최적화를 줄이는 백테스트 방법을 정리합니다.quant-alpha.kr안개 낀 이른 아침 구불구불한 산길 위로 굵은 한 줄기 길이 곧게 뻗어 나가는 모습과 그 위에 놓인 큰 비트코인 동전, 길 양쪽에 방향을 가리키는 두 개의 무늬 없는 이정표가 서 있는 사진풍 장면(ADX 지표 보는법), 글자 없음ADX 지표 보는법, 비트코인에서 ADX 25 기준이 통했을까ADX 지표는 추세의 방향이 아니라 강도를 재는 지표입니다. 비트코인 2018~2026년 이동평균 교차에 ADX 25 필터를 붙이니 최종 배수가 10.53배에서 9.09배로 낮아졌습니다.quant-alpha.kr안개 낀 산길 위로 굽이굽이 이어진 긴 길을 따라 금빛 비트코인 동전 몇 개가 놓여 있고 길 한가운데 넓은 평지가 있는 사진풍 장면, 글자·숫자 없음코인 자동매매 수익은 얼마나 났을까, 비트코인 이동평균 전략 8년 32번 진입 결과코인 자동매매 수익은 승률로 정해지지 않습니다. 20·60일 이동평균 전략은 승률 43.8%, 총수익 +1,306%였지만 계좌 최고점을 넘기기까지 817일이 걸렸습니다.quant-alpha.kr
시점 표 작성, 구간 나눠 검증, 인접 설정 확인의 세 단계 점검 도식

자주 묻는 질문

Q. 백테스트 결과 해석은 무엇부터 보나요?

A. 총수익보다 신호와 체결의 시점부터 확인합니다. 이번 실험에서 같은 규칙이 올바르게는 +1,306%, 룩어헤드 오류를 넣으면 +2,452%였기 때문에, 숫자가 좋을수록 시점 오류를 먼저 의심해야 합니다.

Q. 룩어헤드 편향이란 무엇인가요?

A. 그 시점에는 알 수 없는 미래 정보를 매매 판단에 쓰는 오류입니다. 오늘 종가로 계산한 신호를 오늘 수익률에 적용하는 것이 대표적인 예입니다.

Q. 백테스트 오류를 어떻게 찾나요?

A. 신호 계산·체결·수익률 반영 시점을 표로 적고 코드와 한 줄씩 대조합니다. 학습과 검증 구간을 나눠 성적이 크게 다르면 과거에 맞춘 설정일 가능성이 있습니다.

Q. 백테스트 신뢰도를 높이는 방법이 있나요?

A. 구간 나누기, 인접 설정 확인, 수수료와 슬리피지 반영이 기본입니다. 이번 25개 조합 중 학습 1위는 검증에서 8위였고, 두 구간의 수익률 상관계수는 0.05였습니다.

Q. 백테스트 결과가 좋으면 바로 자동매매에 써도 되나요?

A. 권하지 않습니다. 검증 구간, 비용 반영, 시점 확인을 모두 거친 뒤에도 실제 체결과는 차이가 생깁니다. 이번 계산도 슬리피지를 넣지 않았습니다.

마감이 확정된 봉으로만 판단하고 주문하는 퀀트알파의 검증 원칙이 궁금하다면 홈페이지에서 확인해 보세요.

https://quant-alpha.kr/?utm_source=web_blog&utm_medium=blog

매일 운용 현황은 퀀트알파 텔레그램 채널에서 확인해 보세요.

퀀트알파 텔레그램 채널퀀트알파 | 비트코인 시스템트레이딩시장 국면별 BTC 자동매매 분석, 매일 전략 작동 현황과 매주 수익·손실·MDD 리포트 공개t.me/+oSDjObO-5N05NWVl

출처

  • 바이낸스 BTCUSDT 일봉(UTC 마감) 2018-01-01~2026-10-26 마감 봉, 2026-10-28 06:30 KST 조회, 20·60일 이동평균 규칙과 설정값 25개 조합, 룩어헤드 오류 계산을 퀀트알파가 자체 계산
  • 계산 가정: 일봉 마감 신호를 그 종가에 체결(올바른 계산), 편도 수수료 0.1%, 슬리피지·세금 미반영, 학습 2018~2022·검증 2023~2026년 10월 26일, 룩어헤드 계산은 실제로 불가능한 오류 사례로 실험 목적
← 블로그 목록