nag_lookback_fls_greeks (s30bbc) (PDF version)
s Chapter Contents
s Chapter Introduction
NAG Library Manual

NAG Library Function Document

nag_lookback_fls_greeks (s30bbc)

+ Contents

    1  Purpose
    7  Accuracy

1  Purpose

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

2  Specification

#include <nag.h>
#include <nags.h>
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, Smin, 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, observed during the lifetime of the contract. Thus, at expiry, the payoff for a call option is S-Smin, and for a put, Smax-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
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=r-q0. The volatility, σ, risk-free interest rate, r, and annualised dividend yield, 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 σ T + ebT Φ a1 .
In the above, Φ denotes the cumulative Normal distribution function,
Φx = - x ϕy dy
where ϕ 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 Sm is taken to be the minimum price attained by the underlying asset, Smin, for a call and the maximum price, Smax, for a put.
The option price Pij=PX=Xi,T=Tj is computed for each minimum or maximum observed price in a set Smin i  or Smax i , i=1,2,,m, and for each expiry time in a set Tj, j=1,2,,n.

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 order=Nag_RowMajor. See Section 3.2.1.3 in the Essential Introduction for a more detailed explanation of the use of this argument.
Constraint: order=Nag_RowMajor or Nag_ColMajor.
2:     optionNag_CallPutInput
On entry: determines whether the option is a call or a put.
option=Nag_Call
A call; the holder has a right to buy.
option=Nag_Put
A put; the holder has a right to sell.
Constraint: option=Nag_Call or Nag_Put.
3:     mIntegerInput
On entry: the number of minimum or maximum prices to be used.
Constraint: m1.
4:     nIntegerInput
On entry: the number of times to expiry to be used.
Constraint: n1.
5:     sm[m]const doubleInput
On entry: sm[i-1] must contain Smin i , the ith minimum observed price of the underlying asset when option=Nag_Call, or Smax i , the maximum observed price when option=Nag_Put, for i=1,2,,m.
Constraints:
  • sm[i-1]z ​ and ​ sm[i-1] 1 / z , where z = nag_real_safe_small_number , the safe range parameter, for i=1,2,,m;
  • if option=Nag_Call, sm[i-1]S, for i=1,2,,m;
  • if option=Nag_Put, sm[i-1]S, for i=1,2,,m.
6:     sdoubleInput
On entry: S, the price of the underlying asset.
Constraint: sz ​ and ​s1.0/z, where z=nag_real_safe_small_number, the safe range parameter.
7:     t[n]const doubleInput
On entry: t[i-1] must contain Ti, the ith time, in years, to expiry, for i=1,2,,n.
Constraint: t[i-1]z, where z = nag_real_safe_small_number , the safe range parameter, for i=1,2,,n.
8:     sigmadoubleInput
On entry: σ, the volatility of the underlying asset. Note that a rate of 15% should be entered as 0.15.
Constraint: 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: r0.0 and absr-q>10×eps×maxabsr,1, where eps=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: q0.0 and absr-q>10×eps×maxabsr,1, where eps=nag_machine_precision, the machine precision.
11:   p[m×n]doubleOutput
Note: where Pi,j appears in this document, it refers to the array element
  • p[j-1×m+i-1] when order=Nag_ColMajor;
  • p[i-1×n+j-1] when order=Nag_RowMajor.
On exit: Pi,j contains Pij, the option price evaluated for the minimum or maximum observed price Smin i  or Smax i  at expiry tj for i=1,2,,m and j=1,2,,n.
12:   delta[m×n]doubleOutput
Note: the i,jth element of the matrix is stored in
  • delta[j-1×m+i-1] when order=Nag_ColMajor;
  • delta[i-1×n+j-1] when order=Nag_RowMajor.
On exit: the m×n array delta contains the sensitivity, PS, of the option price to change in the price of the underlying asset.
13:   gamma[m×n]doubleOutput
Note: the i,jth element of the matrix is stored in
  • gamma[j-1×m+i-1] when order=Nag_ColMajor;
  • gamma[i-1×n+j-1] when order=Nag_RowMajor.
On exit: the m×n array gamma contains the sensitivity, 2PS2, of delta to change in the price of the underlying asset.
14:   vega[m×n]doubleOutput
Note: where VEGAi,j appears in this document, it refers to the array element
  • vega[j-1×m+i-1] when order=Nag_ColMajor;
  • vega[i-1×n+j-1] when order=Nag_RowMajor.
On exit: VEGAi,j, contains the first-order Greek measuring the sensitivity of the option price Pij to change in the volatility of the underlying asset, i.e., Pij σ , for i=1,2,,m and j=1,2,,n.
15:   theta[m×n]doubleOutput
Note: where THETAi,j appears in this document, it refers to the array element
  • theta[j-1×m+i-1] when order=Nag_ColMajor;
  • theta[i-1×n+j-1] when order=Nag_RowMajor.
On exit: THETAi,j, contains the first-order Greek measuring the sensitivity of the option price Pij to change in time, i.e., - Pij T , for i=1,2,,m and j=1,2,,n, where b=r-q.
16:   rho[m×n]doubleOutput
Note: where RHOi,j appears in this document, it refers to the array element
  • rho[j-1×m+i-1] when order=Nag_ColMajor;
  • rho[i-1×n+j-1] when order=Nag_RowMajor.
