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_lookback_fls_greeks (s30bb)

## Purpose

nag_specfun_opt_lookback_fls_greeks (s30bb) computes the price of a floating-strike lookback option together with its sensitivities (Greeks).

## Syntax

[p, delta, gamma, vega, theta, rho, crho, vanna, charm, speed, colour, zomma, vomma, ifail] = s30bb(calput, sm, s, t, sigma, r, q, 'm', m, 'n', n)
[p, delta, gamma, vega, theta, rho, crho, vanna, charm, speed, colour, zomma, vomma, ifail] = nag_specfun_opt_lookback_fls_greeks(calput, sm, s, t, sigma, r, q, 'm', m, 'n', n)

## Description

nag_specfun_opt_lookback_fls_greeks (s30bb) computes the price of a floating-strike lookback call or put option, together with the Greeks or sensitivities, which are the partial derivatives of the option price with respect to certain of the other input parameters. A call option of this type confers the right to buy the underlying asset at the lowest price, ${S}_{\mathrm{min}}$, observed during the lifetime of the contract. A put option gives the holder the right to sell the underlying asset at the maximum price, ${S}_{\mathrm{max}}$, observed during the lifetime of the contract. Thus, at expiry, the payoff for a call option is $S-{S}_{\mathrm{min}}$, and for a put, ${S}_{\mathrm{max}}-S$.
For a given minimum value the price of a floating-strike lookback call with underlying asset price, $S$, and time to expiry, $T$, is
where $b=r-q\ne 0$. The volatility, $\sigma$, risk-free interest rate, $r$, and annualised dividend yield, $q$, are constants.
The corresponding put price is
In the above, $\Phi$ denotes the cumulative Normal distribution function,
 $Φx = ∫ -∞ x ϕy dy$
where $\varphi$ denotes the standard Normal probability density function
 $ϕy = 12π exp -y2/2$
and
 $a1 = ln S / Sm + b + σ2 / 2 T σ⁢T a2=a1-σ⁢T$
where ${S}_{m}$ is taken to be the minimum price attained by the underlying asset, ${S}_{\mathrm{min}}$, for a call and the maximum price, ${S}_{\mathrm{max}}$, for a put.
The option price ${P}_{ij}=P\left(X={X}_{i},T={T}_{j}\right)$ is computed for each minimum or maximum observed price in a set ${S}_{\mathrm{min}}\left(\mathit{i}\right)$ or ${S}_{\mathrm{max}}\left(\mathit{i}\right)$, $i=1,2,\dots ,m$, and for each expiry time in a set ${T}_{j}$, $j=1,2,\dots ,n$.

## References

Goldman B M, Sosin H B and Gatto M A (1979) Path dependent options: buy at the low, sell at the high Journal of Finance 34 1111–1127

## 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{sm}\left({\mathbf{m}}\right)$ – double array
${\mathbf{sm}}\left(i\right)$ must contain ${S}_{\mathrm{min}}\left(\mathit{i}\right)$, the $\mathit{i}$th minimum observed price of the underlying asset when ${\mathbf{calput}}=\text{'C'}$, or ${S}_{\mathrm{max}}\left(\mathit{i}\right)$, the maximum observed price when ${\mathbf{calput}}=\text{'P'}$, for $\mathit{i}=1,2,\dots ,{\mathbf{m}}$.
Constraints:
• ${\mathbf{sm}}\left(\mathit{i}\right)\ge z\text{​ and ​}{\mathbf{sm}}\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}}$;
• if ${\mathbf{calput}}=\text{'C'}$, ${\mathbf{sm}}\left(\mathit{i}\right)\le S$, for $\mathit{i}=1,2,\dots ,{\mathbf{m}}$;
• if ${\mathbf{calput}}=\text{'P'}$, ${\mathbf{sm}}\left(\mathit{i}\right)\ge S$, 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
The annual risk-free interest rate, $r$, continuously compounded. Note that a rate of 5% should be entered as 0.05.
Constraint: ${\mathbf{r}}\ge 0.0$ and $\mathrm{abs}\left({\mathbf{r}}-{\mathbf{q}}\right)>10×\mathrm{eps}×\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(\mathrm{abs}\left({\mathbf{r}}\right),1\right)$, where $\mathrm{eps}={\mathbf{x02aj}}\left(\right)$, the machine precision.
7:     $\mathrm{q}$ – double scalar
The annual continuous yield rate. Note that a rate of 8% should be entered as 0.08.
Constraint: ${\mathbf{q}}\ge 0.0$ and $\mathrm{abs}\left({\mathbf{r}}-{\mathbf{q}}\right)>10×\mathrm{eps}×\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(\mathrm{abs}\left({\mathbf{r}}\right),1\right)$, where $\mathrm{eps}={\mathbf{x02aj}}\left(\right)$, the machine precision.

