# Documentation

### This is machine translation

Translated by
Mouseover text to see original. Click the button below to return to the English version of the page.

# floorbynormal

Price floors using Normal or Bachelier pricing model

## Syntax

``````[FloorPrice,Floorlets] = floorbynormal(RateSpec,Strike,Settle,Maturity,Volatility)``````
``````[FloorPrice,Floorlets] = floorbynormal(___,Name,Value)``````

## Description

example

``````[FloorPrice,Floorlets] = floorbynormal(RateSpec,Strike,Settle,Maturity,Volatility)``` prices floors using the Normal (Bachelier) pricing model for negative rates. `floorbynormal` computes prices of vanilla floors and amortizing floors.```

example

``````[FloorPrice,Floorlets] = floorbynormal(___,Name,Value)``` adds optional name-value pair arguments.```

## Examples

collapse all

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

```ValuationDate = 'Jan-01-2008'; EndDates ='April-01-2010'; Rates = 0.0069394; Compounding = -1; Basis = 1; % calculate the RateSpec RateSpec = intenvset('ValuationDate', ValuationDate, ... 'StartDates', ValuationDate,'EndDates', EndDates, ... 'Rates', Rates,'Compounding', Compounding,'Basis', Basis); Settle = 'Jan-01-2009'; % floor starts in a year Maturity = 'April-01-2009'; Volatility = 0.20; FloorRate = -0.006; FloorReset = 4; Principal=100000; FloorPrice = floorbynormal(RateSpec, FloorRate, Settle, Maturity, Volatility,... 'Reset',FloorReset,'ValuationDate',ValuationDate,'Principal', Principal,... 'Basis', Basis)```
```FloorPrice = 3.7966e+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 floor instrument and price with `floorbyblk`.

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

Price the floor instrument using `floorbynormal`.

```Price_Normal = floorbynormal(RateSpec,Strike,Settle,ExerciseDate,NormalVol) ```
```Price_Normal = 1.9099 ```

Price the floor instrument using `floorbynormal` for a negative strike.

``` Price_Normal = floorbynormal(RateSpec,-.005,Settle,ExerciseDate,NormalVol) ```
```Price_Normal = 0.0857 ```

## 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 floor is exercised, specified as a `NINST`-by-`1` vector of decimal values.

Data Types: `double`

Settlement date for the floor, 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 floor, 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 single quotes (`' '`). You can specify several name and value pair arguments in any order as `Name1,Value1,...,NameN,ValueN`.

Example: `[FloorPrice,Floorlets] = floorbynormal(RateSpec,Strike,Settle,Maturity,Volatility,'Reset',CapReset,'Principal',100000,'Basis',7) `

collapse all

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` vector 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 object.

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 a 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 floor, returned as a `NINST`-by-`1` vector.

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