Backtesting Without Fooling Yourself
A step-by-step path from what your backtest really optimizes to proving an edge survives overfitting, multiple testing, and live execution. Read top to bottom — each part builds on the last.
- 01
Jun 28, 2026 #algotrading목적함수 설계: 최적화하는 지표가 전략을 은밀하게 고른다
"최선"의 전략을 찾으려면 먼저 "최선"이 무엇인지부터 정의해야 합니다 — 그리고 그 스칼라가 은밀하게 승자를 결정합니다. 알려진 엣지를 가진 합성 데이터(600개 시드, T=2000, 80개 임계값)에서, 나이브한 거래당 샤프는 복권을 승자로 옹립합니다: 56%의 시드에서 노출도 5% 미만인 승자를 고르고 57%에서는 퇴화합니다 — 가장 극단적인 시드에서는 8건의 거래가 인샘플 샤프 21.09를 기록했다가 아웃오브샘플에서 0.13으로 무너집니다. 정직한 수리법은 거의 시시할 정도입니다: 전체 타임라인에서 측정하면 결코 퇴화하지 않습니다(아웃오브샘플 1.71). 거래 수(conf_k) 축소와 노출 하한선으로 거래당 지표를 사후 보강할 수 있지만, 완전히 수리해도 전체 타임라인 샤프와 같아질 뿐입니다(1.70 대 1.71) — 결코 그것을 넘어서지 못합니다. 굿하트의 법칙, 백테스트 안에서, 통제된 실측값과 함께.
- 02
Jul 8, 2026 #알고트레이딩멀티 타임프레임 백테스트에서 선행 참조(look-ahead) 없음을 증명하기: 미래를 흔들어 과거가 그것을 볼 수 없음을 증명한다
멀티 타임프레임 백테스트는 아직 최종 종가가 존재하지 않는, 형성 중인 상위 타임프레임 봉을 통해 미래를 누출한다. 코드 리뷰만으로는 확신을 얻을 수 없다 — 직접 테스트해야 한다. 우리는 라이브 봇의 마감 봉(closed-bar) 규칙을 정확히 재현한 뒤, 미래 이동(shifted-future) 프로브로 누출이 없음을 증명한다: 미래의 모든 봉을 교란시키고 과거의 모든 시그널과 트레이드가 비트 단위로 변하지 않음을 확인한다. 25개 항목 중 25개 정합성 검사를 통과했으며, 이 프로브는 실질적인 검증력을 갖추고 있다.
- 03
Mar 15, 2026 #algotrading워크포워드 최적화: 유일하게 정직한 전략 테스트
단일 훈련/테스트 분할이 과적합을 방지하지 못하는 이유, 워크포워드 최적화가 파라미터 견고성을 체계적으로 검증하는 방법, 그리고 21개 파라미터에서 PnL@ML +3342%인 전략이 WFO 없이는 시한폭탄인 이유.
- 04
Mar 12, 2026 #algotrading플래토 분석: 견고한 최적해와 과적합을 구별하는 방법
최적의 전략 파라미터를 찾는 것이 작업의 절반에 불과한 이유. 안정적인 플래토와 취약한 피크를 시각적·정량적으로 구별하는 방법, 그리고 Optuna 등고선 플롯이 최적화된 전략을 프로덕션에 투입하기 전 필수 단계인 이유.
- 05
Mar 6, 2026 #algotrading몬테카를로 부트스트랩: 10줄의 코드로 백테스트 신뢰구간을 얻는 방법
백테스트의 단일 점추정이 왜 위험한 착각인지. 몬테카를로 부트스트랩이 2초의 계산으로 PnL과 MaxDD의 95% 신뢰구간을 제공하는 방법, 그리고 이것이 전략을 프로덕션에 배포하기 전에 필수적인 단계인 이유.
- 06
Jul 1, 2026 #algotrading백테스트 과적합 확률: 당신의 서치는 동전 던지기를 이겼는가?
디플레이티드 샤프 비율은 승리한 전략의 값을 매기고, PBO는 그것을 골라낸 서치의 값을 매깁니다. 조합적 대칭 교차검증은 1000x200 성과 행렬에 대해 C(16,8) = 12,870번의 훈련/테스트 분할을 실행하고 묻습니다: 인샘플 승자가 아웃오브샘플에서 하위 절반에 떨어지는가? 거의 모두가 놓치는 함정 — PBO의 null은 1이 아니라 0.5입니다. 제로 엣지 전략 200개에서 최고 인샘플 연율화 샤프 1.98은 아웃오브샘플에서 0.06으로 무너지고 PBO = 0.476: 동전 던지기, 완전한 과적합입니다. 진짜 엣지(연율화 샤프 2.38)를 심으면 PBO는 0.001로 떨어지고, 인샘플 3.73은 아웃오브샘플 2.34로 살아남습니다. 순수한 랜덤 워크 위의 이동평균 그리드 역시 아웃오브샘플 스킬이 전혀 없습니다 — 60개 행렬에 걸쳐 평균낸 PBO 0.463은 통계적으로 null과 구별되지 않습니다 — 그리고 하나의 대표 행렬에서는 그 신기루가 생생합니다: 최고 인샘플 샤프 2.33이 아웃오브샘플 중앙값 -0.22로 무너지고, PBO 0.573, 손실 확률 63%.
- 07
Jun 29, 2026 #algotrading디플레이티드 샤프 비율: 백테스트 '승자' 중 다중 검정에서 살아남는 것은 몇 개인가?
파라미터 서치는 운을 제조하는 기계입니다. 순수한 노이즈에서 — 진짜 엣지가 전혀 없는 전략 1,000개 — 최고 연간 샤프는 평균 1.63이고, 나이브 유의성 검정은 100%의 확률로 발견을 선언합니다. 통제된 실측값을 구축하여 디플레이티드 샤프 비율, Harvey-Liu 헤어컷, White의 Reality Check가 정직함을 회복시킨다는 것을 보입니다: 거짓 발견은 1.000에서 0.001-0.057로 떨어지고, 노이즈 천장 위의 진짜 엣지는 검정력 ~1로 유지됩니다 — 그리고 상관된 그리드라는 하나의 진짜 함정에서는 raw DSR이 과잉 디플레이션을 일으키며, 판정은 하나가 아니라 유효 시행 수 추정치 전체 밴드에 걸쳐 읽어야 합니다.
- 08
Mar 7, 2026 #algotrading백테스트-라이브 일치성: 왜 당신의 봇은 백테스트와 다르게 거래하는가
백테스팅과 라이브 트레이딩 간의 괴리에 대한 완전한 분류 체계: 슬리피지와 부분 체결부터 코드베이스 비동기화까지. 일치성을 달성하기 위한 아키텍처 패턴, 공유 코어 모듈의 Python 예제, 프로덕션 모니터링 체크리스트.
- 09
Jul 9, 2026 #algotrading정직한 부정적 결과: 수만 번의 백테스트, 메이저 다섯 개, 견고한 엣지는 없다
서치와 과적합 아크의 정점이며, 부정적 결과로 끝납니다 — 그것이 올바른 결과입니다. ETHUSDT에 대한 단일 심볼 듀얼 타임프레임 서치는 아웃오브샘플 테스트 +16.35%, 손대지 않은 홀드아웃 +2.62%짜리 구성을 찾아냈습니다; ~37,000번의 시행을 반영한 디플레이티드 샤프 비율은 이를 0.00으로 디플레이트했습니다. 아웃오브샘플 중앙값으로 선택하는 메이저 다섯 개(ETH/BTC/SOL/BNB/XRP, 각 ~1.18M개의 1분봉)에 대한 종목 간 패스가 이를 완전히 끝장냅니다: 듀얼 DSR 0.24 / PBO 0.264, 트리플 DSR 0.14 / PBO 0.327 — 둘 다 게이트에서 탈락합니다. 챔피언은 5개 심볼 중 1개에서만 수익을 내고 나머지에서는 손실입니다. 이것이 반과적합 장치의 존재 이유입니다: 노이즈의 최선을 알파로 배포하는 것을 막기 위해서입니다.