Session breakout — rolling walk-forward
Fit on 12 months, test on the next 3 unseen months, roll forward each quarter. CMA-ES searches three parameters inside every training window.
wf = experiments.walkforward( strategy="session_breakout@v4", symbol="EURUSD", timeframe="H1", window=("2023-01", "2025-06"), train="12M", test="3M", step="3M",) wf.search( method="cma-es", params={"lookback": (8, 48), "stop_atr": (0.8, 3.0), "target_r": (1.0, 4.0)}, population=12, generations=20, objective="sharpe",) wf.oos_summary()| Window | Train | Test | IS Sharpe | OOS Sharpe |
|---|---|---|---|---|
| W1 | Jan – Dec 2023 | Q1 2024 | 1.84 | 1.21 |
| W2 | Apr 2023 – Mar 2024 | Q2 2024 | 1.77 | 0.94 |
| W3 | Jul 2023 – Jun 2024 | Q3 2024 | 1.92 | 1.38 |
| W4 | Oct 2023 – Sep 2024 | Q4 2024 | 1.69 | −0.22 |
| W5 | Jan – Dec 2024 | Q1 2025 | 1.81 | 1.07 |
| W6 | Apr 2024 – Mar 2025 | Q2 2025 | 1.74 | 0.88 |
Mean OOS Sharpe 0.88Walk-forward efficiency 0.49