Features
Forward Monte Carlo Simulation
Project your optimized portfolio forward through thousands of simulated market histories - not one average path, but the whole distribution: where 90% of outcomes land, how likely you are to hit a goal, and what a 2008-style stretch would do along the way.
What it does
A completed optimization gives you one set of target weights and metrics computed on the single history that actually happened. The Monte Carlo engine asks the forward question: if markets behave like they have historically - including crashes, recoveries, and long sideways stretches - where does this portfolio end up over the next 1 to 40 years?
Each simulation draws up to 50,000 independent paths of daily portfolio returns, applies your cash-flow plan (SIP contributions, systematic withdrawals), realizes Indian capital-gains tax at rebalances, deflates by Indian CPI, and reports the resulting wealth distribution:
- Wealth fan chart - P5/P25/P50/P75/P95 percentile bands over the horizon, nominal and inflation-adjusted.
- Goal probability- P(wealth ≥ your goal by the horizon), optionally in today's money.
- Terminal wealth distribution - the full histogram, with pre-tax, post-tax, and real variants.
- Path risk - the distribution of maximum drawdown and time-under-water computed daily inside every path, plus forward 1-year VaR and CVaR at 95% / 99%.
- Ruin probability - the fraction of paths a withdrawal plan drives to zero.
- Crisis scenarios - the same portfolio re-simulated under stressed conditions, side by side with the base run.
How paths are generated
The default return process is a stationary block bootstrap(Politis–Romano) over your assets' full joint daily-return history. Whole cross-sectional rows are resampled in random-length blocks (expected length , about 70 trading days on a 20-year history), so three things survive exactly: the empirical fat tails of each asset, the correlation between assets on every sampled day, and the short-run momentum / volatility clustering inside each block. No normal distribution is assumed anywhere.
Two fat-tailed parametric processes (-distributed and Gaussian) are available as toggles for comparison, and a fourth process upgrades the bootstrap with regime awareness:
Regime-switching bootstrap
Plain bootstrap blocks are ~70 trading days, but real market regimes persist for months to years. The regime process fits a 2–3 state Markov-switching model (Hamilton, 1989) to the portfolio's daily returns, labels each historical day calm or bear using only information available at that time, then lets every simulated path carry its own regime chain: bear days are drawn from historical bear days, calm days from calm days, with realistic persistence between them.
Paths start from today's filtered regime probabilities by default, so a simulation launched mid-crisis is honest about it. The bear_regime_start scenario forces every path to open in the high-volatility state - the canonical stress test for withdrawal plans, where sequence-of-returns risk does the damage.
The drift assumption (read this before trusting any fan chart)
Every resampling simulator centers its future on the historical average return. With roughly 23 years of usable NSE history at ~18% annualized volatility, the standard error of that mean is about
Compounded over 15–40 years, that estimation error dwarfs everything else in the simulation - it does not shrink no matter how many paths you run. FolioLab handles this three ways: per-path drift perturbation is on by default(the fan reflects parameter uncertainty, not just path noise), a drift knob lets you re-center the simulation on a humbler mean while keeping the empirical shape (“same tails, lower average”), and every goal probability is labeled with the assumption behind it. Long-horizon percentiles are best read as ranges under stated assumptions, never as forecasts.
Inflation, tax, and cash flows
- Inflation- real-wealth outputs deflate by Indian CPI aligned to the same historical days the return blocks were sampled from, so a simulated 2008 carries 2008's inflation. You can override with a flat annual rate; if CPI data is unavailable the engine falls back to a constant 5% and says so in the result.
- Capital-gains tax - STCG/LTCG (post-July-2024 rates by default, both editable) are realized on the sold fraction at every rebalance with the annual LTCG exemption tracked, plus a terminal-liquidation estimate, reported as a separate post-tax distribution.
- SIP / SWP - monthly contributions with annual step-up, and monthly withdrawals starting in any year. Flows are tracked against a unitized NAV, so performance metrics never mistake a deposit for a return. Paths that hit zero stay at zero - that is exactly the ruin probability.
Crisis scenarios
Scenarios re-run the full simulation with stressed sampling and show up side by side with the base run:
- 2008 repeat / COVID repeat - paths are forced to begin inside those historical windows, so every simulation opens with a crash instead of maybe never seeing one.
- Single-name blowup- a −40% one-day shock hits your largest concentrated holding (>5% weight) once a year, testing idiosyncratic risk the index never shows.
- Bear regime start - with the regime process, every path opens in the high-volatility state.
A scenario your data cannot support (e.g. a COVID window on a fund with post-2020 history) is reported as skipped with the reason - never silently dropped.
Running a simulation
Two ways, both explicit - FolioLab never runs a simulation you didn't ask for:
- With an optimization- tick “Also run Monte Carlo simulation” on the optimize form; the simulation starts automatically after the optimization succeeds.
- On any past run- open a succeeded run's results page and hit “Run Monte Carlo”. By default the best-Sharpe method's weights are simulated; you can pick any method from the run.
Results are reproducible: every run stores its seed and full configuration, and re-running with the same seed on the same data gives identical numbers. The simulation panel also lands in the PDF report.
Plan availability
- Free - not included.
- Pro - 20 simulations / month (separate from your optimization quota), up to 10,000 paths per run.
- Enterprise - unlimited, up to 50,000 paths per run.
Honest limitations
- History can only replay what happened: a future crisis worse than anything in your sample is, by construction, not in the distribution.
- Beyond ~15 years the drift assumption dominates every other choice; treat 30-year percentiles as scenario analysis, not prediction.
- The v1 tax overlay uses average-cost accounting, not full lot-level FIFO; treat post-tax numbers as close estimates.
Related reading: Resampled MVO uses the same bootstrap machinery for weight estimation, and Rolling Walk-Forward Backtest answers the backward-looking version of this question.