### Optional Input Parameters

1:     $\mathrm{m}$int64int32nag_int scalar
Default: the dimension of the array sm.
The number of minimum or maximum 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 minimum or maximum observed price ${S}_{\mathrm{min}}\left(\mathit{i}\right)$ or ${S}_{\mathrm{max}}\left(\mathit{i}\right)$ at expiry ${{\mathbf{t}}}_{j}$ for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$.
2:     $\mathrm{delta}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
The leading ${\mathbf{m}}×{\mathbf{n}}$ part of the array delta contains the sensitivity, $\frac{\partial P}{\partial S}$, of the option price to change in the price of the underlying asset.
3:     $\mathrm{gamma}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
The leading ${\mathbf{m}}×{\mathbf{n}}$ part of the array gamma contains the sensitivity, $\frac{{\partial }^{2}P}{\partial {S}^{2}}$, of delta to change in the price of the underlying asset.
4:     $\mathrm{vega}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{vega}}\left(i,j\right)$, contains the first-order Greek measuring the sensitivity of the option price ${P}_{ij}$ to change in the volatility of the underlying asset, i.e., $\frac{\partial {P}_{ij}}{\partial \sigma }$, for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$.
5:     $\mathrm{theta}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{theta}}\left(i,j\right)$, contains the first-order Greek measuring the sensitivity of the option price ${P}_{ij}$ to change in time, i.e., $-\frac{\partial {P}_{ij}}{\partial T}$, for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$, where $b=r-q$.
6:     $\mathrm{rho}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{rho}}\left(i,j\right)$, contains the first-order Greek measuring the sensitivity of the option price ${P}_{ij}$ to change in the annual risk-free interest rate, i.e., $-\frac{\partial {P}_{ij}}{\partial r}$, for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$.
7:     $\mathrm{crho}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{crho}}\left(i,j\right)$, contains the first-order Greek measuring the sensitivity of the option price ${P}_{ij}$ to change in the annual cost of carry rate, i.e., $-\frac{\partial {P}_{ij}}{\partial b}$, for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$, where $b=r-q$.
8:     $\mathrm{vanna}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{vanna}}\left(i,j\right)$, contains the second-order Greek measuring the sensitivity of the first-order Greek ${\Delta }_{ij}$ to change in the volatility of the asset price, i.e., $-\frac{\partial {\Delta }_{ij}}{\partial T}=-\frac{{\partial }^{2}{P}_{ij}}{\partial S\partial \sigma }$, for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$.
9:     $\mathrm{charm}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{charm}}\left(i,j\right)$, contains the second-order Greek measuring the sensitivity of the first-order Greek ${\Delta }_{ij}$ to change in the time, i.e., $-\frac{\partial {\Delta }_{ij}}{\partial T}=-\frac{{\partial }^{2}{P}_{ij}}{\partial S\partial T}$, for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$.
10:   $\mathrm{speed}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{speed}}\left(i,j\right)$, contains the third-order Greek measuring the sensitivity of the second-order Greek ${\Gamma }_{ij}$ to change in the price of the underlying asset, i.e., $-\frac{\partial {\Gamma }_{ij}}{\partial S}=-\frac{{\partial }^{3}{P}_{ij}}{\partial {S}^{3}}$, for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$.
11:   $\mathrm{colour}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{colour}}\left(i,j\right)$, contains the third-order Greek measuring the sensitivity of the second-order Greek ${\Gamma }_{ij}$ to change in the time, i.e., $-\frac{\partial {\Gamma }_{ij}}{\partial T}=-\frac{{\partial }^{3}{P}_{ij}}{\partial S\partial T}$, for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$.
12:   $\mathrm{zomma}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{zomma}}\left(i,j\right)$, contains the third-order Greek measuring the sensitivity of the second-order Greek ${\Gamma }_{ij}$ to change in the volatility of the underlying asset, i.e., $-\frac{\partial {\Gamma }_{ij}}{\partial \sigma }=-\frac{{\partial }^{3}{P}_{ij}}{\partial {S}^{2}\partial \sigma }$, for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$.
13:   $\mathrm{vomma}\left(\mathit{ldp},{\mathbf{n}}\right)$ – double array
$\mathit{ldp}={\mathbf{m}}$.
${\mathbf{vomma}}\left(i,j\right)$, contains the second-order Greek measuring the sensitivity of the first-order Greek ${\Delta }_{ij}$ to change in the volatility of the underlying asset, i.e., $-\frac{\partial {\Delta }_{ij}}{\partial \sigma }=-\frac{{\partial }^{2}{P}_{ij}}{\partial {\sigma }^{2}}$, for $i=1,2,\dots ,{\mathbf{m}}$ and $j=1,2,\dots ,{\mathbf{n}}$.
14:   $\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: $_\le {\mathbf{sm}}\left(i\right)\le _$ for all $i$.
${\mathbf{ifail}}=5$
Constraint: ${\mathbf{s}}\ge _$ and ${\mathbf{s}}\le _$.
${\mathbf{ifail}}=6$
Constraint: ${\mathbf{t}}\left(i\right)\ge _$ for all $i$.
${\mathbf{ifail}}=7$
Constraint: ${\mathbf{sigma}}>0.0$.
${\mathbf{ifail}}=8$
Constraint: ${\mathbf{r}}\ge 0.0$.
${\mathbf{ifail}}=9$
Constraint: ${\mathbf{q}}\ge 0.0$.
${\mathbf{ifail}}=11$
Constraint: $\mathit{ldp}\ge {\mathbf{m}}$.
${\mathbf{ifail}}=12$
Constraint: $\left|{\mathbf{r}}-{\mathbf{q}}\right|>10×\mathrm{eps}×\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(\left|{\mathbf{r}}\right|,1\right)$, where $\mathrm{eps}$ is the machine precision.
${\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 a floating-strike lookback put with a time to expiry of $6$ months and a stock price of $87$. The maximum price observed so far is $100$. The risk-free interest rate is $6%$ per year and the volatility is $30%$ per year with an annual dividend return of $4%$.
```function s30bb_example

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

put = 'p';
s = 87;
sigma = 0.3;
r = 0.06;
q = 0.04;
sm = [100.0];
t = [0.5];

[p, delta, gamma, vega, theta, rho, crho, vanna, charm, speed, colour, ...
zomma, vomma, ifail] = s30bb( ...
put, sm , s, t, sigma, r, q);

fprintf('\nFloating-Strike Lookback\n European Put :\n');
fprintf('  Spot       =   %9.4f\n', s);
fprintf('  Volatility =   %9.4f\n', sigma);
fprintf('  Rate       =   %9.4f\n', r);
fprintf('  Dividend   =   %9.4f\n\n', q);

fprintf(' Time to Expiry : %8.4f\n', t(1));
fprintf('%9s%9s%9s%9s%9s%9s%9s%9s\n','S-Max/Min','Price','Delta','Gamma',...
'Vega','Theta','Rho','CRho');
fprintf('%9.4f%9.4f%9.4f%9.4f%9.4f%9.4f%9.4f%9.4f\n\n', sm(1), p(1,1), ...
delta(1,1), gamma(1,1), vega(1,1), theta(1,1), rho(1,1), crho(1,1));

fprintf('%27s%9s%9s%9s%9s%9s\n','Vanna','Charm','Speed','Colour',...
'Zomma','Vomma');
fprintf('%18s%9.4f%9.4f%9.4f%9.4f%9.4f%9.4f\n\n', ' ', vanna(1,1), ...
charm(1,1), speed(1,1), colour(1,1), zomma(1,1), vomma(1,1));

```
```s30bb example results

Floating-Strike Lookback
European Put :
Spot       =     87.0000
Volatility =      0.3000
Rate       =      0.0600
Dividend   =      0.0400

Time to Expiry :   0.5000
S-Max/Min    Price    Delta    Gamma     Vega    Theta      Rho     CRho
100.0000  18.3530  -0.3560   0.0391  45.5353 -11.6139 -32.8139 -23.6374

Vanna    Charm    Speed   Colour    Zomma    Vomma
1.9141  -0.6199   0.0007   0.0221  -0.0648  76.1292

```