PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_specfun_opt_jumpdiff_merton_price (s30ja)
Purpose
nag_specfun_opt_jumpdiff_merton_price (s30ja) computes the European option price using the Merton jump-diffusion model.
Syntax
[
p,
ifail] = s30ja(
calput,
x,
s,
t,
sigma,
r,
lambda,
jvol, 'm',
m, 'n',
n)
[
p,
ifail] = nag_specfun_opt_jumpdiff_merton_price(
calput,
x,
s,
t,
sigma,
r,
lambda,
jvol, 'm',
m, 'n',
n)
Description
nag_specfun_opt_jumpdiff_merton_price (s30ja) uses Merton's jump-diffusion model (
Merton (1976)) to compute the price of a European option. This assumes that the asset price is described by a Brownian motion with drift, as in the Black–Scholes–Merton case, together with a compound Poisson process to model the jumps. The corresponding stochastic differential equation is,
Here is the instantaneous expected return on the asset price, ; is the instantaneous variance of the return when the Poisson event does not occur; is a standard Brownian motion; is the independent Poisson process and where is the random variable change in the stock price if the Poisson event occurs and is the expectation operator over the random variable .
This leads to the following price for a European option (see
Haug (2007))
where
is the time to expiry;
is the strike price;
is the annual risk-free interest rate;
is the Black–Scholes–Merton option pricing formula for a European call (see
nag_specfun_opt_bsm_price (s30aa)).
where
is the total volatility including jumps;
is the expected number of jumps given as an average per year;
is the proportion of the total volatility due to jumps.
The value of a put is obtained by substituting the Black–Scholes–Merton put price for .
The option price is computed for each strike price in a set , , and for each expiry time in a set , .
References
Haug E G (2007) The Complete Guide to Option Pricing Formulas (2nd Edition) McGraw-Hill
Merton R C (1976) Option pricing when underlying stock returns are discontinuous Journal of Financial Economics 3 125–144
Parameters
Compulsory Input Parameters
- 1:
– string (length ≥ 1)
-
Determines whether the option is a call or a put.
- A call; the holder has a right to buy.
- A put; the holder has a right to sell.
Constraint:
or .
- 2:
– double array
-
must contain
, the th strike price, for .
Constraint:
, where , the safe range parameter, for .
- 3:
– double scalar
-
, the price of the underlying asset.
Constraint:
, where , the safe range parameter.
- 4:
– double array
-
must contain
, the th time, in years, to expiry, for .
Constraint:
, where , the safe range parameter, for .
- 5:
– double scalar
-
, the annual total volatility, including jumps.
Constraint:
.
- 6:
– double scalar
-
, the annual risk-free interest rate, continuously compounded. Note that a rate of 5% should be entered as 0.05.
Constraint:
.
- 7:
– double scalar
-
, the number of expected jumps per year.
Constraint:
.
- 8:
– double scalar
-
The proportion of the total volatility associated with jumps.
Constraint:
.
Optional Input Parameters
- 1:
– int64int32nag_int scalar
-
Default:
the dimension of the array
x.
The number of strike prices to be used.
Constraint:
.
- 2:
– int64int32nag_int scalar
-
Default:
the dimension of the array
t.
The number of times to expiry to be used.
Constraint:
.
Output Parameters
- 1:
– double array
-
.
contains , the option price evaluated for the strike price at expiry for and .
- 2:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Errors or warnings detected by the function:
-
-
On entry, was an illegal value.
-
-
Constraint: .
-
-
Constraint: .
-
-
Constraint: and .
-
-
Constraint: and .
-
-
Constraint: .
-
-
Constraint: .
-
-
Constraint: .
-
-
Constraint: .
-
-
Constraint: and .
-
-
Constraint: .
-
An unexpected error has been triggered by this routine. Please
contact
NAG.
-
Your licence key may have expired or may not have been installed correctly.
-
Dynamic memory allocation failed.
Accuracy
The accuracy of the output is dependent on the accuracy of the cumulative Normal distribution function,
, occurring in
. This is evaluated using a rational Chebyshev expansion, chosen so that the maximum relative error in the expansion is of the order of the
machine precision (see
nag_specfun_cdf_normal (s15ab) and
nag_specfun_erfc_real (s15ad)). An accuracy close to
machine precision can generally be expected.
Further Comments
None.
Example
This example computes the price of a European call with jumps. The time to expiry is months, the stock price is and the strike price is . The number of jumps per year is and the percentage of the total volatility due to jumps is . The risk-free interest rate is per year and the total volatility is per year.
Open in the MATLAB editor:
s30ja_example
function s30ja_example
fprintf('s30ja example results\n\n');
put = 'C';
lambda = 3;
s = 45;
sigma = 0.25;
r = 0.1;
jvol = 0.4;
x = [55.0];
t = [0.25];
[p, ifail] = s30ja( ...
put, x, s, t, sigma, r, lambda, jvol);
fprintf('\nMerton Jump-Diffusion Model\n European Call :\n');
fprintf(' Spot = %9.4f\n', s);
fprintf(' Volatility = %9.4f\n', sigma);
fprintf(' Rate = %9.4f\n', r);
fprintf(' Jumps = %9.4f\n', lambda);
fprintf(' Jump Vol = %9.4f\n\n', jvol);
fprintf(' Strike Expiry Option Price\n');
for i=1:1
for j=1:1
fprintf('%9.4f %9.4f %9.4f\n', x(i), t(j), p(i,j));
end
end
s30ja example results
Merton Jump-Diffusion Model
European Call :
Spot = 45.0000
Volatility = 0.2500
Rate = 0.1000
Jumps = 3.0000
Jump Vol = 0.4000
Strike Expiry Option Price
55.0000 0.2500 0.2417
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015