nag_binary_con_price (s30cac) (PDF version)
s Chapter Contents
s Chapter Introduction
NAG Library Manual

NAG Library Function Document

nag_binary_con_price (s30cac)

+ Contents

    1  Purpose
    7  Accuracy

1  Purpose

nag_binary_con_price (s30cac) computes the price of a binary or digital cash-or-nothing option.

2  Specification

#include <nag.h>
#include <nags.h>
void  nag_binary_con_price (Nag_OrderType order, Nag_CallPut option, Integer m, Integer n, const double x[], double s, double k, const double t[], double sigma, double r, double q, double p[], NagError *fail)

3  Description

nag_binary_con_price (s30cac) computes the price of a binary or digital cash-or-nothing option which pays a fixed amount, K, at expiration if the option is in-the-money (see Section 2.4 in the s Chapter Introduction). For a strike price, X, underlying asset price, S, and time to expiry, T, the payoff is therefore K, if S>X for a call or S<X for a put. Nothing is paid out when this condition is not met.
The price of a call with volatility, σ, risk-free interest rate, r, and annualised dividend yield, q, is
Pcall = K e-rT Φd2
and for a put,
Pput = K e-rT Φ-d2
where Φ is the cumulative Normal distribution function,
Φx = 1 2π - x -y2/2 dy ,
d2 = ln S/X + r-q - σ2 / 2 T σT .
The option price Pij=PX=Xi,T=Tj is computed for each strike price in a set Xi, i=1,2,,m, and for each expiry time in a set Tj, j=1,2,,n.

4  References

Reiner E and Rubinstein M (1991) Unscrambling the binary code Risk 4

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 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.
A call; the holder has a right to buy.
A put; the holder has a right to sell.
Constraint: option=Nag_Call or Nag_Put.
3:     mIntegerInput
On entry: the number of strike prices to be used.
Constraint: m1.
4:     nIntegerInput
On entry: the number of times to expiry to be used.
Constraint: n1.
5:     x[m]const doubleInput
On entry: x[i-1] must contain Xi, the ith strike price, for i=1,2,,m.
Constraint: x[i-1]z ​ and ​ x[i-1] 1 / z , where z = nag_real_safe_small_number , the safe range parameter, 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:     kdoubleInput
On entry: the amount, K, to be paid at expiration if the option is in-the-money, i.e., if s>x[i-1] when option=Nag_Call, or if s<x[i-1] when option=Nag_Put, for i=1,2,,m.
Constraint: k0.0.
8:     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.
9:     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.
10:   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: r0.0.
11:   qdoubleInput
On entry: q, the annual continuous yield rate. Note that a rate of 8% should be entered as 0.08.
Constraint: q0.0.
12:   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 strike price xi at expiry tj for i=1,2,,m and j=1,2,,n.
13:   failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

6  Error Indicators and Warnings

Dynamic memory allocation failed.
On entry, argument value had an illegal value.
On entry, m=value.
Constraint: m1.
On entry, n=value.
Constraint: n1.
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.
On entry, k=value.
Constraint: k0.0.
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.
On entry, t[value]=value.
Constraint: t[i]value.
On entry, x[value]=value.
Constraint: x[i]value and x[i]value.

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_binary_con_price (s30cac) 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


10  Example

This example computes the price of a cash-or-nothing put with a time to expiry of 0.75 years, a stock price of 100 and a strike price of 80. The risk-free interest rate is 6% per year and the volatility is 35% per year. If the option is in-the-money at expiration, i.e., if S>X, the payoff is 10.

10.1  Program Text

Program Text (s30cace.c)

10.2  Program Data

Program Data (s30cace.d)

10.3  Program Results

Program Results (s30cace.r)

nag_binary_con_price (s30cac) (PDF version)
s Chapter Contents
s Chapter Introduction
NAG Library Manual

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