US Monte Carlo Portfolio Simulation (GARCH)
Summary
This project uses a Monte Carlo engine for multi-asset US portfolios. Each asset follows a GARCH(1,1) variance process with Student-t innovations; residual correlations are estimated from pre-window history and injected via a Cholesky factor so simulated shocks co-move realistically.
The default exhibit is the README test portfolio: 50% S&P 500 (^GSPC) and 50% Dow Jones (^DJI), simulated forward from the configured start date through the latest available prices. Thousands of paths produce a 5–95% central band, a mean trajectory, and a terminal return histogram with VaR, CVaR, and probability of net loss.
The red actual line overlays realized weighted index performance on the same calendar—useful for judging how the stochastic model’s dispersion relates to what happened in markets.
Portfolio: S&P 500 (50%) · Dow Jones (50%) · 2025-02-05 → 2026-07-17 · 400 simulated paths
Methodology
Data: Adjusted closes from Yahoo Finance from 2021 onward; pre-simulation history fits GARCH and residual correlation.
Single-asset engine: Per path, draw drift uncertainty, evolve variance with GARCH(1,1), multiply by correlated Student-t shocks, compound into prices (simple or log returns).
Portfolio: Weighted sum of simulated asset price paths; actual portfolio uses the same weights on aligned historical series.
Outputs: Path fan chart (sample paths + mean + VaR band + actual), terminal histogram, and scalar risk metrics at the horizon.
| Asset | ω | α | β |
|---|---|---|---|
| S&P 500 | 0.00e+0 | 0.0840 | 0.9020 |
| Dow Jones | 0.00e+0 | 0.0650 | 0.9150 |
How to read the charts
Path panel: The gold band is where 90% of simulated wealth paths fall day-by-day; divergence of actual from the band signals periods the model would have deemed unlikely or that volatility was under-estimated.
Histogram: Wide spread implies high horizon uncertainty; VaR/CVaR summarize left-tail outcomes. P(loss) is the fraction of paths finishing below the starting value.
Known limitation from the upstream authors: holiday calendars are approximate when mixing indices, so simulated day counts may differ slightly from realized series.
In-band days
92.0%
Below 5th pct
8.0%
Above 95th pct
0.0%
Additional analytics (what the numbers mean)
Terminal risk metrics are path-based. Mean and median summarize central tendency across simulated outcomes; they are not “expected” paths in a probability sense. VaR 95% is the 5th percentile of terminal return; CVaR 95% is the average terminal return among outcomes at or below that VaR level.
Mean vs median = skew signal. A large gap between mean and median usually indicates a skewed / fat-tailed return distribution (e.g., volatility clustering + Student-t shocks). If the actual return lands far from both mean and median, it’s a sign the fitted volatility/tail model may not match the realized regime well.
Interpreting P(loss). P(loss) answers: “What fraction of Monte Carlo paths end with a negative total return versus the starting value?”. When P(loss) is high, the distribution is dominated by left-tail outcomes even if the mean return looks acceptable.
Actual vs simulated dispersion. If the realized return repeatedly sits outside the simulated percentile bands (not just once), it usually indicates one of: (1) volatility was structurally different than the fitted GARCH regime, (2) tail heaviness was mis-calibrated (Student-t degrees of freedom), or (3) cross-asset correlation shifted during the window.
Reading the GARCH parameter table. alpha controls how quickly new shocks feed into next-period variance; beta controls persistence (how long elevated variance “hangs around”). A larger alpha + beta generally implies slower variance reversion; omega scales the long-run variance level.
Why VaR/CVaR can disagree with intuition. GARCH + Student-t can generate fat tails and volatility clustering, so drawdowns cluster in time. That means “average” volatility can look moderate while tail metrics remain severe.
Mean return
19.85%
VaR 95% / CVaR 95%
-25.48% / -34.04%
P(net loss)
26.5%
Actual return
17.02%
Best / worst simulated
224.35% / -54.13%
Median terminal return
16.31%
Terminal positioning: actual is 42.50 pp vs VaR95 and 51.06 pp vs CVaR95.
In-band days
92.0%
Below 5th pct
8.0%
Above 95th pct
0.0%
Mean 19.85% · VaR 95% -25.48% · CVaR 95% -34.04% · Actual 17.02%
Limitations
GARCH is a parsimonious volatility model; structural breaks and regime shifts are not modeled explicitly.
Index levels (^GSPC, ^DJI) are not directly investable; results illustrate risk mechanics rather than tradable ETF tracking error.
Monte Carlo draws are pseudo-random; regenerate data to refresh paths. Research output only—not investment advice.
Conclusion
Monte Carlo simulation with GARCH(1,1) volatility illustrates how horizon uncertainty compounds when correlations and volatilities shift across regimes. Terminal wealth distributions are path-based summaries, not forecasts.
Refresh with npm run data:us-mc-investem after updating market data. Results are research illustrations — not investment advice.