merton jump diffusion
financepy.models.merton_jump_diffusion
Classes
MertonCalibrationResult
MertonCalibrationResult(
model,
sigma,
jump_intensity,
jump_mean,
jump_volatility,
fitted_vols,
market_vols,
vol_errors,
rmse,
mae,
max_abs_error,
optimizer_result,
)
Container for a Merton volatility-surface calibration.
Methods
success
No description available.
jump_compensator
No description available.
expected_jump_size
Expected proportional jump E[J-1].
MertonJumpDiffusion
MertonJumpDiffusion(
sigma,
jump_intensity,
jump_mean,
jump_volatility,
poisson_tolerance = 1e-12,
max_jumps = 200,
)
Merton jump-diffusion model for European equity options.
The risk-neutral stock-price process is
dS/S_- =
(r - q - lambda * kappa_j) dt
+ sigma dW
+ (J - 1) dN
where
log(J) ~ Normal(mu_j, delta_j^2)
and
kappa_j = E[J - 1]
= exp(mu_j + 0.5 * delta_j^2) - 1.
Parameters
----------
sigma : float
Diffusive volatility.
jump_intensity : float
Poisson jump intensity lambda, in jumps per year.
jump_mean : float
Mean log jump size mu_j.
jump_volatility : float
Standard deviation delta_j of log jump sizes.
poisson_tolerance : float
Remaining Poisson probability below which the pricing
summation is terminated.
max_jumps : int
Maximum number of jump terms in the pricing summation.
Methods
jump_compensator
Expected proportional jump:
E[J - 1]
=
exp(mu_j + 0.5 delta_j^2) - 1.
expected_jump_multiplier
Return E[J].
value
value(
self,
stock_price,
time_to_expiry,
strike_price,
risk_free_rate,
dividend_yield,
option_type = <OptionTypes.EUROPEAN_CALL: 1>,
)
Value a European option using Merton's Poisson-mixture solution.
Conditional on N_T=n jumps, log(S_T) is Gaussian. Therefore
the option value is a Poisson-weighted sum of Black-Scholes
values.
implied_volatility
implied_volatility(
self,
stock_price,
time_to_expiry,
strike_price,
risk_free_rate,
dividend_yield,
option_type = <OptionTypes.EUROPEAN_CALL: 1>,
)
Return Black-Scholes implied volatility of the Merton price.
volatility_smile
volatility_smile(
self,
stock_price,
time_to_expiry,
strikes,
risk_free_rate,
dividend_yield,
option_type = <OptionTypes.EUROPEAN_CALL: 1>,
)
Generate the Merton Black-Scholes implied-volatility smile.
volatility_surface
volatility_surface(
self,
stock_price,
strikes,
expiries,
risk_free_rates,
dividend_yields,
option_type = <OptionTypes.EUROPEAN_CALL: 1>,
)
Generate a matrix of Black-Scholes implied volatilities.
Returns
-------
vols : ndarray
Shape = (number of expiries, number of strikes).
calibrate
calibrate(
cls,
stock_price,
strikes,
expiries,
market_vols,
risk_free_rates,
dividend_yields,
option_type = <OptionTypes.EUROPEAN_CALL: 1>,
initial_guess = None,
lower_bounds = None,
upper_bounds = None,
weights = None,
calibration_type = 'VOL',
max_nfev = 3000,
)
Calibrate one global Merton parameter set to an entire
implied-volatility surface.
The calibrated parameters are
sigma
jump_intensity lambda
jump_mean mu_j
jump_volatility delta_j
Parameters
----------
market_vols : ndarray
Matrix of Black-Scholes implied volatilities with shape
(len(expiries), len(strikes))
calibration_type : str
"VOL"
Minimise errors directly in Black-Scholes implied
volatility.
"VEGA"
Minimise Black-Scholes vega-scaled price errors.
weights : ndarray or None
Optional calibration weights with the same dimensions
as market_vols.
Returns
-------
MertonCalibrationResult
Generated automatically from the FinancePy source code.
Do not edit this file manually.