s Chapter Contents
s Chapter Introduction
NAG C Library Manual

# NAG Library Function Documentnag_lookback_fls_price (s30bac)

## 1  Purpose

nag_lookback_fls_price (s30bac) computes the price of a floating-strike lookback option.

## 2  Specification

 #include #include
 void nag_lookback_fls_price (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[], NagError *fail)

## 3  Description

nag_lookback_fls_price (s30bac) computes the price of a floating-strike lookback call or put option. 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. When $r=q$, the option price is given by
 $Pcall = S e-qT Φ a1 - Smin e-rT Φ a2 + S e-rT σ⁢T ϕ a1 + a1 Φ a1 -1 .$
The corresponding put price is (for $b\ne 0$),
When $r=q$,
 $Pput = Smax e-rT Φ -a2 - S e-qT Φ -a1 + S e-rT σ⁢T ϕa1 + a1 Φa1 .$
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: $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$.
10:   qdoubleInput
On entry: $q$, the annual continuous yield rate. Note that a rate of 8% should be entered as 0.08.
Constraint: ${\mathbf{q}}\ge 0.0$.
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:   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_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 call with a time to expiry of $6$ months and a stock price of $120$. The minimum price observed so far is $100$. The risk-free interest rate is $10%$ per year and the volatility is $30%$ per year with an annual dividend return of $6%$.

### 9.1  Program Text

Program Text (s30bace.c)

### 9.2  Program Data

Program Data (s30bace.d)

### 9.3  Program Results

Program Results (s30bace.r)