How to stress test a portfolio with your own scenario
Historical replays answer "what happened in 2008". A custom scenario answers "what if semiconductors fall 35%". Doing it right means treating correlated shocks jointly — here is how, and why the shortcut fails.
In short
To stress test a portfolio with your own scenario, set shocks on the benchmarks you care about and propagate them to every other asset with the conditional expectation μ = Σ_aS Σ_SS⁻¹ s, estimated on the market conditions you want to test. Do not multiply each shock by a separately estimated beta and add the results: correlated shocks overlap, and the shortcut counts the common move more than once.
Most portfolio tools offer one kind of stress test: pick a past crisis and replay it. That answers a real question — how would this allocation have handled 2008 or March 2020 — but not the one investors usually ask, which is about the next shock, not the last one. What if semiconductors fall 35%? What if long Treasuries lose 15% while the dollar firms? Those are scenario stress tests, and the Stress Lab in MEDGE is built for them.
Two kinds of stress test
| Historical replay | Custom scenario | |
|---|---|---|
| Question answered | What happened to this allocation in a past crisis? | What happens under the combination of shocks I specify? |
| Inputs | A date window | Shocks on chosen benchmarks, a horizon, market conditions |
| Strength | Real, fat-tailed, non-linear outcomes | Any scenario, including ones that never happened |
| Weakness | History ran once; the next crisis will mix moves differently | Relies on estimated relationships, which can break |
The shortcut that double-counts
The quick way to run a custom scenario is to estimate the portfolio’s beta to each factor with a separate regression, multiply each beta by its shock and add up the products. It looks reasonable and it is wrong whenever the shocked factors are correlated — which, for equity indices, sectors and styles, is almost always.
A deliberately simple illustration. Take a fund that tracks the S&P 500 exactly, so its beta to the S&P 500 is 1. Assume, for the example, daily volatility of 1.1% for the S&P 500 and 1.4% for the Nasdaq 100, with a correlation of 0.92 between them. The fund’s beta to the Nasdaq 100, estimated on its own, is 0.92 × 1.1 × 1.4 / 1.4² ≈ 0.72. Now set the scenario S&P 500 −30%, Nasdaq 100 −35%.
| Method | Calculation | Fund move |
|---|---|---|
| Sum of single-factor betas | 1.00 × (−30%) + 0.72 × (−35%) | ≈ −55% |
| Joint (conditional expectation) | The fund is the S&P 500; given S&P −30%, it moves −30% | −30% |
The shortcut makes an S&P 500 fund fall almost twice as much as the S&P 500 itself. The Nasdaq shock does not add information about this fund beyond what the S&P shock already carries, but the sum counts the common market move twice.
The fix: treat the shocks jointly
Model daily returns as jointly normal with covariance Σ. Given shocks s on a set of benchmarks S, the expected move of any other asset a is the conditional expectation μ_a = Σ_aS Σ_SS⁻¹ s, and what the shocks do not explain has variance h·(σ²_a − Σ_aS Σ_SS⁻¹ Σ_Sa) over a horizon of h days. This is exactly the coefficient vector of a multiple regression of the asset on all shocked benchmarks at once, so correlated shocks share the effect instead of stacking it. It also gives the implied move of every benchmark you did not shock — which is how a scenario like "semiconductors −35%" becomes a full picture of the market.
- ·Work in log returns and convert back, so a −50% shock stays meaningful.
- ·Add a small ridge to Σ_SS when shocked benchmarks are nearly collinear (an S&P 500 fund and the S&P 500 itself).
- ·Build the portfolio band from the residual covariance of the holdings, not from each holding separately.
Estimate relationships on the right market
Correlations are not constant. In sell-offs equities move more together and some hedges weaken; in strong markets dispersion rises. A scenario about a bear market should use relationships estimated on bear-market days. MEDGE classifies each session by the S&P 500’s trend over the previous three months, splits the sample into thirds, and blends each third with the full history in proportion to its size, so a few extreme days cannot dominate. Running the same shocks under bear, neutral and bull relationships is itself informative: a large spread means the answer depends on conditions that may not hold.
Check the scenario, not only the result
- ·Plausibility: the Mahalanobis distance of the shocks, s′(hΣ_SS)⁻¹s, follows a chi-square distribution under normality. It ranks how extreme the combination is. Normal tails understate real extremes, so read it as a ranking.
- ·Coherence: for each shock, compute what the other shocks imply for it. A shock several standard deviations away from that — S&P 500 −25% with Nasdaq 100 +20% — assumes the usual relationship breaks. That can be the point of the scenario, but it should be deliberate.
- ·Historical analogues: find the past windows in which the shocked benchmarks moved most like the scenario, measured in standard deviations, and compare what each holding actually did with what the model expects.
Read the holdings
The portfolio number tells you whether the loss is tolerable. The holdings tell you what to do about it. For each holding, compare its scenario move with its closest index, its sector and its country peers; check whether its sensitivity to the index rises in bear phases, how much of the index’s down days it captures, and whether it gave way in the index’s worst historical months. Then rank everything — inside and outside the portfolio — by how it fares in the scenario and how much it offsets the risk you already hold, and try the change: in the Stress Lab a weight edit updates the outcome instantly.
Limits: the model is linear, uses normal tails and estimates relationships from history. It is a structured way to reason about a scenario, not a forecast, and nothing here is investment advice.
Frequently asked questions
- What is the difference between a stress test and a backtest?
- A backtest replays the whole history of a portfolio. A stress test isolates an adverse scenario — either a past crisis window (historical stress test) or a combination of shocks you define (hypothetical or scenario stress test) — and asks how the portfolio behaves under it.
- How many shocks should a scenario have?
- As few as describe your worry. Every extra shock is an extra assumption; the model fills in the rest from historical relationships. One or two well-chosen shocks, with the implied moves of everything else inspected afterwards, usually beat a long list typed by hand.
- Can a stress test tell me the probability of the scenario?
- Only approximately. The Mahalanobis distance of the shocks gives the probability of a move at least that unusual under a normal model, which understates fat tails. Treat it as a ranking of how extreme the scenario is, not as a forecast.
- Should I stress test each holding or only the total?
- Both. The total tells you whether you can live with the loss; the holdings tell you what to change. A holding that falls far more than its own index in the scenario, or that gave way in the index’s worst historical months, is a concrete candidate for review.
Related glossary terms
Beta
Beta (β) is the slope of the regression of a portfolio's returns on a benchmark's returns — the sensitivity of the portfolio to the benchmark.
CVaR (Conditional Value at Risk)
CVaR (Conditional Value at Risk) is the average loss conditional on the VaR threshold being breached at a given confidence level.
Maximum Drawdown
Maximum Drawdown (MDD) is the largest peak-to-trough decline in a portfolio's cumulative value over a measurement window.
Monte Carlo Simulation
Monte Carlo simulation generates a large number of random portfolio return paths to estimate the probability distribution of future outcomes given a return model.
Keep reading
Why CVaR should replace VaR in retail
Value-at-Risk is the standard but ignores the tail. Conditional VaR measures how much is lost when VaR is breached — and is the only coherent measure by definition.
Read MacroFocus Engine: how we map 14 macro events to geographic footprints
A technical overview of the event-scoring engine behind Focus: 0–100 scoring, regime classification and integration with proxy ETFs.
ReadInterested in MEDGE Capital's approach?
Open the platform