callMerton function

Price of a European Call under Merton's Jump--Diffusion Model

Price of a European Call under Merton's Jump--Diffusion Model

Computes the price of a European Call under Merton's jump--diffusion model (and the equivalent Black--Scholes--Merton volatility)

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 FALSE.

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.)

Returns

Returns the value of the call (numeric) or, if implVol is TRUE, a list of the value and the implied volatility.

References

Gilli, M., Maringer, D. and Schumann, E. (2019) Numerical Methods and Optimization in Finance. 2nd edition. Elsevier. tools:::Rd_expr_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). https://enricoschumann.net/NMOF.htm#NMOFmanual

Author(s)

Enrico Schumann

See Also

callCF, EuropeanCall

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)