Skip to main content

Module walk_forward

Module walk_forward 

Source
Expand description

Walk-forward parameter optimisation for backtesting strategies.

Walk-forward testing prevents overfitting by splitting historical data into rolling in-sample (training) and out-of-sample (test) windows. For each window, the best parameters are discovered on the in-sample slice via grid search, then validated on the subsequent out-of-sample slice.

§How it works

|--- in-sample (IS) ---|--- out-of-sample (OOS) ---|
           |-- step --|--- IS ---|--- OOS ---|
                                 |-- step --|--- IS ---|--- OOS ---|

Aggregate metrics from all OOS windows provide an unbiased estimate of real-world strategy performance.

§Example

use finance_query::backtesting::{
    BacktestConfig, SmaCrossover,
    optimizer::{GridSearch, OptimizeMetric, ParamRange},
    walk_forward::WalkForwardConfig,
};

let grid = GridSearch::new()
    .param("fast", ParamRange::int_range(5, 30, 5))
    .param("slow", ParamRange::int_range(20, 100, 10))
    .optimize_for(OptimizeMetric::SharpeRatio);

let wf = WalkForwardConfig::new(grid, BacktestConfig::default())
    .in_sample_bars(252)
    .out_of_sample_bars(63);

let report = wf
    .run("AAPL", candles, |params| SmaCrossover::new(
        params["fast"].as_int() as usize,
        params["slow"].as_int() as usize,
    ))
    .unwrap();

println!("OOS consistency: {:.1}%", report.consistency_ratio * 100.0);

Structs§

WalkForwardConfig
Configuration for a walk-forward parameter optimisation test.
WalkForwardReport
Aggregate walk-forward report across all windows.
WindowResult
Backtest results for a single walk-forward window pair.