function Methodology({ go }) { const wide = useWide(); const Section = ({ label, children }) => (
{label}
{children}
); const P = ({ children }) => (

{children}

); const Callout = ({ children }) => (
{children}
); return (
{/* Breadcrumb */}
go('landing')} style={{ cursor: 'pointer', color: TH.accent }}>HOME METHODOLOGY
{/* Header */}
§ METHODOLOGY

Why walk-forward
validation.

The standard backtest is a biased estimator. This is how we account for that.
{/* Body */}

Most published backtests are not backtests. They are curve fits — strategies optimized against the same data they will be judged on. The parameters look good because the researcher kept adjusting them until they did. The result is a strategy that worked in the past because it was designed to work in the past.

This is not dishonesty. It is the default outcome of any optimization process applied to a finite dataset. When you fit a model to data and then measure it on that same data, you are measuring how well you memorized the data, not how well the model generalizes to new observations.

In trading, this means the strategy you deploy in live markets will underperform its backtest — often substantially. The gap between reported and live performance is almost entirely explained by overfitting.

Walk-forward validation is the discipline of separating optimization from evaluation. It is the closest thing systematic traders have to an honest test.

We divide historical data into rolling windows. Each window has two parts: an in-sample period where parameters are optimized, and an out-of-sample period where the optimized parameters are run blind — no further adjustment allowed. The window then steps forward and the process repeats.

Example: 3-year in-sample · 1-year out-of-sample · 6-month step.

Parameters are optimized on years 1–3, then tested unchanged on year 4. The window advances 6 months. New optimization on years 1.5–4.5, tested on year 5.5. Repeat until data is exhausted. The metrics we report come from the out-of-sample periods only.

A strategy that survives this process has demonstrated that its parameters generalize. It has not merely memorized its training data. That is a low bar — most strategies fail it — but it is the minimum threshold for taking a system seriously before allocating capital to it.

Every strategy published at Walkforward must meet the following criteria on its out-of-sample results:

{[ ['Minimum 30 out-of-sample trades', 'Below this threshold, the statistics are not meaningful. A Sharpe ratio computed on 8 trades tells you almost nothing.'], ['Out-of-sample Sharpe ≥ 0.5', 'Strategies below this level do not compensate for the risk and operational effort they carry.'], ['Maximum drawdown documented and stress-tested', 'Against the two worst historical periods in the asset\'s data, not the average period.'], ['Parameter stability check', 'The result should not require precise parameter values. If moving the fast MA from 50 to 48 collapses the strategy, the strategy is fragile. We test a grid of neighboring values.'], ['Net-of-fees reporting', 'All metrics are net of 0.10% per trade and 5bps slippage. Gross-of-fees results are not published.'], ].map(([title, desc], i) => (
{title}
{desc}
))}

Crypto price data comes from Binance via their public REST API. TradFi assets (S&P 500, Nasdaq, Gold, Silver) come from Yahoo Finance. All price data is daily close. We do not use tick data or order book data for strategy backtesting — daily bars have sufficient resolution for the types of trend-following and mean-reversion systems we test, and the data quality is materially more reliable.

Our backtester is open to members. The parameters, the data, and the full equity curves are visible. We do not publish conclusions without showing the work.

{[ ['Crypto', 'Binance REST API · BTC, ETH, SOL, and 30+ others · daily close'], ['TradFi', 'Yahoo Finance · S&P 500, Nasdaq, Gold, Silver · daily close'], ['History', '2017 or first available date · updated daily'], ['Coverage', '~7 years for major assets · minimum 3 years required to publish'], ].map(([label, val], i) => (
{label.toUpperCase()}
{val}
))}

Walk-forward validation reduces overfitting — it does not eliminate it. A strategy can pass a walk-forward test and still fail in live trading due to execution differences, regime changes, or bad luck in the test window. We document these risks for every strategy we publish.

The size of the test window matters. A 1-year out-of-sample period that happened to contain a strong trend will inflate results for a trend-following strategy. We check for this by reviewing the distribution across all out-of-sample windows, not just the aggregate.

Nothing on this site is a recommendation to trade any specific strategy. The research is one input. Position sizing, portfolio construction, and execution decisions are the trader's responsibility.
METHODOLOGY REV. 1 · MAY 2026
{/* CTA */}
§ SEE IT IN PRACTICE
The backtester is open to members.
Run walk-forward backtests yourself on 7 years of data. The methodology above is what the tool implements.
go('research')}>See example results → go('pricing')}>View membership
); } Object.assign(window, { Methodology });