Walk-forward testing is a sequence of dated experiments: fit or specify a rule using information available at that point, evaluate it on the next unseen window, then advance the boundary. Unlike one final holdout, it produces several chronological evaluations. The rule can stay fixed throughout or be updated on a written schedule; those answer different questions, so say which one you ran.

repeated chronological walk-forward windowsThree illustrative sequential evaluation windows follow earlier training windows. Training expands after each test, so earlier completed tests may enter later training only under the declared schedule. These blocks show method structure, not measured market returns.REPEAT THE SAME DATED PROCEDURE · SHOW EVERY TEST WINDOWEARLIER OBSERVATIONSLATER OBSERVATIONSRound 1Fit / specifyTest 1Round 2Fit / specify · include Test 1 only if predeclaredTest 2Round 3Fit / specify under the written update ruleTest 3Chronological time → · choose expanding or rolling training before results are knownA sequence of windows · do not select only the best test block
Three illustrative sequential evaluation windows follow earlier training windows. Training expands after each test, so earlier completed tests may enter later training only under the declared schedule. These blocks show method structure, not measured market returns. Illustrative teaching graphic · not live market data

Decide the question and window schedule first

Specify the instrument, data source, timeframe, costs, benchmark and evaluation metric. Choose the start date, fit-window length, test-window length and how the windows move before studying outputs. If the strategy is re-estimated on a schedule, set that schedule in advance. Record how each choice relates to the question; window sizes are themselves parameters that someone can overfit.

For illustration, an experiment might use two years of earlier observations to specify a rule, evaluate the next quarter, then advance one quarter and repeat. Those durations are examples only. Decide whether each completed evaluation joins the information available to a later fit, whether the training window expands or rolls, and exactly how parameters may change. A short training window may omit useful conditions; a long one may combine different ones. There is no universally best schedule.

Preserve separation between each window

At each step, record which bars are available for design and which later bars are reserved for evaluation. Ensure all rolling indicators have enough earlier data to warm up without letting future test bars influence that warm-up. Prevent open trades, funding settlements or overlapping labels from leaking across the boundary in a way that changes the declared question. For a strategy with positions that span windows, specify whether they are carried, liquidated at the boundary, or excluded from one calculation.

When the evaluation window is complete, log the results before revising anything. If they prompt a new threshold, exit or window schedule, the new version may be tested on a later segment, but the already-seen evaluation is now part of the research process. Do not keep renaming a repeatedly examined segment “out of sample.”

Match the gap to the outcome horizon

For a supervised model, a row’s target can depend on prices that arrive after its signal. If the target looks ahead two bars, the final training labels beside a test boundary may use prices from inside that test. Exclude those overlapping labels before fitting; a time-ordered timestamp column alone does not prevent this leakage.

The current scikit-learn 1.9.1 TimeSeriesSplit documentation describes expanding training sets by default, a max_train_size option for capping their size, and a gap measured in samples between training and test. It also requires equally spaced samples when comparing equal-duration test folds. In its illustrative 12-sample setup with three two-sample test windows and gap=2, the first split trains on samples 1–4, leaves 5–6 out, and tests 7–8; later training folds expand before the same two-sample gap. That is an index example from a general machine-learning splitter, not a crypto strategy result. Pick any gap from the target and holding horizons you actually use; a row-count gap may not match elapsed time when bars are missing or observations are event-based. scikit-learn documents these split options.

12-sample expanding training window with a gapTwelve equally spaced fictional sample indices show three chronological folds with two-sample tests and a two-sample gap. Training expands from four to six to eight observations; each gap separates the last training observations from the next test. This index schematic contains no market data or strategy result.12 ORDERED SAMPLES · EXPANDING TRAINING · TWO-SAMPLE GAPFOLDSAMPLE INDEX123Train 1–4Train 1–6Train 1–8123456789101112TRAIN 1–4GAPTEST 7–8LATERTRAIN 1–6GAPTEST 9–10LATERTRAIN 1–8GAPTEST 11–12Index illustration only · choose the gap from the actual outcome horizon and timestamps
Twelve equally spaced fictional sample indices show three chronological folds with two-sample tests and a two-sample gap. Training expands from four to six to eight observations; each gap separates the last training observations from the next test. This index schematic contains no market data or strategy result. Illustrative teaching graphic · not live market data

