Resampled Mean-Variance
Michaud-style resampled efficient frontier averaged across many block-bootstrap samples of the historical returns. Replaces a single point-estimate MVO solve with a portfolio that is robust to sampling noise in the input moments.
Overview
Michaud (1989, 1998) and Michaud and Michaud (2008) gave the canonical critique-and-fix for classical MVO: the optimiser amplifies estimation noise in the inputs, producing portfolios that look optimal in-sample but generalise poorly. Their proposed remedy is a Monte-Carlo resampling: draw many bootstrap samples of the historical return path, run MVO on each, and average the resulting weights. The averaged portfolio inherits the optimiser's use of input information while smoothing out the sensitivity to any single sample realisation.
FolioLab implements the resampled frontier with a fixed-length moving block bootstrap, not the stationary bootstrap of Politis and Romano (1994). Every block has the same length, and the block length is fixed at 20 observations. A moving block bootstrap keeps dependence inside a block, so it preserves autocorrelation and volatility clustering over horizons shorter than the block. It does not produce a stationary resample, because a fixed block length breaks stationarity at the block joins. Each bootstrap replication produces an MVO solution; the final allocation is the average of the successful bootstrap weights.
Every run uses 64 bootstrap replications and a fixed block size of 20 observations. The block size is not randomised, and neither value is a request field. The number of replications sets the trade-off between Monte-Carlo error and runtime; 64 replications gives stable averages on Indian universes with up to a few hundred names.
Mathematical Formulation
Notation
- - matrix of asset returns over periods
- - number of bootstrap replications (default 64)
- - expected block length of the stationary bootstrap
- - the -th bootstrap return series
- - MVO weights computed on
Moving block bootstrap
The shipped resampler concatenates blocks of a fixed length , each drawn from a random starting position in the original series, until the resample is as long as the original. The last block is truncated to that length. Dependence inside a block is carried over intact, so autocorrelation and volatility clustering survive over horizons shorter than 20 observations.
Politis and Romano's (1994) stationary bootstrap is a different scheme. It draws each block length at random from , which makes the resample stationary. That randomisation is what this implementation does not do, so the consistency results that depend on it do not carry across. Read the block length here as a fixed setting, not as an expected value, and do not read into it: the value is 20 at every history length.
Resampled-frontier algorithm
- For , draw a block-bootstrap resample from the original return series.
- Compute , on .
- Solve the standard MVO problem on the bootstrap moments to obtain weights .
- If the solve fails (numerical issues, infeasibility) skip the replication; otherwise store .
- The final portfolio is the simple average of the successful bootstrap weights:
where is the set of successful replications and . FolioLab requires a minimum number of successes, fixed at , before accepting the average; otherwise the optimisation reports failure.
Why averaging helps
Averaging in weight-space exploits the fact that estimation errors in and are roughly mean-zero across bootstraps: the noisy weight components partly cancel out, while the signal components reinforce. The argument is the same as bagging in machine learning. Empirically, the averaged frontier sits inside the in-sample frontier (so it has a worse in-sample Sharpe) but tracks the out-of-sample frontier much more closely.
One subtlety: averaging weights changes the effective constraint behaviour. If the underlying solver enforces long-only and budget=1 on each bootstrap, then the average automatically respects long-only and budget=1. If the solver imposes a tracking-error or sector-cap constraint, the average satisfies the constraint but is generally not on the constraint boundary.
Advantages & Limitations
Advantages
- Out-of-sample robust: Smooths the optimiser's amplification of input noise.
- Block bootstrap: Preserves serial dependence in the resamples.
- Drop-in: Reuses any base MVO formulation, including constrained variants.
- Embarrassingly parallel: Bootstraps are independent and can be parallelised.
Limitations
- Computationally expensive: MVO solves per portfolio.
- Worse in-sample fit: Averaging concedes some in-sample Sharpe by design.
- Bootstrap-block sensitivity: Choice of matters when serial dependence is strong.
- No theoretical optimality: The averaged portfolio is a heuristic, not a known optimum.
References
- Michaud, R. O. (1989). "The Markowitz Optimization Enigma: Is ‘Optimized’ Optimal?" Financial Analysts Journal, 45(1), 31-42.
- Michaud, R. O. (1998). Efficient Asset Management: A Practical Guide to Stock Portfolio Optimization and Asset Allocation. Boston: Harvard Business School Press.
- Michaud, R. O., & Michaud, R. O. (2008). "Estimation Error and Portfolio Optimization: A Resampling Solution." Journal of Investment Management, 6(1), 8-28.
- Politis, D. N., & Romano, J. P. (1994). "The Stationary Bootstrap." Journal of the American Statistical Association, 89(428), 1303-1313.
- Politis, D. N., & White, H. (2004). "Automatic Block-Length Selection for the Dependent Bootstrap." Econometric Reviews, 23(1), 53-70.
- Palomar, D. P. (2025). Portfolio Optimization: Theory and Application. Cambridge University Press, Chapter 14 (Robust Portfolios), Section 14.3 (Portfolio Resampling).
Not investment advice. Past performance is not indicative of future results.