On exit: RHOi,j, contains the first-order Greek measuring the sensitivity of the option price Pij to change in the annual risk-free interest rate, i.e., - Pij r , for i=1,2,,m and j=1,2,,n.
17:   crho[m×n]doubleOutput
Note: where CRHOi,j appears in this document, it refers to the array element
  • crho[j-1×m+i-1] when order=Nag_ColMajor;
  • crho[i-1×n+j-1] when order=Nag_RowMajor.
On exit: CRHOi,j, contains the first-order Greek measuring the sensitivity of the option price Pij to change in the annual cost of carry rate, i.e., - Pij b , for i=1,2,,m and j=1,2,,n, where b=r-q.
18:   vanna[m×n]doubleOutput
Note: where VANNAi,j appears in this document, it refers to the array element
  • vanna[j-1×m+i-1] when order=Nag_ColMajor;
  • vanna[i-1×n+j-1] when order=Nag_RowMajor.
On exit: VANNAi,j, contains the second-order Greek measuring the sensitivity of the first-order Greek Δij to change in the volatility of the asset price, i.e., - Δij T = - 2 Pij Sσ , for i=1,2,,m and j=1,2,,n.
19:   charm[m×n]doubleOutput
Note: where CHARMi,j appears in this document, it refers to the array element
  • charm[j-1×m+i-1] when order=Nag_ColMajor;
  • charm[i-1×n+j-1] when order=Nag_RowMajor.
On exit: CHARMi,j, contains the second-order Greek measuring the sensitivity of the first-order Greek Δij to change in the time, i.e., - Δij T = - 2 Pij ST , for i=1,2,,m and j=1,2,,n.
20:   speed[m×n]doubleOutput
Note: where SPEEDi,j appears in this document, it refers to the array element
  • speed[j-1×m+i-1] when order=Nag_ColMajor;
  • speed[i-1×n+j-1] when order=Nag_RowMajor.
On exit: SPEEDi,j, contains the third-order Greek measuring the sensitivity of the second-order Greek Γij to change in the price of the underlying asset, i.e., - Γij S = - 3 Pij S3 , for i=1,2,,m and j=1,2,,n.
21:   colour[m×n]doubleOutput
Note: where COLOURi,j appears in this document, it refers to the array element
  • colour[j-1×m+i-1] when order=Nag_ColMajor;
  • colour[i-1×n+j-1] when order=Nag_RowMajor.
On exit: COLOURi,j, contains the third-order Greek measuring the sensitivity of the second-order Greek Γij to change in the time, i.e., - Γij T = - 3 Pij ST , for i=1,2,,m and j=1,2,,n.
22:   zomma[m×n]doubleOutput
Note: where ZOMMAi,j appears in this document, it refers to the array element
  • zomma[j-1×m+i-1] when order=Nag_ColMajor;
  • zomma[i-1×n+j-1] when order=Nag_RowMajor.
On exit: ZOMMAi,j, contains the third-order Greek measuring the sensitivity of the second-order Greek Γij to change in the volatility of the underlying asset, i.e., - Γij σ = - 3 Pij S2σ , for i=1,2,,m and j=1,2,,n.
23:   vomma[m×n]doubleOutput
Note: where VOMMAi,j appears in this document, it refers to the array element
  • vomma[j-1×m+i-1] when order=Nag_ColMajor;
  • vomma[i-1×n+j-1] when order=Nag_RowMajor.
On exit: VOMMAi,j, contains the second-order Greek measuring the sensitivity of the first-order Greek Δij to change in the volatility of the underlying asset, i.e., - Δij σ = - 2 Pij σ2 , for i=1,2,,m and j=1,2,,n.
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.
NE_BAD_PARAM
On entry, argument value had an illegal value.
NE_INT
On entry, m=value.
Constraint: m1.
On entry, n=value.
Constraint: n1.
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, q=value.
Constraint: q0.0.
On entry, r=value.
Constraint: r0.0.
On entry, s=value.
Constraint: svalue and svalue.
On entry, sigma=value.
Constraint: sigma>0.0.
NE_REAL_2
On entry, r=value and q=value.
Constraint: r-q>10×eps×maxr,1, where eps is the machine precision.
NE_REAL_ARRAY
On entry, sm[value]=value.
Constraint: valuesm[i]value for all i.
On entry, t[value]=value.
Constraint: t[i]value for all i.
On entry with a call option, sm[value]=value.
Constraint: for call options, sm[i]value for all i.
On entry with a put option, sm[value]=value.
Constraint: for put options, sm[i]value for all i.

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

8  Parallelism and Performance

nag_lookback_fls_greeks (s30bbc) is threaded by NAG for parallel execution in multithreaded implementations of the NAG Library.
Please consult the Users' Note for your implementation for any additional implementation-specific information.

9  Further Comments

None.

10  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%.

10.1  Program Text

Program Text (s30bbce.c)

10.2  Program Data

Program Data (s30bbce.d)

10.3  Program Results

Program Results (s30bbce.r)


nag_lookback_fls_greeks (s30bbc) (PDF version)
s Chapter Contents
s Chapter Introduction
NAG Library Manual

© The Numerical Algorithms Group Ltd, Oxford, UK. 2014