Credit Conditions
v1.1 • updated February 9, 2026Abstract
We proxy credit conditions by combining spread‑level stress from corporate bond markets with equity‑implied volatility. Each input is robust‑normalised over a rolling window, averaged, and then exponentially smoothed to reduce transient spikes. Thresholds of ±0.75 on the final index map to tightening/easing regimes relevant for risk appetite and funding conditions.
1. Data
Inputs are sourced from FRED (St. Louis Fed) as a distribution layer, with underlying providers listed below. Each series is resampled to a common month‑end calendar before normalisation.
HY_OAS — ICE BofA US High Yield Option‑Adjusted Spread (FRED: BAMLH0A0HYM2)
- What it measures: the option‑adjusted spread of US high‑yield corporate bonds over a matched Treasury curve (credit risk + liquidity/risk premia).
- Typical frequency: daily or weekly (provider calendar + holidays can create gaps).
- Why it matters: a fast‑moving barometer of risk pricing in below‑investment‑grade credit; tends to widen materially in stress.
- Interpretation nuance: observed spreads embed expected default losses and a residual risk premium that can move with intermediary risk‑bearing capacity (often called an “excess bond premium”).
Reference: Gilchrist & Zakrajšek (2012), “Credit Spreads and Business Cycle Fluctuations” (AER). Link
FRED series page: Link
BBB_OAS — ICE BofA BBB US Corporate Option‑Adjusted Spread (FRED: BAMLC0A4CBBB)
- What it measures: the option‑adjusted spread for BBB‑rated US investment‑grade corporates (lowest IG tier).
- Typical frequency: daily or weekly.
- Why it matters: captures broad corporate funding conditions and “edge‑of‑IG” stress (rating‑migration / fallen‑angel risk can matter in downturns).
- Interpretation nuance: like HY, movements reflect both fundamentals (default/migration expectations) and time‑varying risk premia.
FRED series page: Link
VIXCLS — CBOE Volatility Index (FRED: VIXCLS)
- What it measures: market‑implied expected near‑term volatility for the S&P 500 derived from option prices.
- Typical frequency: daily close.
- Why it matters: a high‑frequency proxy for risk appetite and uncertainty that can lead credit in sudden risk‑off episodes.
- Interpretation nuance: VIX mixes expected variance (“uncertainty”) and the variance risk premium (risk compensation), so spikes can reflect pricing of tail risk rather than fundamentals alone.
Reference: Bekaert, Hoerova & Lo Duca (2013), decomposition of VIX into uncertainty vs risk aversion components. Link
FRED series page: Link
FRED (distribution layer)
- What it provides: stable identifiers, metadata, and retrieval for the above series.
- Practical nuance: series can exhibit holidays/gaps, provider backfills, and occasional revisions; resampling to month‑end helps align mixed frequencies before normalisation.
2. Normalisation
3. Composite Construction
- Inputs: Z\_{HY}, Z\_{BBB}, Z\_{VIX}.
- Raw index: arithmetic mean of the three z‑scores.
- Smoothing: exponential moving average with span = 3 months.
4. Regime Classification
5. Implementation (Python)
import pandas as pd
import numpy as np
def robust_z(s, win=36, min_win=18):
x = pd.to_numeric(s, errors="coerce").astype(float)
w = max(min_win, min(win, x.dropna().size))
med = x.rolling(w, min_periods=min_win).median()
mad = (x - med).abs().rolling(w, min_periods=min_win).median()
return (x - med) / (1.4826 * mad.replace(0, np.nan))
def ema(s, span=3):
return s.ewm(span=span, min_periods=1, adjust=False).mean()
c = df_credit_cond.copy()
c["Z_HY"] = robust_z(c["HY_OAS"])
c["Z_BBB"] = robust_z(c["BBB_OAS"])
c["Z_VIX"] = robust_z(c["VIXCLS"])
c["Credit_Conditions_Raw"] = c[["Z_HY","Z_BBB","Z_VIX"]].mean(axis=1)
c["Credit_Conditions"] = ema(c["Credit_Conditions_Raw"], span=3)
hi, lo = 0.75, -0.75
def _regime(v):
if pd.isna(v): return np.nan
return "Tightening" if v > hi else ("Easing" if v < lo else "Neutral")
c["Credit_Regime"] = c["Credit_Conditions"].apply(_regime)
df_sig_credit = c
6. Interpretation
- Tightening: widening credit spreads and/or rising equity volatility — risk‑off conditions, higher financing costs.
- Neutral: benign funding backdrop; spreads and volatility near typical ranges.
- Easing: narrowing spreads and subdued volatility — supportive for risk assets.
7. Assumptions & Limitations
- OAS series may be weekly; ensure proper frequency handling and alignment with daily VIX.
- VIX adds an equity‑risk dimension; if a pure credit view is required, omit or down‑weight.
- Static thresholds (±0.75) are heuristic; consider tuning for specific trading objectives.
8. Model interpretation guide (with academic anchors)
8.1 Read the index as “stress vs typical”, not levels
The composite is an average of robust z‑scores (median/MAD) across HY_OAS, BBB_OAS, and VIX, then smoothed with an EMA(3). Interpreting the value as a standardised deviation from its recent distribution avoids treating any raw spread/vol level as universally “good” or “bad”.
- > +0.75: conditions are tighter than typical (risk premia elevated).
- between −0.75 and +0.75: broadly normal / range‑bound.
- < −0.75: unusually easy / supportive conditions.
8.2 Diagnose which channel is driving the regime
Always read the regime alongside component z‑scores. A tightening reading driven by spreads is typically a funding‑cost / credit‑risk tightening; a tightening reading driven by VIX is often a risk‑aversion / uncertainty tightening that can be faster‑moving.
- Spread‑led tightening: more directly linked to corporate financing conditions and credit supply.
- VIX‑led tightening: may reflect event risk and variance risk premia; confirm persistence using the smoothed index and recent history.
Academic anchor: “excess bond premium” helps separate pure default expectations from time‑varying risk premia that tighten financial conditions. Gilchrist & Zakrajšek (2012). Link
8.3 Treat boundary flips as “transition”, not a hard cliff
Because classification thresholds are heuristic, readings near ±0.75 should be treated as transitional. Where possible, interpret “signal strength” using the magnitude of the index (e.g., modest vs acute tightening), and confirm that more than one component is aligned before raising confidence.
8.4 Practical mapping to macro narratives
- Tightening: elevated risk premia and/or volatility; historically consistent with slower risk‑taking, tighter credit supply, and higher required returns.
- Neutral: no strong abnormal stress signal; use other macro blocks for directional conviction.
- Easing: compressed premia; typically supportive for risk assets but can precede “late‑cycle complacency” if extremes persist.
Academic anchor: VIX can be decomposed into uncertainty and risk aversion components; spikes are not always equivalent in macro implication. Bekaert, Hoerova & Lo Duca (2013). Link