백테스트는 거짓말을 합니다. 정확히는, 우리가 백테스트에게 거짓말을 시킵니다. 화면에 뜬 누적 +300%, Sharpe 2.8을 보면 가슴이 뛰지만 — 그 숫자의 대부분은 전략의 실력이 아니라 측정의 오류입니다.
우리는 크립토 자동매매 가설 수십 개를 검증하면서 이 함정들에 전부 빠져봤습니다. 그 비싼 경험을 셋으로 정리합니다. 백테스트를 한 번이라도 돌려본 사람이라면, 최소 하나는 찔릴 겁니다.
실수 1 — 룩어헤드(미래참조): "내일 종가로 오늘 사기"
가장 흔하고, 가장 치명적입니다. 미래에만 알 수 있는 정보를 과거 시점의 판단에 슬쩍 끼워 넣는 버그입니다.
전형적인 형태들: - 그날 종가로 계산한 지표로, 그날 장중에 진입했다고 가정 (종가는 장이 끝나야 압니다) - 전체 기간의 평균·표준편차로 정규화 (미래 데이터가 과거 계산에 섞임) - 신호를 만든 봉의 그 봉에서 체결 (실제로는 다음 봉에야 들어갈 수 있음)
우리도 한 번은 누적 +321%, Sharpe 2.85짜리 포트폴리오를 만들고 환호했습니다. 뜯어보니 미래 데이터가 새어 들어간 룩어헤드였습니다. 고쳤더니 수익은 증발했습니다.
철칙: 너무 좋은 결과는 발견이 아니라 버그다. t시점의 판단은 t시점까지의 데이터만으로 — 이 한 줄을 코드로 강제해야 합니다.
실수 2 — 과적합: "지표를 계속 더하면 언젠간 예뻐진다"
전략이 신통찮을 때 사람들은 지표를 더합니다. RSI를 넣고, 거래량 필터를 걸고, 펀딩비를 얹고... 파라미터를 이리저리 돌리다 보면 어느 순간 백테스트가 아름다워집니다.
문제는, 그 아름다움이 과거 데이터의 노이즈에 몸을 맞춘 결과라는 것입니다. 실전(미래)에선 그 노이즈가 반복되지 않으니 무너집니다.
우리 경험: 돌파 전략에 RSI 필터, 펀딩 필터를 차례로 더해봤지만 — 표본 외(OOS) 성과는 전혀 개선되지 않았습니다. 오히려 필터가 표본만 깎아먹었습니다. 지표를 더한다고 엣지가 생기지 않습니다.
더 교활한 함정은 레짐 운입니다. 데이터를 전·후반으로 나눴을 때 후반만 좋은 전략이 있습니다. 마치 엣지처럼 보이지만, 사실은 그 시기가 마침 그 전략에 유리했을 뿐입니다. 전반에선 같은 전략이 계좌를 녹였습니다.
해독제: 데이터를 시간순으로 나눠(In-Sample / Out-of-Sample), 양쪽 모두에서 살아남는지 확인하라. 한쪽만 좋으면 그건 엣지가 아니라 우연입니다.
실수 3 — 비용 무시: "수수료 빼면 남는 게 없다"
종이 위의 전략은 공짜로 거래합니다. 현실은 아닙니다. 매수·매도마다 수수료가 나가고, 원하는 가격에 정확히 체결되지 않는 슬리피지가 붙습니다.
얇은 엣지일수록 이 비용에 통째로 잡아먹힙니다. 우리가 검증한 여러 "미세 신호"들 — 특정 시간대 효과, 매크로 타이밍 — 은 백테스트상 플러스였지만, 현실적인 수수료·슬리피지를 반영하자 0 이하로 내려앉았습니다. 거래를 자주 할수록 더 빨리 죽습니다.
철칙: 수수료와 슬리피지를 처음부터 보수적으로 반영하라. 비용을 빼고도 남는 엣지만이 진짜다.
정리 — 백테스트를 믿게 만드는 3가지 습관
- 룩어헤드 차단: t시점 판단은 t시점까지의 데이터만.
- 표본 외 검증: 시간 분할(OOS)에서 양쪽 모두 살아남는가.
- 비용 반영: 수수료·슬리피지 빼고도 남는가.
이 셋을 통과하지 못한 백테스트는, 아무리 화려해도 그림일 뿐입니다. 우리가 이 블로그에서 수익률을 자랑하지 않고 검증 과정을 공개하는 이유가 여기 있습니다. 화려함보다 정직함이, 길게 보면 유일하게 남는 자산이니까요.
⚠️ 본 글은 교육·연구 목적이며 특정 종목·매매를 권유하지 않습니다. 투자자문이 아니며, 모든 투자 책임은 본인에게 있습니다. 수치는 공개 시세 기반 백테스트로 미래 수익을 약속하지 않습니다.