Walk-forward 검증
단일 기간 백테스트는 과적합(overfitting)에 취약합니다. Walk-forward는 시간을 여러 윈도우로 잘라 in-sample / out-of-sample를 반복하며 견고함을 검증합니다.
📸 Walk-forward 윈도우 (추후 자동 캡처 예정)
개념
[─── train ───][test]
[─── train ───][test]
[─── train ───][test]
- train (in-sample): 파라미터 최적화에 사용
- test (out-of-sample): 실거래 시뮬레이션
- roll forward: 시간 윈도우를 다음 위치로 이동
각 OOS 구간의 메트릭이 IS와 비슷하면 견고한 전략, 큰 격차가 나면 과적합입니다.
UI 사용법 (예정)
현재 BacktestForm UI에는 walk-forward 토글이 노출되지 않습니다. 후속 작업으로 다음 입력이 추가될 예정입니다.
| 필드 | 예 |
|---|---|
| Window count | 4 |
| Train ratio | 0.7 |
| Anchored / Rolling | rolling |
API 사용 (현행)
엔진 단에는 walk-forward 모드가 이미 존재하므로, REST API로 직접 호출할 수 있습니다.
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
http://localhost:8000/api/backtest/walk-forward \
-d '{
"strategy": "momentum",
"symbol": "BTC/USDT",
"timeframe": "1h",
"start_date": "2022-01-01",
"end_date": "2025-01-01",
"initial_capital": 10000,
"window_count": 4,
"train_ratio": 0.7
}'
응답:
{
"windows": [
{ "train_start": "2022-01-01", "train_end": "2022-09-15", "is_sharpe": 1.45, "oos_sharpe": 0.92, "oos_return": 0.08 }
],
"summary": {
"is_sharpe_avg": 1.5,
"oos_sharpe_avg": 0.95,
"oos_consistency": 0.65
}
}
해석 가이드
| 지표 | 합격선 |
|---|---|
oos_sharpe_avg / is_sharpe_avg | ≥ 0.7 |
oos_consistency (양수 OOS 윈도우 비율) | ≥ 0.6 |
| 윈도우간 표준편차 | 낮을수록 양호 |
격차가 너무 크면 (OOS가 IS의 절반 이하) 과적합으로 판단합니다.
자주 묻는 질문
Q. UI에서 walk-forward를 실행하고 싶습니다.
A. 현재는 API 직접 호출 또는 python -m src.backtest.walk_forward CLI를 사용하세요.
Q. 윈도우 수는 몇 개가 적절합니까?
A. 데이터 기간 / 윈도우 수 ≥ 6개월이 되도록 4–8개 권장.
Q. Anchored와 Rolling 차이는?
A. Anchored는 train_start 고정(누적 학습), Rolling은 윈도우가 통째로 이동(최신 데이터만 학습).