Accelerating the pace of engineering and science

# floorbybdt

Price floor instrument from Black-Derman-Toy interest-rate tree

## Syntax

```[Price, PriceTree] = floorbybdt(BDTTree, Strike, Settle, Maturity,Reset, Basis, Principal, Options)
```

## Arguments

 BDTTree Interest-rate tree structure created by bdttree. Strike Number of instruments (NINST)-by-1 vector of rates at which the floor is exercised. Settle Settlement date. NINST-by-1 vector of dates representing the settlement dates of the floor. The Settle date for every floor is set to the ValuationDate of the BDT tree. The floor argument Settle is ignored. Maturity NINST-by-1 vector of dates representing the maturity dates of the floor. Reset (Optional) NINST-by-1 vector representing the frequency of payments per year. Default = 1. Basis (Optional) Day-count basis of the instrument. A vector of integers.0 = actual/actual (default)1 = 30/360 (SIA)2 = actual/3603 = actual/3654 = 30/360 (BMA)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/actual (ISDA)13 = BUS/252For more information, see basis. Principal (Optional) 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 associated principal amount. The date indicates the last day that the principal value is valid. Default is 100. Options (Optional) Derivatives pricing options structure created with derivset.

## Description

[Price, PriceTree] = floorbybdt(BDTTree, Strike, Settlement, Maturity, Reset, Basis, Principal, Options) computes the price of a floor instrument from a BDT interest-rate tree.

Price is an NINST-by-1 vector of the expected prices of the floor at time 0.

PriceTree is the tree structure with values of the floor at each node.

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

## Examples

expand all

### Price a 10% Floor Instrument Using a BDT Interest-Rate Tree

Load the file deriv.mat, which provides BDTTree. BDTTree contains the time and interest-rate information needed to price the floor instrument.

```load deriv.mat;
```

Set the required values. Other arguments will use defaults.

```Strike = 0.10;
Settle = '01-Jan-2000';
Maturity = '01-Jan-2004';
```

Use floorbybdt to compute the price of the floor instrument.

```Price = floorbybdt(BDTTree, Strike, Settle, Maturity)
```
```Price =

0.2428

```

### Price a 10% Floor Instrument Using a Newly Created BDT Interest-Rate Tree

First set the required arguments for the three needed specifications.

```Compounding = 1;
ValuationDate = '01-01-2000';
StartDate = ValuationDate;
EndDates = ['01-01-2001'; '01-01-2002'; '01-01-2003';
'01-01-2004'; '01-01-2005'];
Rates = [.1; .11; .12; .125; .13];
Volatility = [.2; .19; .18; .17; .16];
```

Create the specifications.

```RateSpec = intenvset('Compounding', Compounding,...
'ValuationDate', ValuationDate,...
'StartDates', StartDate,...
'EndDates', EndDates,...
'Rates', Rates);
BDTTimeSpec = bdttimespec(ValuationDate, EndDates, Compounding);
BDTVolSpec = bdtvolspec(ValuationDate, EndDates, Volatility);
```

Create the BDT tree from the specifications.

```BDTTree = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec)
```
```BDTTree =

FinObj: 'BDTFwdTree'
VolSpec: [1x1 struct]
TimeSpec: [1x1 struct]
RateSpec: [1x1 struct]
tObs: [0 1 2 3 4]
dObs: [730486 730852 731217 731582 731947]
TFwd: {[5x1 double]  [4x1 double]  [3x1 double]  [2x1 double]  [4]}
CFlowT: {[5x1 double]  [4x1 double]  [3x1 double]  [2x1 double]  [5]}
FwdTree: {1x5 cell}

```

Set the floor arguments. Remaining arguments will use defaults.

```FloorStrike = 0.10;
Settlement = ValuationDate;
Maturity = '01-01-2002';
FloorReset = 1;
```

Use floorbybdt to find the price of the floor instrument.

```Price= floorbybdt(BDTTree, FloorStrike, Settlement, Maturity,...
FloorReset)
```
```Price =

0.0863

```

### Compute the Price of an Amortizing Floor Using the BDT Model

Define the RateSpec.

```Rates = [0.03583; 0.042147; 0.047345; 0.052707; 0.054302];
ValuationDate = '15-Nov-2011';
StartDates = ValuationDate;
EndDates = {'15-Nov-2012';'15-Nov-2013';'15-Nov-2014' ;'15-Nov-2015';'15-Nov-2016'};
Compounding = 1;
RateSpec = intenvset('ValuationDate', ValuationDate,'StartDates', StartDates,...
'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding)
```
```RateSpec =

FinObj: 'RateSpec'
Compounding: 1
Disc: [5x1 double]
Rates: [5x1 double]
EndTimes: [5x1 double]
StartTimes: [5x1 double]
EndDates: [5x1 double]
StartDates: 734822
ValuationDate: 734822
Basis: 0
EndMonthRule: 1

```

Define the floor instrument.

```Settle ='15-Nov-2011';
Maturity = '15-Nov-2015';
Strike = 0.039;
Reset = 1;
Principal ={{'15-Nov-2012' 100;'15-Nov-2013' 70;'15-Nov-2014' 40;'15-Nov-2015' 10}};
```

Build the BDT Tree.

```BDTTimeSpec = bdttimespec(ValuationDate, EndDates);
Volatility = 0.10;
BDTVolSpec = bdtvolspec(ValuationDate, EndDates, Volatility*ones(1,length(EndDates))');
BDTTree = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec)
```
```BDTTree =

FinObj: 'BDTFwdTree'
VolSpec: [1x1 struct]
TimeSpec: [1x1 struct]
RateSpec: [1x1 struct]
tObs: [0 1 2 3 4]
dObs: [734822 735188 735553 735918 736283]
TFwd: {[5x1 double]  [4x1 double]  [3x1 double]  [2x1 double]  [4]}
CFlowT: {[5x1 double]  [4x1 double]  [3x1 double]  [2x1 double]  [5]}
FwdTree: {1x5 cell}

```

Price the amortizing floor.

```Basis = 0;
Price = floorbybdt(BDTTree, Strike, Settle, Maturity, Reset, Basis, Principal)
```
```Price =

0.3060

```