merton.extensions.jump_diffusion¶
Merton-style jump-diffusion structural model (Zhou, 1997).
Adds a compound-Poisson jump component to the standard GBM asset process. The closed-form Poisson-weighted series for the European-style default probability follows from the same trick Merton (1976) used to price options under jumps:
with N a Poisson process of intensity \lambda, Y \sim \text{lognormal}(\mu_J, \sigma_J^2),
and \kappa = E[Y] - 1 = e^{\mu_J + \sigma_J^2/2} - 1 chosen so the
total drift remains \mu.
Conditional on exactly n jumps in [0, T], the asset log-return is
Gaussian with parameters
The unconditional risk-neutral PD at horizon T is therefore
where d_2^{(n)} is the Merton-style distance to default using the
jump-adjusted drift and variance m_n, s_n^2.
References
Merton, R. C. (1976). Option Pricing when Underlying Stock Returns are Discontinuous. Journal of Financial Economics 3 (1-2), 125-144.
Zhou, C. (1997). A Jump-Diffusion Approach to Modeling Credit Risk and Valuing Defaultable Securities. Federal Reserve Working Paper 97-15.
Classes¶
Zhou-style jump-diffusion structural model. |
Functions¶
|
Merton-jump risk-neutral PD via the Poisson-weighted series. |
|
Simulate Merton-jump asset paths. Returns shape |
Module Contents¶
- merton.extensions.jump_diffusion.jump_diffusion_pd(asset_value: merton._typing.ArrayLike, asset_vol: merton._typing.ArrayLike, debt: merton._typing.ArrayLike, rf: merton._typing.ArrayLike, T: merton._typing.ArrayLike, *, jump_intensity: float = 0.5, jump_mean: float = -0.05, jump_std: float = 0.15, dividend_yield: merton._typing.ArrayLike = 0.0, max_terms: int = 50) merton._typing.FloatArray[source]¶
Merton-jump risk-neutral PD via the Poisson-weighted series.
- Parameters:
asset_value – Standard Merton inputs.
asset_vol – Standard Merton inputs.
debt – Standard Merton inputs.
rf – Standard Merton inputs.
T – Standard Merton inputs.
jump_intensity –
\lambda— average number of jumps per year (default 0.5).jump_mean –
\mu_J— mean of the log-jump size (default -0.05 ≈ small negative shock).jump_std –
\sigma_J— std of the log-jump size (default 0.15).max_terms – Truncation point for the infinite Poisson series. Values beyond the Poisson mean
\lambda T + 6\sqrt{\lambda T}contribute negligible probability mass.
- merton.extensions.jump_diffusion.simulate_jump_diffusion(*, asset_value: float, drift: float, sigma: float, T: float, n_paths: int, n_steps: int, jump_intensity: float, jump_mean: float, jump_std: float, seed: int | None = None) numpy.ndarray[source]¶
Simulate Merton-jump asset paths. Returns shape
(n_paths, n_steps + 1).
- class merton.extensions.jump_diffusion.JumpDiffusionModel(*, jump_intensity: float = 0.5, jump_mean: float = -0.05, jump_std: float = 0.15, tol: float = 1e-08, max_iter: int = 200)[source]¶
Bases:
merton.extensions.base.StructuralModelZhou-style jump-diffusion structural model.
Calibrates
(A, σ_A)via JMR on the equity inputs (treating jumps as an extension of the Merton baseline), then layers the Poisson-weighted jump series on top for the PD.- fit(firm: merton.core.firm.Firm) merton.extensions.base.StructuralResult[source]¶
Return a
StructuralResultforfirm.