Probability of backtest overfitting calculator

Estimate how often the configuration selected in sample falls below the median rank out of sample. Paste the return series for all configurations in your search; calculation takes place in your browser.

Method and assumptions

CSCV divides T observations into S contiguous blocks. For each combination of S/2 in-sample blocks, the calculator selects the configuration with the highest in-sample score and ranks its out-of-sample score among all K configurations.

omega = OOS rank / (K + 1)
logit = ln(omega / (1 - omega))
PBO = count(logit < 0) / count(valid splits)

Tied OOS scores receive their average rank. A tied in-sample winner or undefined score discards the split. If any split is discarded, PBO is undefined; the counts and reasons remain visible. The final T mod S rows are excluded.

Sharpe is the default score. Stochastly's desktop CSCV uses Sortino and an optional embargo at IS-to-OOS boundaries. Select Sortino and enter the same observations per year and embargo to compare results. Each block needs at least four observations (T >= 4S), the same minimum as the app.

An embargo removes observations at the start of an OOS block when its preceding block is in sample. Other observations adjacent to an IS block remain in the OOS score. Returns within a time block can depend on each other, and correlated strategy variants can reduce the effective search breadth.

With fewer than about 100 configurations, the PBO estimate is exploratory and can be unstable. The number of configurations and the caveat appear beside each result. PBO is a descriptive estimate of the tested search.

The browser limit is 20,000 combinations and 1,000,000 matrix cells. If a limit is reached, reduce S, rows or configurations; keep a record of excluded trials because omitted configurations change the estimand.

Source: Bailey, Borwein, López de Prado and Zhu, The Probability of Backtest Overfitting, Journal of Computational Finance 20(4), 39–69 (source read 2026-10-03). Read the PBO guide.

CSCV calculator

Paste a CSV matrix with time in rows and every tried configuration in columns. Returns are decimals per observation. A header row may name the configurations. The matrix stays in this browser.

The synthetic example has seeded noise and one configuration with added drift. It is illustrative and is not market data.