hide long namesshow long names
hide short namesshow short names
Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
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, SminSmin, observed during the lifetime of the contract. A put option gives the holder the right to sell the underlying asset at the maximum price, SmaxSmax, observed during the lifetime of the contract. Thus, at expiry, the payoff for a call option is SSminS-Smin, and for a put, SmaxSSmax-S.
For a given minimum value the price of a floating-strike lookback call with underlying asset price, SS, and time to expiry, TT, is
Pcall = S eqT Φ(a1) Smin erT Φ(a2) + S erT   (σ2)/(2b) [(S/(Smin)) 2b / σ2 Φ(a1 + (2b)/σsqrt(T))ebTΦ(a1)] ,
Pcall = S e-qT Φ(a1) - Smin e-rT Φ(a2) + S e-rT   σ2 2b [ ( S Smin ) -2b / σ2 Φ ( -a1 + 2b σ T ) -e bT Φ (-a1) ] ,
where b = rq0b=r-q0. The volatility, σσ, risk-free interest rate, rr, and annualised dividend yield, qq, are constants.
The corresponding put price is
Pput = Smax erT Φ (a2) S eqT Φ (a1) + S erT   (σ2)/(2b) [(S/(Smax)) 2b / σ2 Φ(a1(2b)/σsqrt(T)) + ebTΦ(a1)] .
Pput = Smax e-rT Φ (-a2) - S e-qT Φ (-a1) + S e-rT   σ2 2b [ - ( S Smax ) -2b / σ2 Φ ( a1 - 2b σ T ) + ebT Φ (a1) ] .
In the above, ΦΦ denotes the cumulative Normal distribution function,
x
Φ(x) = φ(y)dy
Φ(x) = - x ϕ(y) dy
where φϕ 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 SmSm is taken to be the minimum price attained by the underlying asset, SminSmin, for a call and the maximum price, SmaxSmax, 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'calput='C'
A call. The holder has a right to buy.
calput = 'P'calput='P'
A put. The holder has a right to sell.
Constraint: calput = 'C'calput='C' or 'P''P'.
2:     sm(m) – double array
m, the dimension of the array, must satisfy the constraint m1m1.
sm(i)smi must contain Smin (i) Smin (i) , the iith minimum observed price of the underlying asset when calput = 'C'calput='C', or Smax (i) Smax (i) , the maximum observed price when calput = 'P'calput='P', for i = 1,2,,mi=1,2,,m.
Constraints:
  • sm(i)z ​ and ​ sm(i) 1 / z smiz ​ and ​ smi 1 / z , where z = x02am() z = x02am() , the safe range parameter, for i = 1,2,,mi=1,2,,m;
  • if calput = 'C'calput='C', sm(i)SsmiS, for i = 1,2,,mi=1,2,,m;
  • if calput = 'P'calput='P', sm(i)SsmiS, for i = 1,2,,mi=1,2,,m.
3:     s – double scalar
SS, the price of the underlying asset.
Constraint: sz ​ and ​s1.0 / zsz ​ and ​s1.0/z, where z = x02am()z=x02am(), the safe range parameter.
4:     t(n) – double array
n, the dimension of the array, must satisfy the constraint n1n1.
t(i)ti must contain TiTi, the iith time, in years, to expiry, for i = 1,2,,ni=1,2,,n.
Constraint: t(i)ztiz, where z = x02am () z = x02am () , the safe range parameter, for i = 1,2,,ni=1,2,,n.
5:     sigma – double scalar
σσ, the volatility of the underlying asset. Note that a rate of 15% should be entered as 0.15.
Constraint: sigma > 0.0sigma>0.0.
6:     r – double scalar
The annual risk-free interest rate, rr, continuously compounded. Note that a rate of 5% should be entered as 0.05.
Constraint: r0.0r0.0 and abs(rq) > 10 × eps × max (abs(r),1)abs(r-q)>10×eps×max(abs(r),1), where eps = x02aj()eps=x02aj(), 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.0q0.0 and abs(rq) > 10 × eps × max (abs(r),1)abs(r-q)>10×eps×max(abs(r),1), where eps = x02aj()eps=x02aj(), 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: m1m1.
2:     n – int64int32nag_int scalar
Default: The dimension of the array t.
The number of times to expiry to be used.
Constraint: n1n1.

Input Parameters Omitted from the MATLAB Interface

ldp

Output Parameters

1:     p(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array p contains the computed option prices.
2:     delta(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array delta contains the sensitivity, (P)/(S)PS, of the option price to change in the price of the underlying asset.
3:     gamma(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array gamma contains the sensitivity, (2P)/(S2)2PS2, of delta to change in the price of the underlying asset.
4:     vega(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array vega contains the sensitivity, (P)/(σ)Pσ, of the option price to change in the volatility of the underlying asset.
5:     theta(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array theta contains the sensitivity, (P)/(T)-PT, of the option price to change in the time to expiry of the option.
6:     rho(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array rho contains the sensitivity, (P)/(r)Pr, of the option price to change in the annual risk-free interest rate.
7:     crho(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array crho containing the sensitivity, (P)/(b)Pb, of the option price to change in the annual cost of carry rate, bb, where b = rqb=r-q.
8:     vanna(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array vanna contains the sensitivity, (2P)/(Sσ)2PSσ, 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
ldpmldpm.
The leading m × nm×n part of the array charm contains the sensitivity, (2P)/(S T)-2PS T, of delta to change in the time to expiry of the option.
10:   speed(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array speed contains the sensitivity, (3P)/(S3)3PS3, of gamma to change in the price of the underlying asset.
11:   colour(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array colour contains the sensitivity, (3P)/(S2 T)-3PS2 T, of gamma to change in the time to expiry of the option.
12:   zomma(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array zomma contains the sensitivity, (3P)/(S2σ)3PS2σ, of gamma to change in the volatility of the underlying asset.
13:   vomma(ldp,n) – double array
ldpmldpm.
The leading m × nm×n part of the array vomma contains the sensitivity, (2P)/(σ2)2Pσ2, of vega to change in the volatility of the underlying asset.
14:   ifail – int64int32nag_int scalar
ifail = 0ifail=0 unless the function detects an error (see [Error Indicators and Warnings]).

Error Indicators and Warnings

Errors or warnings detected by the function:
  ifail = 1ifail=1
On entry, calput = 'C'calput='C' or 'P''P'.
  ifail = 2ifail=2
On entry, m0m0.
  ifail = 3ifail=3
On entry, n0n0.
  ifail = 4ifail=4
On entry,sm(i) < zsmi<z or sm(i) > 1 / zsmi>1/z, where z = x02am()z=x02am(), the safe range parameter,
orcalput = 'C'calput='C' and sm(i) > Ssmi>S,
orcalput = 'P'calput='P' and sm(i) < Ssmi<S.
  ifail = 5ifail=5
On entry, s < zs<z or s > 1.0 / zs>1.0/z, where z = x02am()z=x02am(), the safe range parameter.
  ifail = 6ifail=6
On entry, t(i) < zti<z, where z = x02am()z=x02am(), the safe range parameter.
  ifail = 7ifail=7
On entry, sigma0.0sigma0.0.
  ifail = 8ifail=8
On entry, r < 0.0r<0.0.
  ifail = 9ifail=9
On entry, q < 0.0q<0.0.
  ifail = 11ifail=11
On entry, ldp < mldp<m.
  ifail = 12ifail=12
On entry, abs(rq)10 × eps × max (abs(r),1)abs(r-q)10×eps×max(abs(r),1), where eps = x02aj()eps=x02aj(), the machine precision.

Accuracy

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

Further Comments

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


PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2013