Block-bootstrap Monte Carlo

Thousands of simulated futures built from stretches of real history, and what they can and cannot tell you.

What it does

Each simulated path strings together randomly chosen runs of consecutive historical days (21 by default) until it reaches the horizon. With 5,000 paths, the spread of ending values shows the range of outcomes the portfolio's own history supports.

Why it is used

Resampling real days keeps the fat tails and the co-movement between holdings that a normal-distribution simulation loses. Resampling runs of days, rather than single days, also keeps volatility clustering, so simulated crashes last as long as real ones did.

Inputs

  • Daily portfolio returns (fifteen years by default).
  • Horizon, expected-return mode and block length, all adjustable.

Formulas

path value_k = 10,000 · Π_{t ≤ k} (1 + r*_t), r* drawn in blocks of L consecutive historical days zero mode: r*_t drawn from (r_t − mean(r))

Assumptions

  • The future looks like the sample: only days that occurred can occur again, in new orders.
  • Blocks wrap around the end of the sample (circular bootstrap).
  • The 'historical' mode uses the sample's average return. The 'zero' mode removes it, because average returns are the least reliably estimated input and dominate long horizons.
  • Daily rebalancing; no fees, taxes, contributions or withdrawals.

How to read the results

The shaded bands contain the middle 50% and 90% of paths. The median path is not a forecast. Switching to zero expected return shows how much of the picture comes from the assumed return rather than from risk. The ± figures next to probabilities are simulation error from the finite number of paths, not uncertainty about markets.

Limitations

  • No loss worse than the worst stretch in the sample is possible.
  • A fifteen-year sample includes one or two severe crises; the simulated frequency of crises inherits that.
  • Block length is a judgment call: longer blocks keep more dependence but produce less varied paths.

Where it can fail

  • If the sample is dominated by one strong trend, the historical mode projects that trend forward. The zero mode exists to expose this.

Changes from the original version

DeanOS began as a personal tool. Rebuilding it for the public meant rechecking each model; these are the changes that came out of that.

  • The original version resampled single days, which destroys volatility clustering. It now resamples 21-day blocks by default.
  • The zero-return toggle, longer lookback and printed assumptions are new.

Validation on current data

How the block length changes the simulated spread for the Balanced example (one-year horizon).

References

  • Künsch, H. (1989). The jackknife and the bootstrap for general stationary observations. Annals of Statistics 17(3).
  • Politis, D. and Romano, J. (1992). A circular block-resampling procedure for stationary data. In Exploring the Limits of Bootstrap, Wiley.
  • Efron, B. and Tibshirani, R. (1993). An Introduction to the Bootstrap. Chapman & Hall.

See it on a portfolio