s Chapter Contents
s Chapter Introduction
NAG C Library Manual

# NAG Library Function Documentnag_binary_con_greeks (s30cbc)

## 1  Purpose

nag_binary_con_greeks (s30cbc) computes the price of a binary or digital cash-or-nothing option together with its sensitivities (Greeks).

## 2  Specification

 #include #include
 void nag_binary_con_greeks (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[], 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_binary_con_greeks (s30cbc) computes the price of a binary or digital cash-or-nothing 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. This option 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 for a put. Nothing is paid out when this condition is not met.
The price of a call with volatility, $\sigma$, 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 $\Phi$ is the cumulative Normal distribution function,
 $Φx = 1 2π ∫ -∞ x exp -y2/2 dy ,$
and
 $d2 = ln S/X + r-q- σ2 / 2 T σ⁢T .$

## 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 ${\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 strike 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:     x[m]const doubleInput
On entry: ${\mathbf{x}}\left[i-1\right]$ must contain ${X}_{\mathit{i}}$, the $\mathit{i}$th strike price, for $\mathit{i}=1,2,\dots ,{\mathbf{m}}$.
Constraint: ${\mathbf{x}}\left[\mathit{i}-1\right]\ge z\text{​ and ​}{\mathbf{x}}\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}}$.
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:     kdoubleInput
On entry: the amount, $K$, to be paid at expiration if the option is in-the-money, i.e., if ${\mathbf{s}}>{\mathbf{x}}\left[\mathit{i}-1\right]$ when ${\mathbf{option}}=\mathrm{Nag_Call}$, or if ${\mathbf{s}}<{\mathbf{x}}\left[\mathit{i}-1\right]$ when ${\mathbf{option}}=\mathrm{Nag_Put}$, for $\mathit{i}=1,2,\dots ,m$.
Constraint: ${\mathbf{k}}\ge 0.0$.
8:     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$.
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: ${\mathbf{r}}\ge 0.0$.
11:   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$.
12:   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.
13:   delta[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{delta}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{delta}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array delta contains the sensitivity, $\frac{\partial P}{\partial S}$, of the option price to change in the price of the underlying asset.
14:   gamma[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{gamma}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{gamma}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array gamma contains the sensitivity, $\frac{{\partial }^{2}P}{\partial {S}^{2}}$, of delta to change in the price of the underlying asset.
15:   vega[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{vega}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{vega}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array vega contains the sensitivity, $\frac{\partial P}{\partial \sigma }$, of the option price to change in the volatility of the underlying asset.
16:   theta[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{theta}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{theta}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array theta contains the sensitivity, $-\frac{\partial P}{\partial T}$, of the option price to change in the time to expiry of the option.
17:   rho[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{rho}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{rho}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array rho contains the sensitivity, $\frac{\partial P}{\partial r}$, of the option price to change in the annual risk-free interest rate.
18:   crho[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{crho}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{crho}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array crho containing the sensitivity, $\frac{\partial P}{\partial b}$, of the option price to change in the annual cost of carry rate, $b$, where $b=r-q$.
19:   vanna[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{vanna}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{vanna}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array vanna contains the sensitivity, $\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.
20:   charm[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{charm}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{charm}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array charm contains the sensitivity, $-\frac{{\partial }^{2}P}{\partial S\partial T}$, of delta to change in the time to expiry of the option.
21:   speed[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{speed}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{speed}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array speed contains the sensitivity, $\frac{{\partial }^{3}P}{\partial {S}^{3}}$, of gamma to change in the price of the underlying asset.
22:   colour[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{colour}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{colour}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array colour contains the sensitivity, $-\frac{{\partial }^{3}P}{\partial {S}^{2}\partial T}$, of gamma to change in the time to expiry of the option.
23:   zomma[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{zomma}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{zomma}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array zomma contains the sensitivity, $\frac{{\partial }^{3}P}{\partial {S}^{2}\partial \sigma }$, of gamma to change in the volatility of the underlying asset.
24:   vomma[${\mathbf{m}}×{\mathbf{n}}$]doubleOutput
Note: the $\left(i,j\right)$th element of the matrix is stored in
• ${\mathbf{vomma}}\left[\left(j-1\right)×{\mathbf{m}}+i-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_ColMajor}$;
• ${\mathbf{vomma}}\left[\left(i-1\right)×{\mathbf{n}}+j-1\right]$ when ${\mathbf{order}}=\mathrm{Nag_RowMajor}$.
On exit: the $m×n$ array vomma contains the sensitivity, $\frac{{\partial }^{2}P}{\partial {\sigma }^{2}}$, of vega to change in the volatility of the underlying asset.
25:   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{k}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{k}}\ge 0.0$.
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{t}}\left[〈\mathit{\text{value}}〉\right]=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{t}}\left[i\right]\ge 〈\mathit{\text{value}}〉$.
On entry, ${\mathbf{x}}\left[〈\mathit{\text{value}}〉\right]=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{x}}\left[i\right]\ge 〈\mathit{\text{value}}〉$ and ${\mathbf{x}}\left[i\right]\le 〈\mathit{\text{value}}〉$.

## 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 cash-or-nothing call with a time to expiry of $0.75$ years, a stock price of $110$ and a strike price of $87$. The risk-free interest rate is $5%$ per year, there is an annual dividend return of $4%$ and the volatility is $35%$ per year. If the option is in-the-money at expiration, i.e., if $S>X$, the payoff is $5$.

### 9.1  Program Text

Program Text (s30cbce.c)

### 9.2  Program Data

Program Data (s30cbce.d)

### 9.3  Program Results

Program Results (s30cbce.r)