Accelerating the pace of engineering and science

# capbylg2f

Price cap using Linear Gaussian two-factor model

## Syntax

• CapPrice = capbylg2f(ZeroCurve,a,b,sigma,eta,rho,Strike,
Maturity)
example
• CapPrice = capbylg2f(___, Name,Value) example

## Description

example

CapPrice = capbylg2f(ZeroCurve,a,b,sigma,eta,rho,Strike,
Maturity)
returns cap price for a two-factor additive Gaussian interest-rate model.

example

CapPrice = capbylg2f(___, Name,Value) returns cap price for a two-factor additive Gaussian interest-rate model using optional name-value pairs.

 Note:   Use the optional name-value pair argument, Notional, to pass a schedule to compute the price for an amortizing cap.

## Examples

expand all

### Price a Cap Using a Linear Gaussian Two-Factor Model

Define the ZeroCurve, a, b, sigma, eta, and rho parameters to price the cap.

```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]';

irdc = IRDataCurve('Zero',Settle,CurveDates,ZeroRates);

a = .07;
b = .5;
sigma = .01;
eta = .006;
rho = -.7;

CapMaturity = 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 = capbylg2f(irdc,a,b,sigma,eta,rho,Strike,CapMaturity)
```
```Price =

0.0316
0.3225
0.7761
1.3240
1.9394
3.1247
4.8451
7.3752
9.8582
11.4673
12.7850

```

### Price an Amortizing Cap Using a Linear Gaussian Two-Factor Model

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

```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]';

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 caps
CapMaturity = 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]';
Notional = {{'15-Dec-2010' 100;'15-Dec-2014' 70;'15-Dec-2022' 40;'15-Dec-2037' 10}};

% Price the amortizing caps
Price = capbylg2f(irdc,a,b,sigma,eta,rho,Strike,CapMaturity, 'Notional', Notional)
```
```Price =

0.0316
0.3225
0.7761
1.1313
1.5362
2.3213
2.8297
3.6878
3.7297
3.8906
4.0223

```

## Input Arguments

expand all

### ZeroCurve — Zero-curve for Linear Gaussian two-factor modelstructure

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

Data Types: struct

### a — Mean reversion for first factor for Linear Gaussian two-factor modelscalar

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

Data Types: single | double

### b — Mean reversion for second factor for Linear Gaussian two-factor modelscalar

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

Data Types: single | double

### sigma — Volatility for first factor for Linear Gaussian two-factor modelscalar

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

Data Types: single | double

### eta — Volatility for second factor for Linear Gaussian two-factor modelscalar

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

Data Types: single | double

### rho — Scalar correlation of the factorsscalar

Scalar correlation of the factors, specified as a scalar.

Data Types: single | double

### Strike — Cap strike pricenonnegative integer | vector of nonnegative integers

Cap strike price, specified as a nonnegative integer using a NumCaps-by-1 vector.

Data Types: single | double

### Maturity — Cap maturity datenonnegative integer | vector of nonnegative integers | string of dates

Cap maturity date, specified using a NumCaps-by-1 vector of serial date numbers or date strings.

Data Types: single | double | cell

### 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: Price = capbylg2f(irdc,a,b,sigma,eta,rho,Strike,CapMaturity,'Reset',1,'Notional',100)

### 'Reset' — Frequency of cap payments per year2 (default) | positive integer from the set[1,2,3,4,6,12] | vector of positive integers from the set [1,2,3,4,6,12]

Frequency of cap payments per year, specified as positive integers for the values 1,2,4,6,12] in a NumCaps-by-1 vector.

Data Types: single | double

### 'Notional' — Notional value of cap 100 (default) | nonnegative integer | vector of nonnegative integers

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

expand all

### CapPrice — Cap pricescalar | vector

Expected prices of cap, returned as a scalar or an NumCaps-by-1 vector.

expand all

### 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.