callMerton {NMOF} | R Documentation |
Price of a European Call under Merton's Jump–Diffusion Model
Description
Computes the price of a European Call under Merton's jump–diffusion model (and the equivalent Black–Scholes–Merton volatility)
Usage
callMerton(S, X, tau, r, q, v, lambda, muJ, vJ, N, implVol = FALSE)
Arguments
S |
current stock price |
X |
strike price |
tau |
time to maturity |
r |
risk-free rate |
q |
dividend rate |
v |
variance |
lambda |
jump intensity |
muJ |
mean jump-size |
vJ |
variance of log jump-size |
N |
The number of jumps. See Details. |
implVol |
compute equivalent Black–Scholes–Merton volatility?
Default is |
Details
The function computes the value of a plain-vanilla European call under
Merton's jump–diffusion model. Put values can be computed through
put–call-parity (see putCallParity
). If implVol
is TRUE
, the function also computes the implied volatility
necessary to obtain the same price under Black–Scholes–Merton. The
implied volatility is computed with uniroot
from the
stats package.
Note that the function takes variances as inputs (not volatilities).
The number of jumps N
typically can be set 10 or 20. (Just try to
increase N
and see how the results change.)
Value
Returns the value of the call (numeric) or, if implVol
is
TRUE
, a list of the value and the implied volatility.
Author(s)
Enrico Schumann
References
Gilli, M., Maringer, D. and Schumann, E. (2019) Numerical Methods and Optimization in Finance. 2nd edition. Elsevier. doi:10.1016/C2017-0-01621-X
Merton, R.C. (1976) Option Pricing when Underlying Stock Returns are Discontinuous. Journal of Financial Economics 3(1–2), 125–144.
Schumann, E. (2023) Financial Optimisation with R (NMOF Manual). http://enricoschumann.net/NMOF.htm#NMOFmanual
See Also
Examples
S <- 100; X <- 100; tau <- 1
r <- 0.0075; q <- 0.00
v <- 0.2^2
lambda <- 1; muJ <- -0.2; vJ <- 0.6^2
N <- 20
## jumps can make a difference
callMerton(S, X, tau, r, q, v, lambda, muJ, vJ, N, implVol = TRUE)
callCF(cf = cfMerton, S = S, X = X, tau = tau, r = r, q = q,
v = v, lambda = lambda, muJ = muJ, vJ = vJ, implVol = TRUE)
vanillaOptionEuropean(S,X,tau,r,q,v, greeks = FALSE)
lambda <- 0 ## no jumps
callMerton(S, X, tau, r, q, v, lambda, muJ, vJ, N, implVol = FALSE)
vanillaOptionEuropean(S,X,tau,r,q,v, greeks = FALSE)
lambda <- 1; muJ <- 0; vJ <- 0.0^2 ## no jumps, either
callMerton(S, X, tau, r, q, v, lambda, muJ, vJ, N, implVol = FALSE)
vanillaOptionEuropean(S,X,tau,r,q,v, greeks = FALSE)