백테스트 검증 · 정량 리서치
CopyTradeAudit
자기 결과를 깨뜨리기 위해 만든 백테스트 엔진, 그리고 거기서 나온 정직한 부정적 결론.
- Python
- FastAPI
- pytest
- SQLite
- uv
문제
같은 발상을 파는 제품은 많습니다. 예측 시장은 모든 거래를 공개하고, 일부 트레이더는 꾸준히 수익을 내니 따라 하면 번다는 것이죠. 백테스트로 검증하기 쉬운 발상이고, 잘못 검증하기도 그만큼 쉽습니다. 미래 정보가 한 번 새어 들어가거나, 상관된 시장 오십 개를 독립된 관측 오십 개로 세기만 해도 결과는 훌륭해 보이면서 아무 의미가 없어집니다.
대상
판단이 백테스트 위에 놓인 모든 사람에게. 실전 투입을 앞둔 전략, 외부 업체의 실적, 반박하기 어려울 만큼 좋아 보이는 숫자.
하는 일
Python으로 만든 결정론적 리서치 코어(약 3,500줄, 테스트 103개)를 370개 시장, 실거래 134,000건, 독립 이벤트 46건에 대해 검증했습니다. 결론은 측정 가능한 우위 없음이었습니다. 복사로 선별된 거래는 0.95 가격대 위에서 주당 +0.0200을 냈고, 트레이더를 전혀 끼지 않고 같은 가격대를 기계적으로 매수했을 때는 +0.0211이었습니다.
핵심 결정
- 설계 자체로 미래 정보 차단: 각 신호 시점에서 트레이더의 실력은 그 시점까지 이미 정산된 시장만으로 계산하며, 그 이후에 일어난 일은 쓰지 않습니다.
- 이벤트 단위로 군집화한 부트스트랩 구간. 한 이벤트 안의 상관된 시장 오십 개는 오십이 아니라 하나의 관측으로 셉니다.
- 실제 호가창을 상대로 수수료·슬리피지·부분 체결까지 포함해 체결을 시뮬레이션했습니다. 모든 주문이 중간가에 체결됐다는 가정은 두지 않습니다.
- 듣기 좋은 결과 대신 부정적 결과를 공개했고, 모델이 아니라 측정이 깨져 있던 전략 하나는 INCONCLUSIVE로 표시했습니다.
배운 점
제 방법론 안에서 버그 네 개를 찾았고, 각각이 이미 확신에 찬 거짓 양성을 만들어 내고 있었습니다. 그중에는 36거래에서 승률 100%를 보이면서 기계적 진입 대비 실제 우위는 0.8%에 불과한 전략도 있었습니다. 승률로 트레이더를 줄 세우면 실력이 아니라 98센트에 거의 확실한 것을 사는 사람이 찾아집니다. 확신에 찬 오답은 답이 없는 것보다 비쌉니다.
다음 방향
유출·군집 검사를 다른 사람의 백테스트에 겨눌 수 있는 검증대로 만드는 것. 제가 쓰지 않은 전략에도 같은 엄격함을 적용하기 위해서입니다.
지면상으로만 — 실거래도, 실제 자금도 없습니다. 의도된 설계입니다.