Markets hand you exactly one history. From it you may want error bars for a mean return, the distribution of a drawdown, a stress test for a portfolio rule β all questions about how differently things could have gone. The bootstrap answers by manufacturing alternative histories out of the one you have: resample the data, recompute the statistic, repeat.
But financial time series carry structure that naive resampling destroys. Days are correlated across assets; returns are correlated across time; volatility arrives in waves. This page builds up, method by method, to the block bootstrap β resampling whole stretches of time, here 30-day blocks β and watches what each step preserves, what it destroys, and where even the best version fails.
Everything below runs on this sample: three years β $T = 756$ trading days β of daily log returns on two assets, $A$ and $B$. It is a simulated world, which buys us something no real dataset can offer: later on we can re-run the world itself and check the bootstrap's answers against the truth. The simulation has the three features that make resampling time series delicate:
The lower strips are the daily returns themselves. Note how rough patches and quiet patches come in stretches, and arrive for both assets at once β that is the structure a resampling method has to survive.
Efron's original bootstrap (1979) treats the sample as an urn. To build an alternative history, draw $T$ days from it with replacement:
$$x^{*}_{t} = x_{J_t}, \qquad J_1,\dots,J_T \;\overset{\text{iid}}{\sim}\; \mathrm{Uniform}\{1,\dots,T\}.$$
To see what that does to order, let every day wear its date: in the strips below, each day of the original sample is shaded by when it happened β light for the oldest days, dark for the newest. The original is a smooth gradient. The resample is confetti.
Hover over the resampled strip to trace any day back to its origin.
What survives: the menu of values. Every resampled day is a real day from the sample, so the marginal distribution β mean, variance, skew, the histogram itself β is reproduced up to sampling noise, and that is precisely what the classical bootstrap needs. What dies: sequence. The volatility clusters visible in the original returns are pulverized into a uniform buzz, and the autocorrelation of $|r|$ drops from about 0.3 to zero. For i.i.d. data that loss is no loss at all. For a time series it is fatal β as we will quantify below.
First, though, the cross-section. With $N$ series the sample is a $T \times N$ matrix β one row per day, one column per asset. There are two ways to run the urn, and they differ in what a "draw" is:
In the strips below, $A$ wears its dates in blue and $B$ wears them in rust. Resampling whole rows keeps the two patterns identical β every position holds one date, for both assets β and the scatter of daily return pairs keeps its shape. Resampling the columns separately pairs unrelated days, and the correlation collapses.
The rule generalizes far beyond two assets: whatever you resample, resample it jointly across the cross-section. Keeping rows intact preserves the entire same-day dependence structure β correlations, tail co-movement, factor structure β exactly, because no same-day pair is ever broken apart. But rows alone still shred the time dimension: $\rho_1(|r|)$ is as dead as before. We need draws that are bigger than a day.
The fix, proposed for dependent data by Carlstein (1986) and in the overlapping form by KΓΌnsch (1989), is almost embarrassingly direct: if single days destroy the sequence, draw runs of consecutive days. Pick a block length $\ell$ β here $\ell = 30$, about six trading weeks of memory β draw random starting points
$$S_1, S_2, \dots \;\overset{\text{iid}}{\sim}\; \mathrm{Uniform}\{1,\dots,T-\ell+1\},$$
and lay the blocks $\bigl(x_{S_j}, x_{S_j+1}, \dots, x_{S_j+\ell-1}\bigr)$ end to end until $T$ days are filled β always taking whole rows, so the cross-section rides along for free. Every 30-day stretch of the resample is a verbatim quotation from history: within a block, autocorrelation, volatility clusters, leadβlag effects and same-day correlation are all preserved exactly, because the data is untouched β only the order of chapters changes.
The tick marks under the strips are the seams where one block ends and the next begins. Drag β down to 2 and the gradient dissolves back into confetti; drag it up to 252 and you are merely reshuffling three long chapters. Hover over a strip to trace a day home.
Two refinements are worth knowing. The circular block bootstrap (Politis & Romano) wraps the sample into a ring so late days are not under-sampled. And the stationary bootstrap (Politis & Romano, 1994) draws each block with a random, geometrically distributed length with mean $\ell$ β the checkbox above. Softening the block edges this way makes the resampled process stationary and the result less sensitive to the exact choice of $\ell$, at the price of some short blocks in every resample.
Does the extra machinery change any answer? Take the plainest statistic there is: the mean daily return of $A$, annualized. For dependent data its true sampling variance is not $\sigma^2/T$ but
$$\operatorname{Var}(\bar r) \;=\; \frac{\sigma^2}{T}\left(1 + 2\sum_{k=1}^{T-1}\Bigl(1-\tfrac{k}{T}\Bigr)\rho_k\right),$$
and with positive autocorrelation the sum is positive: neighboring days partly repeat each other, so $T$ correlated days carry less information than $T$ independent ones. The i.i.d. bootstrap, which by construction produces uncorrelated resamples, estimates $\sigma^2/T$ β Singh (1981) proved this failure β and its error bars come out too narrow. With $\varphi = 0.3$ the understatement is a factor of about $\sqrt{(1+\varphi)/(1-\varphi)} \approx 1.36$.
Because this world is simulated, we can watch it happen. Below are three sampling distributions of the annualized mean: one from 400 i.i.d.-day resamples, one from 400 block resamples, and β the luxury of a synthetic world β the truth, from 400 freshly simulated histories.
Compare widths, not centers β a bootstrap distribution is always centered near this sample's mean, while the truth is centered at the world's. Slide β to 1 and the block curve collapses onto the i.i.d. one; past the memory length (a few weeks) the width stops growing.
Notice also that even generous blocks stay a touch narrower than the truth. That is not bad luck; it is the first limitation.
A block resample contains roughly $T/\ell$ seams, and across a seam the past is forgotten: the two sides come from unrelated parts of history. Two days $k$ apart land in the same block only with probability about $(1-k/\ell)^{+}$, so the resample's autocorrelation is systematically attenuated:
$$\mathbb{E}\,\rho^{*}_{k} \;\approx\; \Bigl(1-\frac{k}{\ell}\Bigr)^{\!+} \rho_k .$$
The plot shows this bias directly, on the statistic where our world has long memory: the autocorrelation of $|r|$, the signature of volatility clustering. Gray bars are the original sample's ACF; the teal line is the average ACF over 200 block resamples; the thin dashes are the $(1-k/\ell)$ envelope.
Everything beyond lag β is annihilated, and even lags well inside the block are shaved by the seam probability. A 30-day block keeps six-week weather but knows nothing of seasons.
Any statistic that feeds on long-range dependence inherits this bias: multi-month drawdowns, persistence estimates, the width of the mean's error bar we just saw. The bootstrap distribution is honest only about horizons shorter than the block.
So make $\ell$ enormous? Then the other jaw of the vise closes. The sample holds only $T/\ell$ non-overlapping blocks β at $\ell=252$, three. Resamples become shufflings of a few long chapters: they share most of their content, the bootstrap distribution collapses toward a few points, and in the limit $\ell = T$ every "alternative history" is the original. Try it above β at $\ell = 252$ the provenance strips show three slabs, and the resampled paths look like the original path with its acts reordered.
The tension is fundamental: short blocks bias, long blocks starve. Theory locates the optimum for smooth statistics at $\ell^* \sim c\,T^{1/3}$ (Hall, Horowitz & Jing 1995) β around 9 days for our $T=756$ β and Politis & White (2004) give an automatic, ACF-driven choice. In practice the block length is a modelling decision about how long the memory you care about actually is: 30-day blocks for our world's six-week volatility weather, longer if the statistic genuinely needs seasons β provided the sample can afford them.
The block bootstrap assumes stationarity: any block must be exchangeable with any other. Prices are not stationary β a block of 2019 price levels and a block of 2021 levels live at different altitudes, and gluing them produces cliffs at every seam. Returns (or residuals from a fitted model) are the stationary increments; resample those and rebuild the path by compounding. Below, the same drawn blocks, glued both ways.
The same trap generalizes: trends, unit roots, structural breaks, a pandemic-era regime β the block bootstrap will happily shuffle them into places they never belonged, because it believes all of history is one homogeneous fabric. Difference, detrend, or model first; resample what is plausibly stationary.
One boundary is worth stating plainly: every resampled day is a day that happened. The worst crash in any alternative history is exactly the worst crash in yours; no resample contains a nine-sigma day your sample lacked. The bootstrap redistributes experience β it does not extrapolate beyond it. For tail questions past the sample's edge you need parametric help: extreme-value theory, or a model that can be pushed. And rare structure suffers the same way: a crisis that appears once in your sample appears in resamples at a random frequency β sometimes never, sometimes three times β so "how often do crises happen" is a question the urn cannot answer, only re-ask.
Relatives worth knowing, for when blocks pinch: the AR-sieve bootstrap fits an autoregression and resamples its residuals β seamless histories, at the price of believing the model; the dependent wild bootstrap multiplies the data by smoothly correlated noise; subsampling gives up on full-length histories and draws shorter ones, with inference corrected for size. Each trades the block bootstrap's model-freedom for one of its weaknesses.
Efron's original paper is Bootstrap methods: another look at the jackknife (1979); Singh's proof that it fails for dependent data is in Annals of Statistics (1981). The block bootstrap enters with Carlstein (1986) and, in the overlapping form used here, KΓΌnsch (1989); the stationary variant is Politis & Romano (1994), and automatic block-length selection is Politis & White (2004). The book-length treatment is Lahiri, Resampling Methods for Dependent Data (Springer, 2003).