# floorbylg2f

Price floor using Linear Gaussian two-factor model

## Syntax

``FloorPrice = floorbylg2f(ZeroCurve,a,b,sigma,eta,rho,Strike,Maturity)``
``FloorPrice = floorbylg2f(___,Name,Value)``

## Description

example

````FloorPrice = floorbylg2f(ZeroCurve,a,b,sigma,eta,rho,Strike,Maturity)` returns the floor price for a two-factor additive Gaussian interest-rate model.```

example

````FloorPrice = floorbylg2f(___,Name,Value)` adds optional name-value pair arguments. NoteUse the optional name-value pair argument, `Notional`, to pass a schedule to compute the price for an amortizing floor. ```

## Examples

collapse all

Define the `ZeroCurve`, `a`, `b`, `sigma`, `eta`, and `rho` parameters to compute the floor price.

```Settle = datenum('15-Dec-2007'); ZeroTimes = [3/12 6/12 1 5 7 10 20 30]'; ZeroRates = [0.033 0.034 0.035 0.040 0.042 0.044 0.048 0.0475]'; CurveDates = daysadd(Settle,360*ZeroTimes,1); irdc = IRDataCurve('Zero',Settle,CurveDates,ZeroRates); a = .07; b = .5; sigma = .01; eta = .006; rho = -.7; FloorMaturity = daysadd(Settle,360*[1:5 7 10 15 20 25 30],1); Strike = [0.035 0.037 0.038 0.039 0.040 0.042 0.044 0.046 0.047 0.047 0.047]'; Price = floorbylg2f(irdc,a,b,sigma,eta,rho,Strike,FloorMaturity)```
```Price = 11×1 0 0.4190 0.8485 1.3365 1.8671 3.1091 4.9807 7.8518 9.8297 11.4578 ⋮ ```

Define the `ZeroCurve`, `a`, `b`, `sigma`, `eta`, `rho`, and `Notional` parameters for the amortizing floor.

```Settle = datenum('15-Dec-2007'); % Define ZeroCurve ZeroTimes = [3/12 6/12 1 5 7 10 20 30]'; ZeroRates = [0.033 0.034 0.035 0.040 0.042 0.044 0.048 0.0475]'; CurveDates = daysadd(Settle,360*ZeroTimes); irdc = IRDataCurve('Zero',Settle,CurveDates,ZeroRates); % Define a, b, sigma, eta, and rho a = .07; b = .5; sigma = .01; eta = .006; rho = -.7; % Define the amortizing floors FloorMaturity = daysadd(Settle,360*[1:5 7 10 15 20 25 30],1); Strike = [0.025 0.036 0.037 0.038 0.039 0.041 0.043 0.045 0.046 0.046 0.046]'; Notional = {{'15-Dec-2012' 100;'15-Dec-2017' 70;'15-Dec-2022' 40;'15-Dec-2037' 10}}; % Price the amortizing floors Price = floorbylg2f(irdc,a,b,sigma,eta,rho,Strike,FloorMaturity,'Notional',Notional)```
```Price = 11×1 0 0.2776 0.6630 1.1062 1.5938 2.5589 3.9582 5.4985 6.1113 6.2670 ⋮ ```

## Input Arguments

collapse all

Zero curve for the Linear Gaussian two-factor model, specified using `IRDataCurve` or `RateSpec`.

Data Types: `struct`

Mean reversion for the first factor for the Linear Gaussian two-factor model, specified as a scalar.

Data Types: `single` | `double`

Mean reversion for the second factor for the Linear Gaussian two-factor model, specified as a scalar.

Data Types: `single` | `double`

Volatility for the first factor for the Linear Gaussian two-factor model, specified as a scalar.

Data Types: `single` | `double`

Volatility for the second factor for the Linear Gaussian two-factor model, specified as a scalar.

Data Types: `single` | `double`

Scalar correlation of the factors, specified as a scalar.

Data Types: `single` | `double`

Floor strike price specified, as a nonnegative integer using a `NumFloors`-by-`1` vector of floor strike prices.

Data Types: `single` | `double`

Floor maturity date, specified using a `NumFloors`-by-`1` vector of serial date numbers or date character vectors.

Data Types: `single` | `double` | `char` | `cell`

### Name-Value Arguments

Specify optional pairs of arguments as `Name1=Value1,...,NameN=ValueN`, where `Name` is the argument name and `Value` is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose `Name` in quotes.

Example: ```Price = floorbylg2f(irdc,a,b,sigma,eta,rho,Strike,FloorMaturity,'Reset',1,'Notional',100)```

Frequency of floor payments per year, specified as the comma-separated pair consisting of `'Reset'` and positive integers for the values `[1,2,4,6,12]` in a `NumFloors`-by-`1` vector.

Data Types: `single` | `double`

`NINST`-by-`1` of notional principal amounts or `NINST`-by-`1` cell array where each element 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.

Data Types: `single` | `double`

## Output Arguments

collapse all

Floor price, returned as a scalar or a `NumFloors`-by-`1` vector.

collapse all

### Floor

A floor is a contract that includes a guarantee setting the minimum interest rate to be received by the holder, based on an otherwise floating interest rate.

The payoff for a floor is:

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

## Algorithms

The following defines the two-factor additive Gaussian interest-rate model, given the `ZeroCurve`, `a`, `b`, `sigma`, `eta`, and `rho` parameters:

`$r\left(t\right)=x\left(t\right)+y\left(t\right)+\varphi \left(t\right)$`

`$dx\left(t\right)=-a\left(x\right)\left(t\right)dt+\sigma \left(d{W}_{1}\left(t\right),x\left(0\right)=0$`

`$dy\left(t\right)=-b\left(y\right)\left(t\right)dt+\eta \left(d{W}_{2}\left(t\right),y\left(0\right)=0$`

where $d{W}_{1}\left(t\right)d{W}_{2}\left(t\right)=\rho dt$ is a two-dimensional Brownian motion with correlation ρ and ϕ is a function chosen to match the initial zero curve.

## References

[1] Brigo, D. and F. Mercurio, Interest Rate Models - Theory and Practice. Springer Finance, 2006.

## Version History

Introduced in R2013a