The gap option only separates sample indices. It does not decide how open trades cross a boundary, reproduce exchange orders, account for venue-specific funding, or prove that a feature pipeline is leakage-free. Keep the target’s start and end timestamps, indicator warm-up, trade overlap and any boundary treatment in the experiment record.

Report the whole sequence

Show every evaluation window, including weak and negative results, with its parameters, trade count, costs, exposure and drawdown. Compare the same periods with a stable benchmark, and preserve differences between regimes rather than hiding them in one average. If the rule updates between windows, report the predeclared update procedure and the parameter path. An inspection-driven manual change is a new rule version, not an adaptive algorithm.

Earlier test bars may join later training data only after they are available under the stated refit schedule. Before presenting one overall result, say whether adjacent windows form one continuous account path or each window resets its capital; the arithmetic mean of window percentages is not automatically a portfolio return. Record every manual change and every window, metric and parameter set inspected. A changed rule needs later evidence that was not used to make that change.

Walk-forward performance remains dependent on data quality, fill assumptions, costs and the researcher’s earlier choices. Parameter stability is informative but does not prove future stability. If only a few independent episodes occur, dozens of adjacent bars do not magically create a broad sample. Repeated schedules and metrics also create selection opportunities; the backtest-overfitting guide explains that separate risk.

Product limits and next steps

SuperQuant provides a fixed-rule walk-forward diagnostic: evaluation begins after the first half of the history and reports four chronological test windows without re-optimizing parameters. Earlier candles supply indicator warm-up for each window. This checks how one frozen rule behaved across the later windows; it is not a fit-and-retrain optimization. The separate “last 30%” replay is a single split and is not untouched if the researcher has already inspected that segment.

The Disproof Desk now lets you inspect every window’s UTC test interval, indicator-context and test-data fingerprints, modeled return, drawdown, closed trades, fees, and funding. Every window starts flat with the same starting capital, so the separate returns are not compounded into one account result. The short local fingerprints help detect accidental changes but are not cryptographic signatures.

SuperQuant fixed-rule four-window diagnosticThe current product diagnostic holds one submitted rule fixed and reports four chronological later evaluation windows after the first half of the synthetic history. Earlier candles are included only for indicator warm-up; no parameter refitting occurs. This product-specific diagnostic is distinct from an adaptive re-optimization process.ONE UNCHANGED RULE · FOUR LATER WINDOWS · SYNTHETIC HISTORYFirst half · history and rule submissionearlier candles warm indicators; no fitting claimLater chronological evaluationfour reported windows · same submitted parametersWindow 1Window 2Window 3Window 4No parameter re-optimization · no future candles in earlier windowsTool output is a diagnostic over bundled synthetic history, not independent exchange evidenceDescribes current SuperQuant behavior · verify the app methodology for updates
The current product diagnostic holds one submitted rule fixed and reports four chronological later evaluation windows after the first half of the synthetic history. Earlier candles are included only for indicator warm-up; no parameter refitting occurs. This product-specific diagnostic is distinct from an adaptive re-optimization process. Illustrative teaching graphic · not live market data

The bundled histories are synthetic. Review every window, including negative ones, and record if any output informed a rule change. For one later segment kept aside after all choices, read out-of-sample testing; that is a different evaluation design. The product’s current diagnostics are described in its research methodology. Do not describe the fixed-rule check as an adaptive walk-forward system.

Start with the backtesting workflow, read overfitting risks, and record a reserved period in the hypothesis worksheet. A rigorous negative result is still a result worth preserving. This guide is general education, not an investment recommendation or promise of future behavior.