Learn R Programming

NMOF (version 2.10-0)

callMerton: 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)

Value

Returns the value of the call (numeric) or, if implVol is

TRUE, a list of the value and the implied volatility.

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.

Author

Enrico Schumann

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

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

See Also

callCF, EuropeanCall

Examples

Run this code
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)

Run the code above in your browser using DataLab