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
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¶
Calibrate Black-Cox on a single firm. |
Functions¶
|
Closed-form Black-Cox risk-neutral 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 barrierK(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.StructuralModelCalibrate Black-Cox on a single firm.
The model still needs the asset value
Aand 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.- fit(firm: merton.core.firm.Firm) merton.extensions.base.StructuralResult[source]¶
Return a
StructuralResultforfirm.