walk_forward_backtest_strategy
Detect overfitting by backtesting strategies on unseen data using walk-forward folds. Get a robustness score and verdict to determine if the strategy is safe for live trading.
Instructions
Walk-forward backtest to detect overfitting — validates strategy on unseen data.
Splits historical data into n_splits folds. Each fold:
Train (70% by default): strategy runs in-sample
Test (30% by default): strategy runs on unseen forward data
Robustness score (out-of-sample / in-sample performance ratio):
= 0.8 → ROBUST — no overfitting, safe to consider for live trading = 0.5 → MODERATE — some degradation out-of-sample, use with caution = 0.2 → WEAK — significant degradation, likely curve-fitted < 0.2 → OVERFITTED — fails on unseen data, do not trade live
Args: symbol: Yahoo Finance symbol (AAPL, BTC-USD, SPY…) strategy: rsi | bollinger | macd | ema_cross | supertrend | donchian period: Historical data period: '1mo', '3mo', '6mo', '1y', '2y' (recommend '2y' for meaningful walk-forward splits) initial_capital: Starting capital per fold in USD (default: $10,000) commission_pct: Per-trade commission % (default: 0.1%) slippage_pct: Per-trade slippage % (default: 0.05%) n_splits: Number of walk-forward folds (default: 3, max: 10) train_ratio: Fraction of each fold used for training (default: 0.7) interval: Timeframe: '1d' (daily, default) or '1h' (hourly)
Returns: Per-fold train/test metrics, aggregate robustness score, verdict, and combined out-of-sample performance.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | 2y | |
| symbol | Yes | ||
| interval | No | 1d | |
| n_splits | No | ||
| strategy | Yes | ||
| train_ratio | No | ||
| slippage_pct | No | ||
| commission_pct | No | ||
| initial_capital | No |