hide long namesshow long names
hide short namesshow short names
Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

NAG Toolbox: nag_specfun_opt_asian_geom_price (s30sa)

Purpose

nag_specfun_opt_asian_geom_price (s30sa) computes the Asian geometric continuous average-rate option price.

Syntax

[p, ifail] = s30sa(calput, x, s, t, sigma, r, b, 'm', m, 'n', n)
[p, ifail] = nag_specfun_opt_asian_geom_price(calput, x, s, t, sigma, r, b, 'm', m, 'n', n)

Description

nag_specfun_opt_asian_geom_price (s30sa) computes the price of an Asian geometric continuous average-rate option for constant volatility, σσ, risk-free rate, rr, and cost of carry, bb (see Kemna and Vorst (1990)). For a given strike price, XX, the price of a call option with underlying price, SS, and time to expiry, TT, is
Pcall = S e (br) T Φ (d1) X erT Φ (d2) ,
Pcall = S e ( b--r ) T Φ ( d- 1 ) - X e-rT Φ ( d- 2 ) ,
and the corresponding put option price is
Pput = X erT Φ (d2) S e (br) T Φ (d1) ,
Pput = X e-rT Φ ( -d-2 ) - S e ( b--r ) T Φ ( - d-1 ) ,
where
d1 = ( ln(S / X) + (b + σ2 / 2) T )/( σ sqrt(T) )
d-1 = ln(S/X) + ( b- + σ-2 / 2 ) T σ- T
and
d2 = d1 σ sqrt(T) ,
d-2 = d-1 - σ- T ,
with
σ = σ/(sqrt(3)) ,  b = (1/2) (b(σ2)/6) .
σ- = σ 3 ,  b- = 1 2 ( b- σ2 6 ) .
ΦΦ is the cumulative Normal distribution function,
Φ(x) = 1/(sqrt(2π)) x exp(y2 / 2) dy .
Φ(x) = 1 2π - x exp( -y2/2 ) dy .

References

Kemna A and Vorst A (1990) A pricing method for options based on average asset values Journal of Banking and Finance 14 113–129

Parameters

Compulsory Input Parameters

1:     calput – string (length ≥ 1)
Determines whether the option is a call or a put.
calput = 'C'calput='C'
A call. The holder has a right to buy.
calput = 'P'calput='P'
A put. The holder has a right to sell.
Constraint: calput = 'C'calput='C' or 'P''P'.
2:     x(m) – double array
m, the dimension of the array, must satisfy the constraint m1m1.
x(i)xi must contain XiXi, the iith strike price, for i = 1,2,,mi=1,2,,m.
Constraint: x(i)z ​ and ​ x(i) 1 / z xiz ​ and ​ xi 1 / z , where z = x02am () z = x02am () , the safe range parameter, for i = 1,2,,mi=1,2,,m.
3:     s – double scalar
SS, the price of the underlying asset.
Constraint: sz ​ and ​s1.0 / zsz ​ and ​s1.0/z, where z = x02am()z=x02am(), the safe range parameter.
4:     t(n) – double array
n, the dimension of the array, must satisfy the constraint n1n1.
t(i)ti must contain TiTi, the iith time, in years, to expiry, for i = 1,2,,ni=1,2,,n.
Constraint: t(i)ztiz, where z = x02am () z = x02am () , the safe range parameter, for i = 1,2,,ni=1,2,,n.
5:     sigma – double scalar
σσ, the volatility of the underlying asset. Note that a rate of 15% should be entered as 0.15.
Constraint: sigma > 0.0sigma>0.0.
6:     r – double scalar
rr, the annual risk-free interest rate, continuously compounded. Note that a rate of 5% should be entered as 0.05.
Constraint: r0.0r0.0.
7:     b – double scalar
bb, the annual cost of carry rate. Note that a rate of 8% should be entered as 0.080.08.

Optional Input Parameters

1:     m – int64int32nag_int scalar
Default: The dimension of the array x.
The number of strike prices to be used.
Constraint: m1m1.
2:     n – int64int32nag_int scalar
Default: The dimension of the array t.
The number of times to expiry to be used.
Constraint: n1n1.

Input Parameters Omitted from the MATLAB Interface

ldp

Output Parameters

1:     p(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array p contains the computed option prices.
2:     ifail – int64int32nag_int scalar
ifail = 0ifail=0 unless the function detects an error (see [Error Indicators and Warnings]).

Error Indicators and Warnings

Errors or warnings detected by the function:
  ifail = 1ifail=1
On entry, calput = 'C'calput='C' or 'P''P'.
  ifail = 2ifail=2
On entry, m0m0.
  ifail = 3ifail=3
On entry, n0n0.
  ifail = 4ifail=4
On entry, x(i) < zxi<z or x(i) > 1 / zxi>1/z, where z = x02am()z=x02am(), the safe range parameter.
  ifail = 5ifail=5
On entry, s < zs<z or s > 1.0 / zs>1.0/z, where z = x02am()z=x02am(), the safe range parameter.
  ifail = 6ifail=6
On entry, t(i) < zti<z, where z = x02am()z=x02am(), the safe range parameter.
  ifail = 7ifail=7
On entry, sigma0.0sigma0.0.
  ifail = 8ifail=8
On entry, r < 0.0r<0.0.
  ifail = 11ifail=11
On entry, ldp < mldp<m.

Accuracy

The accuracy of the output is dependent on the accuracy of the cumulative Normal distribution function, ΦΦ. 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

function nag_specfun_opt_asian_geom_price_example
put = 'P';
s = 80.0;
sigma = 0.2;
r = 0.05;
b = 0.08;
x = [85.0];
t = [0.25];


[p, ifail] = nag_specfun_opt_asian_geom_price(put, x, s, t, sigma, r, b);


fprintf('\nAsian Option: Geometric Continuous Average-Rate\nAsian Put :\n');
fprintf('  Spot          =   %9.4f\n', s);
fprintf('  Volatility    =   %9.4f\n', sigma);
fprintf('  Rate          =   %9.4f\n', r);
fprintf('  Cost of carry =   %9.4f\n\n', b);

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
 

Asian Option: Geometric Continuous Average-Rate
Asian Put :
  Spot          =     80.0000
  Volatility    =      0.2000
  Rate          =      0.0500
  Cost of carry =      0.0800

   Strike    Expiry   Option Price
  85.0000    0.2500    4.6922

function s30sa_example
put = 'P';
s = 80.0;
sigma = 0.2;
r = 0.05;
b = 0.08;
x = [85.0];
t = [0.25];


[p, ifail] = s30sa(put, x, s, t, sigma, r, b);


fprintf('\nAsian Option: Geometric Continuous Average-Rate\nAsian Put :\n');
fprintf('  Spot          =   %9.4f\n', s);
fprintf('  Volatility    =   %9.4f\n', sigma);
fprintf('  Rate          =   %9.4f\n', r);
fprintf('  Cost of carry =   %9.4f\n\n', b);

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
 

Asian Option: Geometric Continuous Average-Rate
Asian Put :
  Spot          =     80.0000
  Volatility    =      0.2000
  Rate          =      0.0500
  Cost of carry =      0.0800

   Strike    Expiry   Option Price
  85.0000    0.2500    4.6922


PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2013