merton.extensions.creditgrades

CreditGrades (Finger, Finkelstein, Pan, Lardy, Ta & Tierney, 2002).

The CreditGrades model is the RiskMetrics open-standard structural credit model. It generalises Merton by:

  1. Stochastic default barrier — the recovery ratio L is log-normally distributed (log L = log L_bar λ²/2 + λZ, Z ~ N(0, 1)), so the barrier itself is uncertain. This widens short-horizon credit spreads relative to Merton.

  2. Reference firm valueV_0 = S_0 + L_bar · D per share, where S is equity, D is debt per share, and L_bar is the mean recovery ratio.

  3. Asset volatility from equity volatilityσ = σ_E · S/(S + L_bar·D), the standard leverage-adjusted formula.

Closed-form survival probability (the practical approximation used in the tech doc):

\[P(t) = \Phi\!\left(-\frac{A_t}{2} + \frac{\log d}{A_t}\right) - d\,\Phi\!\left(-\frac{A_t}{2} - \frac{\log d}{A_t}\right),\]

with

\[A_t^2 = \sigma^2 t + \lambda^2,\qquad d = \frac{V_0}{L\,D}\,e^{\lambda^2}.\]

The implied flat hazard rate is h(t) = -\log P(t) / t; the CDS spread is h(t) · LGD.

References

Finger, C. C., Finkelstein, V., Pan, G., Lardy, J.-P., Ta, T., Tierney, J. (2002). CreditGrades Technical Document. RiskMetrics Group.

Attributes

Classes

CreditGradesModel

CreditGrades-style structural credit model.

Functions

creditgrades_survival(→ merton._typing.FloatArray)

Survival probability P(t) under CreditGrades.

creditgrades_pd(→ merton._typing.FloatArray)

1 - creditgrades_survival(...) — risk-neutral PD over [0, T].

creditgrades_spread(→ merton._typing.FloatArray)

CreditGrades flat-hazard CDS spread.

Module Contents

merton.extensions.creditgrades.DEFAULT_LBAR = 0.5[source]
merton.extensions.creditgrades.DEFAULT_LAMBDA = 0.3[source]
merton.extensions.creditgrades.creditgrades_survival(equity: merton._typing.ArrayLike, equity_vol: merton._typing.ArrayLike, debt_per_share: merton._typing.ArrayLike, T: merton._typing.ArrayLike, *, lbar: float = DEFAULT_LBAR, lam: float = DEFAULT_LAMBDA) merton._typing.FloatArray[source]

Survival probability P(t) under CreditGrades.

Parameters:
  • equity – Equity price S, annualised equity volatility σ_E, and debt-per-share D. All in the same currency units.

  • equity_vol – Equity price S, annualised equity volatility σ_E, and debt-per-share D. All in the same currency units.

  • debt_per_share – Equity price S, annualised equity volatility σ_E, and debt-per-share D. All in the same currency units.

  • T – Horizon (years).

  • lbar – Mean recovery ratio (default 0.5).

  • lam – Standard deviation of log L (default 0.3).

merton.extensions.creditgrades.creditgrades_pd(equity: merton._typing.ArrayLike, equity_vol: merton._typing.ArrayLike, debt_per_share: merton._typing.ArrayLike, T: merton._typing.ArrayLike, *, lbar: float = DEFAULT_LBAR, lam: float = DEFAULT_LAMBDA) merton._typing.FloatArray[source]

1 - creditgrades_survival(...) — risk-neutral PD over [0, T].

merton.extensions.creditgrades.creditgrades_spread(equity: merton._typing.ArrayLike, equity_vol: merton._typing.ArrayLike, debt_per_share: merton._typing.ArrayLike, T: merton._typing.ArrayLike, *, lgd: merton._typing.ArrayLike = 0.6, lbar: float = DEFAULT_LBAR, lam: float = DEFAULT_LAMBDA, in_bps: bool = True) merton._typing.FloatArray[source]

CreditGrades flat-hazard CDS spread.

Returns -log(P(t))/t · LGD in basis points by default.

class merton.extensions.creditgrades.CreditGradesModel(*, lbar: float = DEFAULT_LBAR, lam: float = DEFAULT_LAMBDA, debt_per_share: float | None = None)[source]

Bases: merton.extensions.base.StructuralModel

CreditGrades-style structural credit model.

The model takes equity per share, equity volatility, and debt per share (all in the same currency units). For aggregate-value firms, convert to per-share by dividing by shares_outstanding.

method = 'creditgrades'[source]
lbar[source]
lam[source]
debt_per_share = None[source]
fit(firm: merton.core.firm.Firm) merton.extensions.base.StructuralResult[source]

Return a StructuralResult for firm.