Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

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, $\sigma$, risk-free rate, $r$, and cost of carry, $b$ (see Kemna and Vorst (1990)). For a given strike price, $X$, the price of a call option with underlying price, $S$, and time to expiry, $T$, is
 $Pcall = S e b--r T Φ d- 1 - X e-rT Φ d- 2 ,$
and the corresponding put option price is
 $Pput = X e-rT Φ -d-2 - S e b--r T Φ - d-1 ,$
where
 $d-1 = lnS/X + b- + σ-2 / 2 T σ- T$
and
 $d-2 = d-1 - σ- T ,$
with
 $σ- = σ 3 , b- = 1 2 r- σ2 6 .$
$\Phi$ is the cumulative Normal distribution function,
 $Φx = 1 2π ∫ -∞ x exp -y2/2 dy .$
The option price ${P}_{ij}=P\left(X={X}_{i},T={T}_{j}\right)$ is computed for each strike price in a set ${X}_{i}$, $i=1,2,\dots ,m$, and for each expiry time in a set ${T}_{j}$, $j=1,2,\dots ,n$.

## 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:     $\mathrm{calput}$ – string (length ≥ 1)
Determines whether the option is a call or a put.
${\mathbf{calput}}=\text{'C'}$
A call; the holder has a right to buy.
${\mathbf{calput}}=\text{'P'}$
A put; the holder has a right to sell.
Constraint: ${\mathbf{calput}}=\text{'C'}$ or $\text{'P'}$.
2:     $\mathrm{x}\left({\mathbf{m}}\right)$ – double array
${\mathbf{x}}\left(i\right)$ must contain ${X}_{\mathit{i}}$, the $\mathit{i}$th strike price, for $\mathit{i}=1,2,\dots ,{\mathbf{m}}$.
Constraint: ${\mathbf{x}}\left(\mathit{i}\right)\ge z\text{​ and ​}{\mathbf{x}}\left(\mathit{i}\right)\le 1/z$, where $z={\mathbf{x02am}}\left(\right)$, the safe range parameter, for $\mathit{i}=1,2,\dots ,{\mathbf{m}}$.
3:     $\mathrm{s}$ – double scalar
$S$, the price of the underlying asset.
Constraint: ${\mathbf{s}}\ge z\text{​ and ​}{\mathbf{s}}\le 1.0/z$, where $z={\mathbf{x02am}}\left(\right)$, the safe range parameter.
4:     $\mathrm{t}\left({\mathbf{n}}\right)$ – double array
${\mathbf{t}}\left(i\right)$ must contain ${T}_{\mathit{i}}$, the $\mathit{i}$th time, in years, to expiry, for $\mathit{i}=1,2,\dots ,{\mathbf{n}}$.
Constraint: ${\mathbf{t}}\left(\mathit{i}\right)\ge z$, where $z={\mathbf{x02am}}\left(\right)$, the safe range parameter, for $\mathit{i}=1,2,\dots ,{\mathbf{n}}$.
5:     $\mathrm{sigma}$ – double scalar
$\sigma$, the volatility of the underlying asset. Note that a rate of 15% should be entered as 0.15.
Constraint: ${\mathbf{sigma}}>0.0$.
6:     $\mathrm{r}$ – double scalar
$r$, the annual risk-free interest rate, continuously compounded. Note that a rate of 5% should be entered as 0.05.
Constraint: ${\mathbf{r}}\ge 0.0$.
7:     $\mathrm{b}$ – double scalar
$b$, the annual cost of carry rate. Note that a rate of 8% should be entered as $0.08$.

### Optional Input Parameters

1:     $\mathrm{m}$int64int32nag_int scalar
Default: the dimension of the array x.
The number of strike prices to be used.
Constraint: ${\mathbf{m}}\ge 1$.
2:     $\mathrm{n}$int64int32nag_int scalar
Default: the dimension of the array t.
The number of times to expiry to be used.
Constraint: ${\mathbf{n}}\ge 1$.

### Output Parameters

1:     $\mathrm{p}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{p}}\left(i,j\right)$ contains ${P}_{ij}$, the option price evaluated for the strike price ${{\mathbf{x}}}_{i}$ at expiry ${{\mathbf{t}}}_{j}$ for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$.
2:     $\mathrm{ifail}$int64int32nag_int scalar
${\mathbf{ifail}}={\mathbf{0}}$ unless the function detects an error (see Error Indicators and Warnings).

## Error Indicators and Warnings

Errors or warnings detected by the function:
${\mathbf{ifail}}=1$
On entry, ${\mathbf{calput}}=_$ was an illegal value.
${\mathbf{ifail}}=2$
Constraint: ${\mathbf{m}}\ge 1$.
${\mathbf{ifail}}=3$
Constraint: ${\mathbf{n}}\ge 1$.
${\mathbf{ifail}}=4$
Constraint: ${\mathbf{x}}\left(i\right)\ge _$ and ${\mathbf{x}}\left(i\right)\le _$.
${\mathbf{ifail}}=5$
Constraint: ${\mathbf{s}}\ge _$ and ${\mathbf{s}}\le _$.
${\mathbf{ifail}}=6$
Constraint: ${\mathbf{t}}\left(i\right)\ge _$.
${\mathbf{ifail}}=7$
Constraint: ${\mathbf{sigma}}>0.0$.
${\mathbf{ifail}}=8$
Constraint: ${\mathbf{r}}\ge 0.0$.
${\mathbf{ifail}}=11$
Constraint: $\mathit{ldp}\ge {\mathbf{m}}$.
${\mathbf{ifail}}=-99$
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.

## Accuracy

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

None.

## Example

This example computes the price of an Asian geometric continuous average-rate put with a time to expiry of $3$ months, a stock price of $80$ and a strike price of $85$. The risk-free interest rate is $5%$ per year, the cost of carry is $8%$ and the volatility is $20%$ per year.
```function s30sa_example

fprintf('s30sa example results\n\n');

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

```
```s30sa example results

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
```