Problem
Desk stress testing today is largely manual. A risk manager imagines a
shock and guesses what the other ~40 factors do:
"If equities, oil and rates take a defined shock, what does everything
else do — and how uncertain is that?"
Those guesses are inconsistent, undocumented, and ignore historical
co-movement. This engine replaces the guessing: one analyst pins three
numbers; the model implies the other 38 — with a defensible distribution,
not a hunch.
What it does
-
Universe A — 41 weakly correlated cross-asset factors
(equity, crypto, energy, metals, ags, FX, rates), delivered end-to-end.
-
Universe B — highly collinear single-market factors (a
rates curve, a gas-hub complex) conditioned stably in PCA
space (level / slope / curvature).
-
Extrapolation — pinning a never-seen shock still yields a
coherent scenario, because conditioning is linear in the pin.
Methods
- Conditional multivariate Gaussian (Schur-complement + antithetic Monte-Carlo)
- Gaussian copula & Student-t copula with empirical marginals (tail dependence)
- EWMA, Ledoit–Wolf, cluster-structured block shrinkage, PCA / Barra factor covariance
- Robust covariance selection: NLL, QLIKE, GMV realised vol, PSD gate, Diebold–Mariano
- Contract-roll stitching (M1→M2→M3) with a grid-searched weighted roll
- PCA-space conditioning for collinear curves (Universe B)
- Out-of-sample validation on the 20 worst historical stress days
Outputs
- Conditional-mean scenario table across all risk factors
- Mean + adverse add-on (5% / 95% conditional quantile bands)
- Full Monte-Carlo sampled distribution (Gaussian & Student-t copula)
- Crisis-regime correlation deltas (GFC 2008, COVID 2020, Strait of Hormuz 2025)
- CSV / Parquet artifacts and an out-of-sample validation summary