ADR-002 백테스트 엔진 구현 방식 선택
상태
제안
맥락
현 backtest.py#run_backtest는 40캔들 워크포워드로 거래비용·슬리피지를 반영하지 않는다. 표본 40개는 통계적으로 무의미해 엣지 존재 여부를 판정할 수 없다. 정직한 백테스트 엔진이 필요하다.
결정
1차로 자체 경량 엔진을 확장한다. 거래비용(수수료+세금)·슬리피지·체결 지연을 반영하고, 룩어헤드를 구조적으로 차단한다. 종목 수·전략 복잡도가 한계에 닿으면 backtrader/vectorbt로 전환한다.
근거
- 의존성 최소화 — 로직이 투명해 룩어헤드·비용 모델을 직접 검증 가능.
- 현
backtest.py를 점진 확장 — 기존 워크포워드 골격 재사용. - OSS 엔진은 학습 곡선·블랙박스 리스크가 있어, 엣지 존재 판정 단계에서는 자체 구현이 신뢰성 검증에 유리.
고려한 대안
| 대안 | 미채택 사유 |
|---|---|
| backtrader/vectorbt 즉시 도입 | 초기 단계에서 블랙박스. 룩어헤드·비용 검증을 직접 못 함 |
| QuantConnect LEAN | 인프라·플랫폼 종속 과함 |
핵심 불변식 (테스트로 강제)
- 룩어헤드 차단 — 시점 t 신호는 closes[..t]만 사용. t+1 종가 주입 시 테스트 실패해야 함.
- 거래비용 필수 — 모든 체결에 수수료·세금·슬리피지 반영.
- 가짜 엣지 탐지 — 무작위 신호 입력 시 엣지가 유의하지 않게 나와야 함.
재검토 트리거
- 종목 수 수백 이상·전략 다수 동시 검증 시 벡터화 엔진(vectorbt) 전환.