TL;DR. Bootstrap is the technique of resampling your existing data many times to estimate how much you can trust a number you computed from it. In Robustness, it turns one equity curve into ten thousand alternate-history equity curves so you can see whether your backtest sat at the median, the lucky tail, or the unlucky tail of plausible outcomes.
What you'll be able to do
- Explain bootstrap to someone who has never heard of it, using the trader-relevant analogy.
- Distinguish iid bootstrap from stationary block bootstrap and know which the platform uses by default.
- Read a fan chart on the Path Luck sub-tab and know what it's actually computing.
The intuition
You have one backtest. The strategy made $58,400 over 1,200 trades on MES 5m from 2018-01-01 to 2024-06-30. That's one equity curve. One number.
The question that should keep you up at night: how much of that $58,400 was the strategy's edge, and how much was the specific order the trades happened to occur in? Real markets don't repeat. If you'd lived through the same period twice, the second backtest would have produced a different curve because the trades would have landed slightly differently. How different?
Bootstrap is the answer. Take the 1,200 trades you actually had. Shuffle them. Compute the equity curve again. The total return is the same — same trades, same numbers — but the equity curve looks different. Maximum drawdown is different. Time underwater is different. Probability of ruin is different.
Do that ten thousand times. Now you have ten thousand alternate equity curves, all built from your real trades but in different orders. The distribution of outcomes across them tells you how much of the original backtest's appearance was the strategy and how much was the order.
Bootstrap — one trade list, ten thousand alternate histories
Why this works
The mathematical justification is one of the prettier results in modern statistics. Bootstrap was formalized by Bradley Efron in 1979 and rests on a simple observation: the sample you have is your best available approximation of the population it came from. Resampling from the sample, with replacement, is a way of asking "if my sample is the truth, what other samples are consistent with it?"
For trading, the population is "all the trades the strategy could have produced if history had taken a slightly different path." We can't see those alternative histories directly. But we can see the empirical distribution of trades the strategy did produce, and we can resample from it to approximate what the alternative histories would have looked like.
The key requirement: the trades have to be interchangeable. If trade 7 always follows trade 6 because of some structural reason — say, the strategy enters on a signal that itself depends on the prior trade's exit — then shuffling them breaks that dependence and produces resampled paths that aren't valid alternate histories. The stationary block bootstrap is what handles this issue.
The two flavors
iid bootstrap (simplest, often wrong)
Independent and identically distributed bootstrap. For each resample, draw N trades randomly with replacement from the original N. Every trade has equal probability of being drawn, and the same trade can appear multiple times in a single resample.
When it's right: when consecutive trades are genuinely independent — for example, a strategy where each trade is triggered by a fundamental event uncorrelated with the previous one.
When it's wrong: when consecutive trades cluster. Most algotrading strategies have streaks — winning streaks during favorable regimes, losing streaks during unfavorable ones. iid resampling shuffles those streaks away, producing alternate histories with artificially smooth equity curves and artificially small tail drawdowns.
Why iid is gated behind a confirmation
The Robustness tab defaults to stationary block bootstrap. iid is available but the UI asks "are you sure your trades are independent?" before letting you switch. The reason: iid produces strategies that look more tail-disciplined than they actually are. If you toggle to iid without that being true, you're telling yourself a comforting story your data doesn't support.
Stationary block bootstrap (the platform default)
Instead of drawing individual trades, draw random-length blocks of consecutive trades. The block lengths are themselves random — drawn from a geometric distribution — which makes the resampling stationary, a technical property that ensures the resampled distribution converges to the true distribution as the sample grows.
This preserves the streakiness structure. If your trades naturally cluster, the resampled paths will cluster too, and the tail of the resampled distribution will look like the tail of the actual data.
Full deep-dive: Stationary Block Bootstrap.
What the platform does with the resamples
Each resample is run through the same analysis pipeline as the original equity curve. Per-sim metrics are computed: total return, maximum drawdown, Sharpe ratio, longest losing streak, time-to-recovery. Across ten thousand sims, these form distributions.
The distributions drive everything visible on the Robustness tab:
- The Path Luck fan chart is the cloud of all resampled equity curves, with percentile bands overlaid and the original curve drawn on top.
- The Tail Risk drawdown envelope is the distribution of per-sim maximum drawdowns.
- The Streaks panel histograms are distributions of streak lengths and recovery times.
- All six Robustness Score components read percentile statistics off these distributions.
The Monte Carlo Simulation page covers how this connects to the broader workflow.
A worked example
Take a strategy that produced a 14% CAGR and an 8% maximum drawdown over the backtest period. After bootstrap:
Bootstrap output for a real backtest
What this shows. The original CAGR of 14% sits modestly above the median of the resampled distribution but well within the typical zone. The original max drawdown of 8% is in the better half of the distribution — alternate orderings sometimes produced 21% drawdowns. The bootstrap doesn't tell us the strategy is bad; it tells us that even if it's good, the worst stretches you'll live through are going to look meaningfully worse than the original backtest suggested.
Common misunderstandings
- "My bootstrap median is the same as my original return — the strategy is durable." Almost. The right read is that the original was a typical outcome of its trade list. Whether the trade list itself is a typical outcome of the underlying market is a separate question, addressed by out-of-sample testing and the Deflated Sharpe Ratio.
- "My bootstrap P5 return is negative — the strategy is risky." It might be. Or it might just have a wide distribution because of natural variance. Cross-check with P(ruin) and the median return — a negative P5 with a 95% positive-return probability is normal for a healthy strategy with some volatility.
When bootstrap is most valuable
- Single backtests with no out-of-sample window. Bootstrap gives you a statistical second opinion when you can't afford to hold data out.
- Strategies with too few iterations to walk forward. Below ~500 trades, walk-forward analysis becomes statistically thin. Bootstrap remains valid at any sample size, though its accuracy improves with more trades.
When it's less valuable
- Strategies with strong path dependence that aren't captured by block size. Strategies that depend on specific calendar effects — every March, every Fed day — produce resamples that miss those structures even with block bootstrap. For these, calendar-aware resampling is more appropriate than vanilla block bootstrap.
- Very long backtests with rich regime variation. When you have 20 years of data covering multiple regime cycles, walk-forward and out-of-sample testing typically produce stronger evidence than bootstrap alone. Bootstrap remains a useful supplement.
Bootstrap is the technique that converts a single equity curve into a distribution of equity curves. Everything visible on the Robustness tab is built on this idea. When you see a fan chart or a percentile band, you're looking at bootstrap output.