merton.extensions.black_cox

Black-Cox (1976) first-passage default model.

Where Merton lets the firm default only at the debt-maturity horizon T, Black-Cox lets the firm default at the first time the asset value crosses a barrier K(t). The barrier is typically constant (K(t) = K) or exponentially decaying (K(t) = K · e^{-γ(T-t)}); both have closed-form first-passage probabilities.

Mathematics

Let X_t = log(A_t). Under the risk-neutral measure X is a Brownian motion with drift ν = r - q - σ_A²/2 and volatility σ_A. Define a = log(A_0 / K) > 0. For the standard constant-barrier case, the first-passage probability that X drops below log K somewhere in [0, T] is

\[\mathrm{PD}_{BC} = \Phi\!\left(\frac{-a - \nu T}{\sigma_A \sqrt{T}}\right) + \exp\!\left(-\frac{2 \nu a}{\sigma_A^2}\right)\, \Phi\!\left(\frac{-a + \nu T}{\sigma_A \sqrt{T}}\right).\]

When γ > 0 the barrier K(t) = K_T · e^{-γ(T-t)} grows over time toward K_T. A change of variables Y_t = log(A_t / K(t)) reduces this to a constant-barrier first-passage problem with shifted drift ν - γ; the formula above applies with that substitution.

References

Black, F. and Cox, J. C. (1976). Valuing corporate securities: Some effects of bond indenture provisions. Journal of Finance 31 (2), 351-367.

Classes

BlackCoxModel

Calibrate Black-Cox on a single firm.

Functions

black_cox_pd(→ merton._typing.FloatArray)

Closed-form Black-Cox risk-neutral PD.

black_cox_survival(→ merton._typing.FloatArray)

1 - black_cox_pd(...).

Module Contents

merton.extensions.black_cox.black_cox_pd(asset_value: merton._typing.ArrayLike, asset_vol: merton._typing.ArrayLike, debt: merton._typing.ArrayLike, rf: merton._typing.ArrayLike, T: merton._typing.ArrayLike, *, dividend_yield: merton._typing.ArrayLike = 0.0, barrier_growth_rate: merton._typing.ArrayLike = 0.0) merton._typing.FloatArray[source]

Closed-form Black-Cox risk-neutral PD.

Parameters:
  • asset_value – Standard structural-model inputs.

  • asset_vol – Standard structural-model inputs.

  • debt – Standard structural-model inputs.

  • rf – Standard structural-model inputs.

  • T – Standard structural-model inputs.

  • dividend_yield – Continuous dividend yield q (subtracted from the drift).

  • barrier_growth_rateγ in the time-dependent barrier K(t) = K_T · e^{-γ(T-t)}. γ = 0 (the default) corresponds to a constant barrier.

Returns:

Risk-neutral probability that the asset value touches K(t) somewhere on [0, T].

Return type:

FloatArray

merton.extensions.black_cox.black_cox_survival(asset_value: merton._typing.ArrayLike, asset_vol: merton._typing.ArrayLike, debt: merton._typing.ArrayLike, rf: merton._typing.ArrayLike, T: merton._typing.ArrayLike, *, dividend_yield: merton._typing.ArrayLike = 0.0, barrier_growth_rate: merton._typing.ArrayLike = 0.0) merton._typing.FloatArray[source]

1 - black_cox_pd(...).

class merton.extensions.black_cox.BlackCoxModel(*, barrier_growth_rate: float = 0.0, recovery_rate: float = 0.5, tol: float = 1e-08, max_iter: int = 200)[source]

Bases: merton.extensions.base.StructuralModel

Calibrate Black-Cox on a single firm.

The model still needs the asset value A and asset volatility σ_A; we obtain them via the same JMR two-equation system used by Merton (taking the user’s equity_vol as the input). For real practitioners with credit-spread data, joint calibration to bonds / CDS is the future-phase route.

method = 'black_cox'[source]
barrier_growth_rate[source]
recovery_rate[source]
tol = 1e-08[source]
max_iter = 200[source]
fit(firm: merton.core.firm.Firm) merton.extensions.base.StructuralResult[source]

Return a StructuralResult for firm.