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, Smin${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, Smax${S}_{\mathrm{max}}$, observed during the lifetime of the contract. Thus, at expiry, the payoff for a call option is SSmin$S-{S}_{\mathrm{min}}$, and for a put, SmaxS${S}_{\mathrm{max}}-S$.
For a given minimum value the price of a floating-strike lookback call with underlying asset price, S$S$, and time to expiry, T$T$, is
 Pcall = S e − qT Φ(a1) − Smin e − rT Φ(a2) + S e − rT   (σ2)/(2b) [(S/(Smin)) − 2b / σ2 Φ( − a1 + (2b)/σsqrt(T)) − ebTΦ( − a1)] ,
where b = rq0$b=r-q\ne 0$. The volatility, σ$\sigma$, risk-free interest rate, r$r$, and annualised dividend yield, q$q$, are constants.
The corresponding put price is
 Pput = Smax e − rT Φ ( − a2) − S e − qT Φ ( − a1) + S e − rT   (σ2)/(2b) [ − (S/(Smax)) − 2b / σ2 Φ(a1 − (2b)/σsqrt(T)) + ebTΦ(a1)] .
In the above, Φ$\Phi$ denotes the cumulative Normal distribution function,
 x Φ(x) = ∫ φ(y)dy − ∞
$Φ(x) = ∫ -∞ x ϕ(y) dy$
where φ$\varphi$ denotes the standard Normal probability density function
 φ(y) = 1/(sqrt(2π)) exp( − y2 / 2) $ϕ(y) = 12π exp( -y2/2 )$
and
 a1 = ( ln (S / Sm) + (b + σ2 / 2) T )/(σ×sqrt(T)) a2 = a1 − σ×sqrt(T)
$a1 = ln ( S / Sm ) + ( b + σ2 / 2 ) T σ⁢T a2=a1-σ⁢T$
where Sm${S}_{m}$ is taken to be the minimum price attained by the underlying asset, Smin${S}_{\mathrm{min}}$, for a call and the maximum price, Smax${S}_{\mathrm{max}}$, for a put.

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:     calput – string (length ≥ 1)
Determines whether the option is a call or a put.
calput = 'C'${\mathbf{calput}}=\text{'C'}$
A call. The holder has a right to buy.
calput = 'P'${\mathbf{calput}}=\text{'P'}$
A put. The holder has a right to sell.
Constraint: calput = 'C'${\mathbf{calput}}=\text{'C'}$ or 'P'$\text{'P'}$.
2:     sm(m) – double array
m, the dimension of the array, must satisfy the constraint m1${\mathbf{m}}\ge 1$.
sm(i)${\mathbf{sm}}\left(i\right)$ must contain Smin (i) ${S}_{\mathrm{min}}\left(\mathit{i}\right)$, the i$\mathit{i}$th minimum observed price of the underlying asset when calput = 'C'${\mathbf{calput}}=\text{'C'}$, or Smax (i) ${S}_{\mathrm{max}}\left(\mathit{i}\right)$, the maximum observed price when calput = 'P'${\mathbf{calput}}=\text{'P'}$, for i = 1,2,,m$\mathit{i}=1,2,\dots ,{\mathbf{m}}$.
Constraints:
• sm(i)z ​ and ​ sm(i) 1 / z ${\mathbf{sm}}\left(\mathit{i}\right)\ge z\text{​ and ​}{\mathbf{sm}}\left(\mathit{i}\right)\le 1/z$, where z = x02am() $z=\mathbf{x02am}\left(\right)$, the safe range parameter, for i = 1,2,,m$\mathit{i}=1,2,\dots ,{\mathbf{m}}$;
• if calput = 'C'${\mathbf{calput}}=\text{'C'}$, sm(i)S${\mathbf{sm}}\left(\mathit{i}\right)\le S$, for i = 1,2,,m$\mathit{i}=1,2,\dots ,{\mathbf{m}}$;
• if calput = 'P'${\mathbf{calput}}=\text{'P'}$, sm(i)S${\mathbf{sm}}\left(\mathit{i}\right)\ge S$, for i = 1,2,,m$\mathit{i}=1,2,\dots ,{\mathbf{m}}$.
3:     s – double scalar
S$S$, the price of the underlying asset.
Constraint: sz ​ and ​s1.0 / z${\mathbf{s}}\ge z\text{​ and ​}{\mathbf{s}}\le 1.0/z$, where z = x02am()$z=\mathbf{x02am}\left(\right)$, the safe range parameter.
4:     t(n) – double array
n, the dimension of the array, must satisfy the constraint n1${\mathbf{n}}\ge 1$.
t(i)${\mathbf{t}}\left(i\right)$ must contain Ti${T}_{\mathit{i}}$, the i$\mathit{i}$th time, in years, to expiry, for i = 1,2,,n$\mathit{i}=1,2,\dots ,{\mathbf{n}}$.
Constraint: t(i)z${\mathbf{t}}\left(\mathit{i}\right)\ge z$, where z = x02am () $z=\mathbf{x02am}\left(\right)$, the safe range parameter, for i = 1,2,,n$\mathit{i}=1,2,\dots ,{\mathbf{n}}$.
5:     sigma – double scalar
σ$\sigma$, the volatility of the underlying asset. Note that a rate of 15% should be entered as 0.15.
Constraint: sigma > 0.0${\mathbf{sigma}}>0.0$.
6:     r – double scalar
The annual risk-free interest rate, r$r$, continuously compounded. Note that a rate of 5% should be entered as 0.05.
Constraint: r0.0${\mathbf{r}}\ge 0.0$ and abs(rq) > 10 × eps × max (abs(r),1)$\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 eps = x02aj()$\mathrm{eps}=\mathbf{x02aj}\left(\right)$, the machine precision.
7:     q – double scalar
The annual continuous yield rate. Note that a rate of 8% should be entered as 0.08.
Constraint: q0.0${\mathbf{q}}\ge 0.0$ and abs(rq) > 10 × eps × max (abs(r),1)$\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 eps = x02aj()$\mathrm{eps}=\mathbf{x02aj}\left(\right)$, the machine precision.

Optional Input Parameters

1:     m – int64int32nag_int scalar
Default: The dimension of the array sm.
The number of minimum or maximum prices to be used.
Constraint: m1${\mathbf{m}}\ge 1$.
2:     n – int64int32nag_int scalar
Default: The dimension of the array t.
The number of times to expiry to be used.
Constraint: n1${\mathbf{n}}\ge 1$.

ldp

Output Parameters

1:     p(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array p contains the computed option prices.
2:     delta(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array delta contains the sensitivity, (P)/(S)$\frac{\partial P}{\partial S}$, of the option price to change in the price of the underlying asset.
3:     gamma(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array gamma contains the sensitivity, (2P)/(S2)$\frac{{\partial }^{2}P}{\partial {S}^{2}}$, of delta to change in the price of the underlying asset.
4:     vega(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array vega contains the sensitivity, (P)/(σ)$\frac{\partial P}{\partial \sigma }$, of the option price to change in the volatility of the underlying asset.
5:     theta(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array theta contains the sensitivity, (P)/(T)$-\frac{\partial P}{\partial T}$, of the option price to change in the time to expiry of the option.
6:     rho(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array rho contains the sensitivity, (P)/(r)$\frac{\partial P}{\partial r}$, of the option price to change in the annual risk-free interest rate.
7:     crho(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array crho containing the sensitivity, (P)/(b)$\frac{\partial P}{\partial b}$, of the option price to change in the annual cost of carry rate, b$b$, where b = rq$b=r-q$.
8:     vanna(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array vanna contains the sensitivity, (2P)/(Sσ)$\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.
9:     charm(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array charm contains the sensitivity, (2P)/(S T)$-\frac{{\partial }^{2}P}{\partial S\partial T}$, of delta to change in the time to expiry of the option.
10:   speed(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array speed contains the sensitivity, (3P)/(S3)$\frac{{\partial }^{3}P}{\partial {S}^{3}}$, of gamma to change in the price of the underlying asset.
11:   colour(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array colour contains the sensitivity, (3P)/(S2 T)$-\frac{{\partial }^{3}P}{\partial {S}^{2}\partial T}$, of gamma to change in the time to expiry of the option.
12:   zomma(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array zomma contains the sensitivity, (3P)/(S2σ)$\frac{{\partial }^{3}P}{\partial {S}^{2}\partial \sigma }$, of gamma to change in the volatility of the underlying asset.
13:   vomma(ldp,n) – double array
ldpm$\mathit{ldp}\ge {\mathbf{m}}$.
The leading m × n${\mathbf{m}}×{\mathbf{n}}$ part of the array vomma contains the sensitivity, (2P)/(σ2)$\frac{{\partial }^{2}P}{\partial {\sigma }^{2}}$, of vega to change in the volatility of the underlying asset.
14:   ifail – int64int32nag_int scalar
${\mathrm{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:
ifail = 1${\mathbf{ifail}}=1$
On entry, calput = 'C'${\mathbf{calput}}=\text{'C'}$ or 'P'$\text{'P'}$.
ifail = 2${\mathbf{ifail}}=2$
On entry, m0${\mathbf{m}}\le 0$.
ifail = 3${\mathbf{ifail}}=3$
On entry, n0${\mathbf{n}}\le 0$.
ifail = 4${\mathbf{ifail}}=4$
 On entry, sm(i) < z${\mathbf{sm}}\left(\mathit{i}\right) or sm(i) > 1 / z${\mathbf{sm}}\left(\mathit{i}\right)>1/z$, where z = x02am()$z=\mathbf{x02am}\left(\right)$, the safe range parameter, or calput = 'C'${\mathbf{calput}}=\text{'C'}$ and sm(i) > S${\mathbf{sm}}\left(\mathit{i}\right)>S$, or calput = 'P'${\mathbf{calput}}=\text{'P'}$ and sm(i) < S${\mathbf{sm}}\left(\mathit{i}\right).
ifail = 5${\mathbf{ifail}}=5$
On entry, s < z${\mathbf{s}} or s > 1.0 / z${\mathbf{s}}>1.0/z$, where z = x02am()$z=\mathbf{x02am}\left(\right)$, the safe range parameter.
ifail = 6${\mathbf{ifail}}=6$
On entry, t(i) < z${\mathbf{t}}\left(\mathit{i}\right), where z = x02am()$z=\mathbf{x02am}\left(\right)$, the safe range parameter.
ifail = 7${\mathbf{ifail}}=7$
On entry, sigma0.0${\mathbf{sigma}}\le 0.0$.
ifail = 8${\mathbf{ifail}}=8$
On entry, r < 0.0${\mathbf{r}}<0.0$.
ifail = 9${\mathbf{ifail}}=9$
On entry, q < 0.0${\mathbf{q}}<0.0$.
ifail = 11${\mathbf{ifail}}=11$
On entry, ldp < m$\mathit{ldp}<{\mathbf{m}}$.
ifail = 12${\mathbf{ifail}}=12$
On entry, abs(rq)10 × eps × max (abs(r),1)$\mathrm{abs}\left({\mathbf{r}}-{\mathbf{q}}\right)\le 10×\mathrm{eps}×\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(\mathrm{abs}\left({\mathbf{r}}\right),1\right)$, where eps = x02aj()$\mathrm{eps}=\mathbf{x02aj}\left(\right)$, the machine precision.

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

```function nag_specfun_opt_lookback_fls_greeks_example
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] = nag_specfun_opt_lookback_fls_greeks(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(' S-Max/Min Price     Delta    Gamma     Vega    Theta      Rho     CRho\n');
fprintf(' %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.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(' S-Max/Min Price     Vanna    Charm    Speed   Colour    Zomma    Vomma\n');
fprintf(' %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f\n', sm(1), ...
p(1,1), vanna(1,1), charm(1,1), speed(1,1), colour(1,1), ...
zomma(1,1), vomma(1,1));
```
```

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

S-Max/Min Price     Vanna    Charm    Speed   Colour    Zomma    Vomma
100.0000  18.3530   1.9141  -0.6199   0.0007   0.0221  -0.0648  76.1292

```
```function s30bb_example
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(' S-Max/Min Price     Delta    Gamma     Vega    Theta      Rho     CRho\n');
fprintf(' %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.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(' S-Max/Min Price     Vanna    Charm    Speed   Colour    Zomma    Vomma\n');
fprintf(' %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f\n', sm(1), ...
p(1,1), vanna(1,1), charm(1,1), speed(1,1), colour(1,1), ...
zomma(1,1), vomma(1,1));
```
```

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

S-Max/Min Price     Vanna    Charm    Speed   Colour    Zomma    Vomma
100.0000  18.3530   1.9141  -0.6199   0.0007   0.0221  -0.0648  76.1292

```