Cross-asset stress
Preparing the risk report
Checking the latest stored observations, evidence coverage and risk-state calculations.Reading market observations
In progressCalculating cross-asset stress
WaitingAssembling the risk report
Waiting
Cross-asset stress
Reading market observations
In progressCalculating cross-asset stress
WaitingAssembling the risk report
WaitingMethodology
Source observations become features, features form eight signals, and grouped evidence families form four layers. These are provisional stress scores, not probabilities.
z = (current value − prior mean) / prior sample standard deviationscore = clamp(50 + 20 × direction × z, 0, 100)
The current observation is excluded from its reference history. Direction is +1 when higher values imply more stress and −1 when lower values imply more stress. A zero standard deviation gives z = 0. A score of 50 means the historical mean, not a 50% chance of a crash. Energy uses its separate persistence formula below.
| Frequency | Target history | Minimum history | Age limit |
|---|---|---|---|
| daily | 2520 prints | 60 prior prints | 7 business days |
| weekly | 520 prints | 26 prior prints | 21 calendar days |
| monthly | 120 prints | 24 prior prints | 75 calendar days |
| quarterly | 40 prints | 12 prior prints | 150 calendar days |
VIX short normalization uses 20 prior prints. Source-specific release allowances apply to slower economic releases. Missing inputs, stale observations and insufficient history prevent scoring; they are never replaced with zero. Dollar and basis-point conversions happen before scoring.
Each signal is the weighted sum of its component scores. Every required component must be available; weights are never redistributed around missing data.
Price trend and volatility are averaged into one market family. Inflation and energy are averaged into one inflation/energy family. Both constituent signals are required. Bank lending uses the lending-standards feature. Macro and valuation requires rates and inflation/energy; Spreads and prices requires market and credit; Funding transmission requires funding, labour and lending. Available families are equally weighted after those gates pass. Liquidity and deleveraging requires market, credit and funding and takes their minimum.
Coverage is available families divided by configured families. Missing valuation, breadth, earnings, private credit and positioning remain explicit. Layer scores are partial evidence until these gaps close.
Data currency counts features within configured source-age limits at the snapshot date. It does not establish that every latest release has been collected, that every feature has enough normalization history, or that the report is current today. Risk coverage counts distinct configured families once across layers, with missing families shown explicitly; shared underlying data can still make families dependent. Individual layer percentages retain their own family denominators.
Validation is separate: current observations and complete configured coverage do not validate forecasts. Historical publication timing and out-of-sample probability calibration remain unverified. Missing core inputs make a layer unscored, rather than a low-risk observation. An inactive but incomplete model cannot establish an all-clear.
The rates panel attributes the existing score to yield levels (30% real + 20% nominal), the 63-session real-yield change (20%), term premium (15%) and curve inversion pressure (15%). Each contribution equals its normalized component score × its fixed weight; the five contributions must reconcile with the stored rates score before attribution is shown. Incomplete inputs are not reweighted.
Yield changes and the 10Y–3M spread are displayed in basis points: 1 percentage point = 100 bp. The curve score normalizes max(0, −spread), so zero current inversion can still produce a nonzero score relative to prior history. Term premium is a model estimate, not an observed yield component measured without uncertainty. Nominal-yield change is context only. Each source keeps its own date; the panel does not subtract unmatched prints to infer inflation expectations or identify the cause of a rates move.
The energy context shows Brent returns over 21 and 63 S&P sessions without multiplying them by persistence. “Elevated rise” requires a positive 21-session return and its normalized score to reach 60; it is a relative-move label, not a forecast threshold. A rising move without sufficient normalization history is not labeled elevated.
Persistence is the share of available oil prints in the latest 30 S&P sessions with a positive 252-session return and a trailing z-score of at least 1. At least 24 valid prints are required. It is not the share of days when prices rose. Persistent oil stress remains min(100, 40 × max(0, annual-return z-score) × persistence fraction). Thus a large recent move can coexist with low persistent stress. Pump-price returns are supporting diagnostics; none of these additional displays changes the energy weight or layer score. Each reading carries its own observation date.
Contained: below 55. Building: 55 to below 60. Elevated: 60 to 75. Severe: above 75. An unavailable score is Insufficient data.
Building is a provisional interpretation threshold, not a fitted downturn trigger. It begins above the normalized midpoint. Contained means the escalation threshold has not been reached; it does not establish economic safety. Weighted signals and layers are not percentiles. Energy uses a different scale, so 50 is not its historical midpoint.
Layers use a 5-point exit margin: Building persists above 50, Elevated at ≥55 and Severe above 70. This applies only to an earlier snapshot within four calendar days, with the same version and missing families. Individual drivers use the ordinary thresholds. Joint market and credit repricing requires each family to reach 60.
| Feature & sources | Calculation | How it is used |
|---|---|---|
| HY OASBAMLH0A0HYM2 | Latest source value × 100 to basis pointsOutput: bp | Credit confirmation: 35%Higher values increase normalized stress. |
| HY widening · 1 sessionsBAMLH0A0HYM2 | (value now − value 1 S&P sessions earlier) × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| HY widening · 5 sessionsBAMLH0A0HYM2 | (value now − value 5 S&P sessions earlier) × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| HY widening · 20 sessionsBAMLH0A0HYM2 | (value now − value 20 S&P sessions earlier) × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| HY widening · 60 sessionsBAMLH0A0HYM2 | (value now − value 60 S&P sessions earlier) × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| HY widening · 63 sessionsBAMLH0A0HYM2 | (value now − value 63 S&P sessions earlier) × 100 to basis pointsOutput: bp | Credit confirmation: 20%Higher values increase normalized stress. |
| IG OASBAMLC0A0CM | Latest source value × 100 to basis pointsOutput: bp | Credit confirmation: 15%Higher values increase normalized stress. |
| IG widening · 1 sessionsBAMLC0A0CM | (value now − value 1 S&P sessions earlier) × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| IG widening · 5 sessionsBAMLC0A0CM | (value now − value 5 S&P sessions earlier) × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| IG widening · 20 sessionsBAMLC0A0CM | (value now − value 20 S&P sessions earlier) × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| IG widening · 60 sessionsBAMLC0A0CM | (value now − value 60 S&P sessions earlier) × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| IG widening · 63 sessionsBAMLC0A0CM | (value now − value 63 S&P sessions earlier) × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| HY minus IGBAMLH0A0HYM2 + BAMLC0A0CM | (first source − second source), matched on observation date × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| HY–IG divergence · 20 sessionsBAMLH0A0HYM2 + BAMLC0A0CM | Change over 20 sessions in (HY − IG) × 100 to basis pointsOutput: bp | Credit confirmation: 15%Higher values increase normalized stress. |
| HY acceleration · 20 sessionsBAMLH0A0HYM2 | (change over the latest 20 sessions − change over the preceding 20 sessions) × 100 to basis pointsOutput: bp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| C&I lending standardsDRTSCILM | Latest source valueOutput: % | Credit confirmation: 15% · Bank-lending family: 100%Higher values increase normalized stress. |
| C&I tightening · quarterly changeDRTSCILM | (value now − value 1 quarters earlier)Output: pp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| S&P drawdown · 252 sessionsSP500 | 100 × (latest close / highest close in 252 sessions − 1)Output: % | Price-trend confirmation: 25%Lower values increase normalized stress. |
| S&P return · 20 sessionsSP500 | 100 × (value now / value 20 S&P sessions earlier − 1)Output: % | Price-trend confirmation: 15%Lower values increase normalized stress. |
| S&P return · 60 sessionsSP500 | 100 × (value now / value 60 S&P sessions earlier − 1)Output: % | Price-trend confirmation: 15%Lower values increase normalized stress. |
| S&P distance from 50DMASP500 | 100 × (latest close / mean of 50 closes − 1)Output: % | Price-trend confirmation: 15%Lower values increase normalized stress. |
| S&P distance from 200DMASP500 | 100 × (latest close / mean of 200 closes − 1)Output: % | Price-trend confirmation: 20%Lower values increase normalized stress. |
| 50DMA relative to 200DMASP500 | 100 × (mean of 50 closes / mean of 200 closes − 1)Output: % | Price-trend confirmation: 10%Lower values increase normalized stress. |
| VIXVIXCLS | Latest source valueOutput: % | Volatility stress: 35%Higher values increase normalized stress. |
| VIX · 20-print normalizationVIXCLS | Latest source valueOutput: % | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| VIX change · 5 sessionsVIXCLS | (value now − value 5 S&P sessions earlier)Output: pp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| VIX change · 20 sessionsVIXCLS | (value now − value 20 S&P sessions earlier)Output: pp | Volatility stress: 30%Higher values increase normalized stress. |
| S&P realized volatility · 20 sessionsSP500 | Sample standard deviation of 20 log returns × √252 × 100Output: % | Volatility stress: 35%Higher values increase normalized stress. |
| VIX / VIX3M · implied maturity slopeVIXCLS + CBOE_VIX3M | First source / second source, matched on observation dateOutput: ratio | Supporting diagnostic; does not affect a layer score |
| VVIX · volatility of volatilityCBOE_VVIX | Latest source valueOutput: index | Supporting diagnostic; does not affect a layer score |
| SKEW · tail pricingCBOE_SKEW | Latest source valueOutput: index | Supporting diagnostic; does not affect a layer score |
| VIX minus realized volatilityVIXCLS + SP500 | VIX − S&P realized volatility over 20 sessions, both annualized percentOutput: pp | Supporting diagnostic; does not affect a layer score |
| 10Y real yieldDFII10 | Latest source valueOutput: % | Discount-rate pressure: 30%Higher values increase normalized stress. |
| 10Y TreasuryDGS10 | Latest source valueOutput: % | Discount-rate pressure: 20%Higher values increase normalized stress. |
| 2Y TreasuryDGS2 | Latest source valueOutput: % | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| 3M TreasuryDGS3MO | Latest source valueOutput: % | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| 10Y breakevenT10YIE | Latest source valueOutput: % | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| 10Y term premium · THREEFYTP10THREEFYTP10 | Latest source valueOutput: % | Discount-rate pressure: 15%Higher values increase normalized stress. |
| 10Y real yield change · 63 sessionsDFII10 | (value now − value 63 S&P sessions earlier)Output: pp | Discount-rate pressure: 20%Higher values increase normalized stress. |
| 10Y yield change · 63 sessionsDGS10 | (value now − value 63 S&P sessions earlier)Output: pp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| 10Y–3M curveT10Y3M | Latest source valueOutput: pp | Supporting diagnostic; does not affect a layer scoreLower values increase normalized stress. |
| Curve inversion pressureT10Y3M | max(0, −(10Y Treasury − 3M Treasury)); inversion pressure onlyOutput: pp | Discount-rate pressure: 15%Higher values increase normalized stress. |
| Effective Fed funds · monthlyFEDFUNDS | Latest source valueOutput: % | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| Ex-post real policy rate · core PCEFEDFUNDS + PCEPILFE | Monthly effective Fed funds − matched-month core PCE year-on-year inflationOutput: pp | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| CPI YoYCPIAUCSL | 100 × (index now / index 12 calendar months earlier − 1)Output: % | Inflation pressure: 25%Higher values increase normalized stress. |
| CPI · 3m annualizedCPIAUCSL | 100 × ((index now / index 3 calendar months earlier)^(12/3) − 1)Output: % | Inflation pressure: 25%Higher values increase normalized stress. |
| Core CPI YoYCPILFESL | 100 × (index now / index 12 calendar months earlier − 1)Output: % | Inflation pressure: 25%Higher values increase normalized stress. |
| Core CPI · 3m annualizedCPILFESL | 100 × ((index now / index 3 calendar months earlier)^(12/3) − 1)Output: % | Inflation pressure: 25%Higher values increase normalized stress. |
| PPI commodities YoYPPIACO | 100 × (index now / index 12 calendar months earlier − 1)Output: % | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| Brent return · 21 sessionsDCOILBRENTEU | 100 × (value now / value 21 S&P sessions earlier − 1)Output: % | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| Brent return · 63 sessionsDCOILBRENTEU | 100 × (value now / value 63 S&P sessions earlier − 1)Output: % | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| Brent return · 252 sessionsDCOILBRENTEU | 100 × (value now / value 252 S&P sessions earlier − 1)Output: % | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| US regular gasolineGASREGW | Latest source valueOutput: $/gallon | Supporting diagnostic; does not affect a layer score |
| US regular gasoline return · 4 weeksGASREGW | 100 × (value now / value 4 weeks earlier − 1)Output: % | Supporting diagnostic; does not affect a layer score |
| US regular gasoline return · 13 weeksGASREGW | 100 × (value now / value 13 weeks earlier − 1)Output: % | Supporting diagnostic; does not affect a layer score |
| US regular gasoline return · 52 weeksGASREGW | 100 × (value now / value 52 weeks earlier − 1)Output: % | Supporting diagnostic; does not affect a layer score |
| US dieselGASDESW | Latest source valueOutput: $/gallon | Supporting diagnostic; does not affect a layer score |
| US diesel return · 4 weeksGASDESW | 100 × (value now / value 4 weeks earlier − 1)Output: % | Supporting diagnostic; does not affect a layer score |
| US diesel return · 13 weeksGASDESW | 100 × (value now / value 13 weeks earlier − 1)Output: % | Supporting diagnostic; does not affect a layer score |
| US diesel return · 52 weeksGASDESW | 100 × (value now / value 52 weeks earlier − 1)Output: % | Supporting diagnostic; does not affect a layer score |
| Brent volatility · 20 available oil printsDCOILBRENTEU | Sample standard deviation of 20 log returns × √252 × 100; available oil prints, not a complete session calendarOutput: % | Supporting diagnostic; does not affect a layer score |
| Oil persistence · available prints in 30 sessions (≥80% coverage)DCOILBRENTEU | Share of available oil prints in 30 S&P sessions with positive 252-session return and trailing return z-score ≥ 1; at least 24 prints requiredOutput: % | Supporting diagnostic; does not affect a layer score |
| Persistent positive oil shockDCOILBRENTEU | max(0, z-score of positive 252-session Brent return) × oil persistence fraction; score = min(100, shock × 40)Output: z × persistence | Energy shock: 100%Higher values increase normalized stress. |
| Wednesday liquidity proxy · 1 weeksWALCL + WDTGAL + RRPONTSYD | Change over exactly 1 calendar weeks in (WALCL / 1,000 − WDTGAL / 1,000 − RRPONTSYD), all on the same Wednesday, in USD billionsOutput: $bn | Supporting diagnostic; does not affect a layer scoreLower values increase normalized stress. |
| Wednesday liquidity proxy · 4 weeksWALCL + WDTGAL + RRPONTSYD | Change over exactly 4 calendar weeks in (WALCL / 1,000 − WDTGAL / 1,000 − RRPONTSYD), all on the same Wednesday, in USD billionsOutput: $bn | Liquidity and funding: 35%Lower values increase normalized stress. |
| Wednesday liquidity proxy · 13 weeksWALCL + WDTGAL + RRPONTSYD | Change over exactly 13 calendar weeks in (WALCL / 1,000 − WDTGAL / 1,000 − RRPONTSYD), all on the same Wednesday, in USD billionsOutput: $bn | Supporting diagnostic; does not affect a layer scoreLower values increase normalized stress. |
| SOFR minus IORBSOFR + IORB | (first source − second source), matched on observation date × 100 to basis pointsOutput: bp | Liquidity and funding: 35%Higher values increase normalized stress. |
| Reserve balancesWRESBAL | Latest value ÷ 1,000 to USD billionsOutput: $bn | Supporting diagnostic; does not affect a layer scoreLower values increase normalized stress. |
| NFCINFCI | Latest source valueOutput: index | Liquidity and funding: 30%Higher values increase normalized stress. |
| NFCICREDITNFCICREDIT | Latest source valueOutput: index | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| NFCILEVERAGENFCILEVERAGE | Latest source valueOutput: index | Supporting diagnostic; does not affect a layer scoreHigher values increase normalized stress. |
| Claims 4w average above 52w lowIC4WSA | 100 × (latest four-week-average claims / lowest print in 52 weeks − 1)Output: % | Labour deterioration: 25%Higher values increase normalized stress. |
| Continuing claims · 13w slopeCCSA | Least-squares slope of 13 weekly claims values against week indexOutput: claims/week | Labour deterioration: 15%Higher values increase normalized stress. |
| Continuing claims increasing streakCCSA | Number of consecutive weekly increases; an unchanged or falling print resets the countOutput: weeks | Supporting diagnostic; does not affect a layer score |
| Sahm ruleSAHMREALTIME | Latest source valueOutput: pp | Labour deterioration: 20%Higher values increase normalized stress. |
| Unemployment change · 3mUNRATE | (value now − value 3 months earlier)Output: pp | Labour deterioration: 20%Higher values increase normalized stress. |
| Payroll growth · 3mPAYEMS | 100 × (value now / value 3 months earlier − 1)Output: % | Labour deterioration: 20%Lower values increase normalized stress. |
| Manufacturing hours change · 3mAWHMAN | (value now − value 3 months earlier)Output: hours | Supporting diagnostic; does not affect a layer scoreLower values increase normalized stress. |
| Temporary employment growth · 3mTEMPHELPS | 100 × (value now / value 3 months earlier − 1)Output: % | Supporting diagnostic; does not affect a layer scoreLower values increase normalized stress. |
The research replay checks the agreed 1998, 2000–02, 2008, 2011, 2015–16, 2018, 2020, 2022 and 2025–26 cases. Each period is checked for source coverage before evaluating alerts. Unsupported periods remain unavailable.
The outcome is a fall of at least 10%, 15% or 20% below the signal-day S&P close within the next 63 observed sessions. A full future horizon is required. This differs from peak-to-trough drawdown, which is reported separately for event context.
Vintage-aware replay excludes revisions dated after each signal date. Retrospective replay uses the latest revisions and is labelled accordingly. Neither qualifies as validated predictive performance until publication timing is audited. Daily warnings overlap, so episode counts and unavailable days are reported alongside daily hit rates. Thresholds are frozen before running the cases; this is not an out-of-sample calibrated probability model.