s Chapter Contents
s Chapter Introduction
NAG C Library Manual

# NAG Library Function Documentnag_lookback_fls_greeks (s30bbc)

## 1  Purpose

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

## 2  Specification

 #include #include
 void nag_lookback_fls_greeks (Nag_OrderType order, Nag_CallPut option, Integer m, Integer n, const double sm[], double s, const double t[], double sigma, double r, double q, double p[], double delta[], double gamma[], double vega[], double theta[], double rho[], double crho[], double vanna[], double charm[], double speed[], double colour[], double zomma[], double vomma[], NagError *fail)

## 3  Description

nag_lookback_fls_greeks (s30bbc) 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.

## 4  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

## 5  Arguments

1:     orderNag_OrderTypeInput
On entry: the order argument specifies the two-dimensional storage scheme being used, i.e., row-major ordering or column-major ordering. C language defined storage is specified by ${\mathbf{order}}=\mathrm{Nag_RowMajor}$. See Section 3.2.1.3 in the Essential Introduction for a more detailed explanation of the use of this argument.
Constraint: ${\mathbf{order}}=\mathrm{Nag_RowMajor}$ or Nag_ColMajor.
2:     optionNag_CallPutInput
On entry: determines whether the option is a call or a put.
${\mathbf{option}}=\mathrm{Nag_Call}$
A call. The holder has a right to buy.
${\mathbf{option}}=\mathrm{Nag_Put}$
A put. The holder has a right to sell.
Constraint: ${\mathbf{option}}=\mathrm{Nag_Call}$ or $\mathrm{Nag_Put}$.
3:     mIntegerInput
On entry: the number of minimum or maximum prices to be used.
Constraint: ${\mathbf{m}}\ge 1$.
4:     nIntegerInput
On entry: the number of times to expiry to be used.
Constraint: ${\mathbf{n}}\ge 1$.
5:     sm[m]const doubleInput
On entry: ${\mathbf{sm}}\left[i-1\right]$ must contain ${S}_{\mathrm{min}}\left(\mathit{i}\right)$, the $\mathit{i}$th minimum observed price of the underlying asset when ${\mathbf{option}}=\mathrm{Nag_Call}$, or ${S}_{\mathrm{max}}\left(\mathit{i}\right)$, the maximum observed price when ${\mathbf{option}}=\mathrm{Nag_Put}$, for $\mathit{i}=1,2,\dots ,{\mathbf{m}}$.
Constraints:
• ${\mathbf{sm}}\left[\mathit{i}-1\right]\ge z\text{​ and ​}{\mathbf{sm}}\left[\mathit{i}-1\right]\le 1/z$, where $z={\mathbf{nag_real_safe_small_number}}$, the safe range parameter, for $\mathit{i}=1,2,\dots ,{\mathbf{m}}$;
• if ${\mathbf{option}}=\mathrm{Nag_Call}$, ${\mathbf{sm}}\left[\mathit{i}-1\right]\le S$, for $\mathit{i}=1,2,\dots ,{\mathbf{m}}$;
• if ${\mathbf{option}}=\mathrm{Nag_Put}$, ${\mathbf{sm}}\left[\mathit{i}-1\right]\ge S$, for $\mathit{i}=1,2,\dots ,{\mathbf{m}}$.
6:     sdoubleInput
On entry: $S$, the price of the underlying asset.
Constraint: ${\mathbf{s}}\ge z\text{​ and ​}{\mathbf{s}}\le 1.0/z$, where $z={\mathbf{nag_real_safe_small_number}}$, the safe range parameter.
7:     t[n]const doubleInput
On entry: ${\mathbf{t}}\left[i-1\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}-1\right]\ge z$, where $z={\mathbf{nag_real_safe_small_number}}$, the safe range parameter, for $\mathit{i}=1,2,\dots ,{\mathbf{n}}$.
On entry: $\sigma$, the volatility of the underlying asset. Note that a rate of 15% should be entered as 0.15.
Constraint: ${\mathbf{sigma}}>0.0$.
9:     rdoubleInput
On entry: 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{nag_machine_precision}}$, the machine precision.
10:   qdoubleInput
On entry: 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{nag_machine_precision}}$, the machine precision.
11:   p[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix $P$ is stored in
• ${\mathbf{p}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{p}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array p contains the computed option prices.
12:   delta[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{delta}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{delta}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array delta contains the sensitivity, $\frac{\partial P}{\partial S}$, of the option price to change in the price of the underlying asset.
13:   gamma[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{gamma}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{gamma}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array gamma contains the sensitivity, $\frac{{\partial }^{2}P}{\partial {S}^{2}}$, of delta to change in the price of the underlying asset.
14:   vega[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{vega}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{vega}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array vega contains the sensitivity, $\frac{\partial P}{\partial \sigma }$, of the option price to change in the volatility of the underlying asset.
15:   theta[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{theta}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{theta}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array theta contains the sensitivity, $-\frac{\partial P}{\partial T}$, of the option price to change in the time to expiry of the option.
16:   rho[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{rho}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{rho}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array rho contains the sensitivity, $\frac{\partial P}{\partial r}$, of the option price to change in the annual risk-free interest rate.
17:   crho[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{crho}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{crho}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array crho containing the sensitivity, $\frac{\partial P}{\partial b}$, of the option price to change in the annual cost of carry rate, $b$, where $b=r-q$.
18:   vanna[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{vanna}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{vanna}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array vanna contains the sensitivity, $\frac{{\partial }^{2}P}{\partial S\partial \sigma }$, of vega to change in the price of the underlying asset or, equivalently, the sensitivity of delta to change in the volatility of the asset price.
19:   charm[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{charm}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{charm}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array charm contains the sensitivity, $-\frac{{\partial }^{2}P}{\partial S\partial T}$, of delta to change in the time to expiry of the option.
20:   speed[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{speed}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{speed}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array speed contains the sensitivity, $\frac{{\partial }^{3}P}{\partial {S}^{3}}$, of gamma to change in the price of the underlying asset.
21:   colour[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{colour}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{colour}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array colour contains the sensitivity, $-\frac{{\partial }^{3}P}{\partial {S}^{2}\partial T}$, of gamma to change in the time to expiry of the option.
22:   zomma[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{zomma}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{zomma}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array zomma contains the sensitivity, $\frac{{\partial }^{3}P}{\partial {S}^{2}\partial \sigma }$, of gamma to change in the volatility of the underlying asset.
23:   vomma[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{vomma}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{vomma}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array vomma contains the sensitivity, $\frac{{\partial }^{2}P}{\partial {\sigma }^{2}}$, of vega to change in the volatility of the underlying asset.
24:   failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
On entry, argument $〈\mathit{\text{value}}〉$ had an illegal value.
NE_INT
On entry, ${\mathbf{m}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{m}}\ge 1$.
On entry, ${\mathbf{n}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{n}}\ge 1$.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
NE_REAL
On entry, ${\mathbf{q}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{q}}\ge 0.0$.
On entry, ${\mathbf{r}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{r}}\ge 0.0$.
On entry, ${\mathbf{s}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{s}}\ge 〈\mathit{\text{value}}〉$ and ${\mathbf{s}}\le 〈\mathit{\text{value}}〉$.
On entry, ${\mathbf{sigma}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{sigma}}>0.0$.
NE_REAL_2
On entry, ${\mathbf{r}}=〈\mathit{\text{value}}〉$ and ${\mathbf{q}}=〈\mathit{\text{value}}〉$.
Constraint: $\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}$ is the machine precision.
NE_REAL_ARRAY
On entry, ${\mathbf{sm}}\left[〈\mathit{\text{value}}〉\right]=〈\mathit{\text{value}}〉$.
Constraint: $〈\mathit{\text{value}}〉\le {\mathbf{sm}}\left[i\right]\le 〈\mathit{\text{value}}〉$ for all $i$.
On entry, ${\mathbf{t}}\left[〈\mathit{\text{value}}〉\right]=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{t}}\left[i\right]\ge 〈\mathit{\text{value}}〉$ for all $i$.
On entry with a call option, ${\mathbf{sm}}\left[〈\mathit{\text{value}}〉\right]=〈\mathit{\text{value}}〉$.
Constraint: for call options, ${\mathbf{sm}}\left[i\right]\le 〈\mathit{\text{value}}〉$ for all $i$.
On entry with a put option, ${\mathbf{sm}}\left[〈\mathit{\text{value}}〉\right]=〈\mathit{\text{value}}〉$.
Constraint: for put options, ${\mathbf{sm}}\left[i\right]\ge 〈\mathit{\text{value}}〉$ for all $i$.

## 7  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_cumul_normal (s15abc) and nag_erfc (s15adc)). An accuracy close to machine precision can generally be expected.

None.

## 9  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%$.

### 9.1  Program Text

Program Text (s30bbce.c)

### 9.2  Program Data

Program Data (s30bbce.d)

### 9.3  Program Results

Program Results (s30bbce.r)