# callMerton: Price of a European Call under Merton's Jump-Diffusion Model In enricoschumann/NMOF: Numerical Methods and Optimization in Finance

## Description

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

## Usage

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

## Value

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

Enrico Schumann

## References

Gilli, M., Maringer, D. and Schumann, E. (2011) Numerical Methods and Optimization in Finance. Elsevier. http://www.elsevierdirect.com/product.jsp?isbn=9780123756626

Merton, R.C. (1976) Option Pricing when Underlying Stock Returns are Discontinuous. Journal of Financial Economics 3(1–2), 125–144.

Schumann, E. (2016) Financial Optimisation with R (NMOF Manual). http://enricoschumann.net/NMOF.htm#NMOFmanual

`callCF`, `EuropeanCall`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19``` ```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) ```