Documentation

# capbynormal

Price caps using Normal or Bachelier pricing model

## Syntax

``````[CapPrice,Caplets] = capbynormal(RateSpec,Strike,Settle,Maturity,Volatility)``````
``````[CapPrice,Caplets] = capbynormal(___,Name,Value)``````

## Description

example

``````[CapPrice,Caplets] = capbynormal(RateSpec,Strike,Settle,Maturity,Volatility)``` prices caps using the Normal (Bachelier) pricing model for negative rates. `capbynormal` computes prices of vanilla caps and amortizing caps.```

example

``````[CapPrice,Caplets] = capbynormal(___,Name,Value)``` adds optional name-value pair arguments.```

## Examples

collapse all

Consider an investor who gets into a contract that caps the interest rate on a \$100,000 loan at –.08% quarterly compounded for 3 months, starting on January 1, 2009. Assuming that on January 1, 2008 the zero rate is .069394% continuously compounded and the volatility is 20%, use this data to compute the cap price. First, calculate the `RateSpec`, and then use `capbynormal` to compute the `CapPrice`.

```ValuationDate = 'Jan-01-2008'; EndDates ='April-01-2010'; Rates = 0.0069394; Compounding = -1; Basis = 1; RateSpec = intenvset('ValuationDate', ValuationDate, ... 'StartDates', ValuationDate,'EndDates', EndDates, ... 'Rates', Rates,'Compounding', Compounding,'Basis', Basis); Settle = 'Jan-01-2009'; % cap starts in a year Maturity = 'April-01-2009'; Volatility = 0.20; CapRate = -0.008; CapReset = 4; Principal=100000; CapPrice = capbynormal(RateSpec, CapRate, Settle, Maturity, Volatility,... 'Reset',CapReset,'ValuationDate',ValuationDate,'Principal', Principal,... 'Basis', Basis)```
```CapPrice = 2.1682e+03 ```

Define the `RateSpec`.

```Settle = datenum('20-Jan-2016'); ZeroTimes = [.5 1 2 3 4 5 7 10 20 30]'; ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]'; ZeroDates = datemnth(Settle,12*ZeroTimes); RateSpec = intenvset('StartDate',Settle,'EndDates',ZeroDates,'Rates',ZeroRates)```
```RateSpec = struct with fields: FinObj: 'RateSpec' Compounding: 2 Disc: [10x1 double] Rates: [10x1 double] EndTimes: [10x1 double] StartTimes: [10x1 double] EndDates: [10x1 double] StartDates: 736349 ValuationDate: 736349 Basis: 0 EndMonthRule: 1 ```

Define the cap instrument and price with `capbyblk`.

```ExerciseDate = datenum('20-Jan-2026'); [~,ParSwapRate] = swapbyzero(RateSpec,[NaN 0],Settle,ExerciseDate)```
```ParSwapRate = 0.0216 ```
```Strike = .01; BlackVol = .3; NormalVol = BlackVol*ParSwapRate; Price = capbyblk(RateSpec,Strike,Settle,ExerciseDate,BlackVol)```
```Price = 11.8693 ```

Price the cap instrument using `capbynormal`.

`Price_Normal = capbynormal(RateSpec,Strike,Settle,ExerciseDate,NormalVol)`
```Price_Normal = 12.5495 ```

Price the cap instrument using `capbynormal` for a negative strike.

` Price_Normal = capbynormal(RateSpec,-.005,Settle,ExerciseDate,NormalVol)`
```Price_Normal = 24.4816 ```

## Input Arguments

collapse all

Interest-rate term structure (annualized and continuously compounded), specified by the `RateSpec` obtained from `intenvset`. For information on the interest-rate specification, see `intenvset`.

Data Types: `struct`

Rate at which cap is exercised, specified as a `NINST`-by-`1` vector of decimal values.

Data Types: `double`

Settlement date for the cap, specified as a `NINST`-by-`1` vector of serial date numbers, date character vectors, datetime objects, or string objects.

Data Types: `double` | `char` | `datetime` | `string`

Maturity date for the cap, specified as a `NINST`-by-`1` vector of serial date numbers, date character vectors, datetime objects, or string objects.

Data Types: `double` | `char` | `datetime` | `string`

Normal volatilities values, specified as a `NINST`-by-`1` vector of numeric values.

For more information on the Normal model, see Work with Negative Interest Rates.

Data Types: `double`

### Name-Value Pair Arguments

Specify optional comma-separated pairs of `Name,Value` arguments. `Name` is the argument name and `Value` is the corresponding value. `Name` must appear inside quotes. You can specify several name and value pair arguments in any order as `Name1,Value1,...,NameN,ValueN`.

Example: `[CapPrice,Caplets] = capbynormal(RateSpec,Strike,Settle,Maturity,Volatility,'Reset',CapReset,'Principal',100000,'Basis',7) `

Reset frequency payment per year, specified as the comma-separated pair consisting of `'Reset'` and a `NINST`-by-`1` vector.

Data Types: `double`

Notional principal amount, specified as the comma-separated pair consisting of `'Principal'` and a `NINST`-by-`1` of notional principal amounts, or a `NINST`-by-`1` cell array. Each element in the `NINST`-by-`1` cell array is a `NumDates`-by-`2` cell array, where the first column is dates, and the second column is the associated principal amount. The date indicates the last day that the principal value is valid.

Use `Principal` to pass a schedule to compute the price for an amortizing cap.

Data Types: `double` | `cell`

Day-count basis of instrument representing the basis used when annualizing the input forward rate, specified as the comma-separated pair consisting of `'Basis'`and a `NINST`-by-`1` vector of integers. Values are:

• 0 = actual/actual

• 1 = 30/360 (SIA)

• 2 = actual/360

• 3 = actual/365

• 4 = 30/360 (PSA)

• 5 = 30/360 (ISDA)

• 6 = 30/360 (European)

• 7 = actual/365 (Japanese)

• 8 = actual/actual (ICMA)

• 9 = actual/360 (ICMA)

• 10 = actual/365 (ICMA)

• 11 = 30/360E (ICMA)

• 12 = actual/365 (ISDA)

• 13 = BUS/252

Data Types: `double`

Observation date of the investment horizon, specified as the comma-separated pair consisting of `'ValuationDate'` and a serial date number, date character vector, datetime object, or string array.

Data Types: `double` | `char` | `datetime` | `string`

The rate curve to be used in projecting the future cash flows, specified as the comma-separated pair consisting of `'ProjectionCurve'` and rate curve structure. This structure must be created using `intenvset`. Use this optional input if the forward curve is different from the discount curve.

Data Types: `struct`

## Output Arguments

collapse all

Expected price of the cap, returned as a `NINST`-by-`1` vector.

Caplets, returned as a `NINST`-by-`NCF` array of caplets, padded with `NaN`s.

collapse all

### Cap

A cap is a contract that includes a guarantee that sets the maximum interest rate to be paid by the holder, based on an otherwise floating interest rate.

The payoff for a cap is:

$\mathrm{max}\left(CurrentRate-CapRate,0\right)$