백테스트 사전등록 — 판정 기준을 결과보다 먼저 적는 법
백테스트를 돌려 보고 결과가 마음에 안 들면 기간을 바꾸고, 손절을 조금 넓히고, 코인 몇 개를 빼 봅니다. 그러다 좋은 숫자가 나오면 그 설정을 "전략"이라고 부르게 됩니다. 이 과정의 문제는 판정 기준이 결과를 본 뒤에 정해진다는 점입니다. 사전등록(pre-registration)은 순서를 뒤집습니다. 데이터를 열기 전에 가설, 규칙, 비용, 기간, 통과 기준을 문서로 적어 고정하고, 결과는 그 기준으로만 판정합니다. 이 글은 사전등록이 필요한 이유를 계산으로 보이고, 등록 문서에 들어갈 항목과 운영 절차를 정리합니다. 본문의 수익률·표준편차·거래 수는 모두 설명용 가정입니다.
사전등록이 막는 것 — 갈림길의 수
백테스트 하나에도 결정할 것이 많습니다. 어떤 기간을 쓸지, 어떤 코인을 넣을지, 손절을 몇 %로 둘지, 수수료를 얼마로 잡을지. 결과를 보면서 이것들을 하나씩 고르면, 실제로는 한 번 시험한 것이 아니라 수십 번 시험한 것과 같습니다. 이 문제는 다중검정의 함정과 같은 뿌리입니다. 차이는 시도가 눈에 보이지 않는다는 점입니다. 설정을 표로 2,500개 돌리면 2,500번 시도했다는 걸 알지만, 결과를 보며 손으로 조금씩 고친 경우엔 몇 번 시도했는지 스스로도 세지 않습니다.
· 기간: 최근 6개월 / 1년 / 2년
· 대상: 상위 20종 / 50종 / 100종
· 손절: 2% / 3% / 5%
· 청산: 4시간 / 8시간 / 24시간
· 가능한 조합 = 3 × 3 × 3 × 3 = 81가지
실력이 전혀 없는 규칙이 우연히 통과할 확률
· 한 조합이 우연히 기준을 넘을 확률 5% 가정
· 81개 중 하나도 안 넘을 확률 = 0.9581 ≈ 0.016
· 하나라도 넘을 확률 = 1 − 0.016 ≈ 98.4%
조합끼리는 서로 비슷해서 실제 확률은 이보다 낮지만, 방향은 같습니다. 결과를 보며 고르면 거의 언제나 "통과한 설정" 하나는 나옵니다. 사전등록은 81개 중 하나를 데이터를 보기 전에 고르게 해서 이 확률을 처음의 5%로 되돌립니다.
등록 문서에 들어갈 항목
사전등록 문서는 길 필요가 없습니다. 다만 아래 항목이 빠지면 나중에 해석의 여지가 생깁니다.
② 진입 규칙 — 신호 정의, 기준가(결정 캔들 종가), 중복 신호 처리, 동시 보유 상한
③ 청산 규칙 — 손절·목표·시간 청산, 같은 캔들에서 둘 다 닿으면 어느 쪽으로 볼지
④ 비용 — 왕복 수수료, 슬리피지 가정, 펀딩비
⑤ 데이터 — 기간, 종목 목록 만드는 방법, 상장폐지 종목 포함 여부
⑥ 통과 기준 — 숫자로. 예: 건당 순수익 ≥ +0.05%, 95% 신뢰구간 하한 > 0, 거래 수 ≥ 1,500, 6개월 중 4개월 이상 (+)
⑦ 실패 시 처리 — "통과 못 하면 이 설정은 폐기, 같은 데이터로 재시험하지 않는다"
⑤의 종목 목록은 특히 자주 빠집니다. 지금 거래소에 상장된 코인만으로 과거를 돌리면 그 사이 사라진 코인이 빠져 성적이 부풀려집니다. 이 문제는 생존자 편향 글에 정리돼 있습니다. ②의 기준가도 마찬가지로, 진입 시점에 알 수 없는 값을 쓰면 미래참조 편향이 됩니다.
통과 기준을 숫자로 정하는 법 — 필요한 거래 수
"수익이 나면 통과"는 기준이 아닙니다. 평균 수익이 작고 흔들림이 크면 운으로도 (+)가 나오기 때문입니다. 신뢰구간 하한을 기준에 넣으면 필요한 거래 수를 미리 계산할 수 있습니다.
거래 400건일 때
· 표준오차 = 1.6 ÷ √400 = 1.6 ÷ 20 = 0.08%
· 95% 신뢰구간 = 0.08 ± 1.96 × 0.08 = [−0.077%, +0.237%]
· 하한이 0 아래 → 기준 미달
하한이 0 을 넘으려면
· 1.96 × 1.6 ÷ √n < 0.08 → √n > 39.2 → n > 약 1,537건
· 1,600건이면 표준오차 0.04% → 구간 [+0.002%, +0.158%]
같은 평균이라도 400건으로는 판정할 수 없고 1,600건쯤 있어야 겨우 경계를 넘습니다. 이 계산을 등록 전에 하면 "데이터가 부족해서 애초에 판정이 안 되는 시험"을 미리 걸러낼 수 있습니다. 거래끼리 같은 날 몰려 있으면 표준오차가 더 커지므로, 하루 단위로 묶어 다시 뽑는 블록 부트스트랩 신뢰구간을 쓰는 편이 안전합니다. 표본 크기 일반론은 거래 표본 크기 글에 있습니다.
비용을 먼저 적어야 하는 이유
비용 가정은 결과를 본 뒤 가장 쉽게 바뀌는 항목입니다. 왕복 0.10%로 돌려서 적자가 나면 "지정가로 들어가면 0.04%"라고 바꾸고 싶어집니다.
· 왕복 0.10% → 건당 +0.05% → 1,600건 합 +80%p
· 왕복 0.20% (슬리피지 0.10% 추가) → 건당 −0.05% → 1,600건 합 −80%p
· 비용 가정 0.10%p 차이로 결론의 부호가 뒤집힌다
보유 시간이 짧을수록 비용이 차지하는 비중이 커집니다. 이 관계는 보유 시간과 비용 허들과 왕복 거래 비용 글에서 계산했습니다. 등록 문서에는 비용을 한 가지로 적고, 민감도를 보고 싶다면 "주 기준 0.10%, 참고용 0.20%"처럼 판정에 쓰는 값을 하나로 못박아 둡니다.
데이터 나누기와 봉인
사전등록은 데이터 분할과 같이 씁니다. 가장 단순한 형태는 이렇습니다.
· 탐색 구간 (1년차): 자유롭게 시험. 여기서 후보를 고른다
· 등록: 후보 1개와 통과 기준을 문서로 고정
· 확인 구간 (2~3년차): 등록 후 한 번만 열어 판정
확인 구간을 한 번 열고 나면 그 구간은 더 이상 "본 적 없는 데이터"가 아닙니다. 실패한 뒤 규칙을 고쳐 같은 구간에서 다시 시험하면, 확인 구간이 탐색 구간으로 바뀐 것과 같습니다. 구간을 여러 개로 굴리는 방식은 워크포워드 분석과 홀드아웃 검정 글을 참고하세요.
문서를 고정하는 방법 — 해시
등록 문서를 나중에 몰래 고치지 않았다는 것을 스스로 확인하려면 문서의 해시값을 남겨 두면 됩니다. 해시는 파일 내용으로 계산한 고유 문자열이라, 글자 하나만 바뀌어도 값이 완전히 달라집니다.
· 등록 문서 PROTOCOL.md 작성
· SHA-256 해시 계산 (예:
sha256sum PROTOCOL.md) → 64자리 문자열· 해시와 날짜를 별도 기록 파일이나 메시지에 남김
· 판정할 때 문서 해시를 다시 계산해 같으면 그 문서 기준으로 판정
혼자 하는 연구라면 날짜가 찍힌 메시지나 저장소 커밋에 해시를 남기는 정도로 충분합니다. 목적은 남을 설득하는 것보다 자기 자신이 기준을 옮기지 못하게 하는 것입니다.
결과가 실패일 때
사전등록에서 가장 어려운 부분은 실패를 그대로 받아들이는 것입니다. 기준을 못 넘은 결과에 대해 흔히 나오는 반응과 처리 방법은 이렇습니다.
① "한 항목만 아깝게 못 넘었다" — 기준은 기준입니다. 이번 등록은 실패로 닫고, 기준을 바꾸고 싶다면 새 데이터로 새 등록을 합니다. ② "특정 달만 빼면 통과한다" — 그 달을 빼는 결정이 결과를 보고 나온 것이므로 새 갈림길입니다. ③ "설정을 조금 바꾸면 된다" — 바꾼 설정 주변이 다 비슷하게 좋은지 먼저 봅니다. 한 점에서만 좋으면 파라미터 고원이 아니라 봉우리이고, 그런 설정은 대체로 과최적화입니다. ④ 실패 기록 남기기 — 실패한 등록도 지우지 않고 남깁니다. 나중에 같은 아이디어를 다시 시험하려 할 때, 이미 한 번 닫혔다는 기록이 같은 시험을 반복하지 않게 해 줍니다.
통과한 경우에도 끝이 아닙니다. 실제 운영에 들어간 뒤 성적이 등록 때 예측한 범위 안에 있는지 계속 비교해야 합니다. 이 방법은 전략 성능 저하 감지 글에 있습니다.
정리
② 갈림길 4개 × 선택지 3개 = 81가지 → 결과 보고 고르면 우연 통과 확률 약 98%
③ 통과 기준은 숫자로 — 신뢰구간 하한을 넣으면 필요한 거래 수가 계산된다
④ 예시에서 평균 +0.08% · 표준편차 1.6% 면 약 1,540건 이상 필요
⑤ 비용은 등록 때 하나로 못박는다 — 0.10%p 차이로 부호가 뒤집힐 수 있다
⑥ 확인 구간은 한 번만 연다, 문서는 해시로 고정
⑦ 실패는 실패로 닫고 기록을 남긴다
주의
본문의 수익률, 표준편차, 거래 수, 수수료율, 확률은 모두 개념을 설명하기 위한 가정 예시이며 실제 시장 데이터나 실측 성과가 아닙니다. 이 글은 교육 정보이며 특정 종목·전략의 매수·매도 권유나 특정 수익을 보장하는 내용이 아닙니다. 선물·레버리지 거래는 원금 손실 위험이 있고, 매매 판단과 그 결과는 본인 책임입니다.
NOONOO TRADING 무료 채팅방에서 실시간 트레이딩을 같이 보세요.
봇에서 시작하기📈 OKX 신규 가입 시 거래 수수료 할인
OKX 수수료 할인 가입 →