Financial Derivatives Toolbox | ![]() ![]() |
Black-Derman-Toy Model (BDT)
The Black-Derman-Toy (BDT) model is an analytical model used for pricing interest rate derivatives. The model considers a given initial zero rate term structure of interest rates and a specification of the yield volatilities of long rates to build a tree representing the evolution of the interest rates. For further explanation, see the paper "A One Factor Model of Interest Rates and its Application to Treasury Bond Options" by Fischer Black, Emanuel Derman, and William Toy.
Building a BDT Interest Rate Tree
The BDT interest rate tree represents the evolution of interest rates in a given period of time. This section explains how to create the BDT interest rate tree using the Financial Derivatives Toolbox.
The MATLAB function that creates the BDT interest rate tree is bdttree
. This function takes three structures as input arguments:
VolSpec
. (See Specifying the Volatility (VolSpec).)
RateSpec
. (See Specifying the Interest Rate Term Structure (RateSpec).)
TimeSpec
. (See Specifying the Time Structure (TimeSpec).)
Creating the BDT Interest Rate Tree (bdttree)
Calling the function bdttree
creates the structure, BDTTree
, containing time and interest rate information of the recombining tree.
This structure is a self-contained unit that includes the BDT tree of rates (found in the FwdTree
field), and the volatility, rate, and time specifications used in building this tree.
The calling syntax for bdttree
is
VolSpec
is a structure that specifies the interest rate volatility process. VolSpec
is created using the function bdtvolspec
.
RateSpec
is the interest rate specification of the initial rate curve. This structure is created with the function intenvset
. (See Interest Rate Term Structure.)
TimeSpec
is the tree time layout specification. This variable is created with the function bdttimespec
. It represents the mapping between level times and level dates for rate quoting. This structure determines indirectly the number of levels of the tree generated in the call to bdttree
.
Specifying the Volatility (VolSpec)
The function bdtvolspec
generates the structure VolSpec
, which specifies the volatility process. The function requires three input arguments:
ValuationDate
VolDates
VolCurve
An optional fourth argument InterpMethod
, specifying the interpolation method, can be included.
The syntax used for calling bdtvolspec
is
ValuationDate
is the first observation date in the tree.
VolDates
is a vector of dates representing yield volatility end dates.
VolCurve
is a vector of yield volatility values.
InterpMethod
is the method of interpolation to use. The default is 'linear'
.
ValuationDate = datenum('01-01-2000'); EndDates = datenum(['01-01-2001'; '01-01-2002'; '01-01-2003'; '01-01-2004'; '01-01-2005']); Volatility = [.2; .19; .18; .17; .16];
Use bdtvolspec
to create a volatility specification. Because no interpolation method is explicitly specified, the function uses the 'linear'
default.
BDTVolSpec = bdtvolspec(ValuationDate, EndDates, Volatility) BDTVolSpec = FinObj: 'BDTVolSpec' ValuationDate: 730486 VolDates: [5x1 double] VolCurve: [5x1 double] VolInterpMethod: 'linear'
Specifying the Interest Rate Term Structure (RateSpec)
The structure RateSpec
is an interest term structure that defines the initial interest rate specification from which the tree rates are derived. The section Interest Rate Term Structure explains how to create these structures using the function intenvset
, given the interest rates, the starting and ending dates for each rate, and the compounding value.
Compounding = 1; Rates = [0.02; 0.02; 0.02; 0.02]; StartDates = ['01-Jan-2000'; '01-Jan-2001'; '01-Jan-2002'; '01-Jan-2003']; EndDates = ['01-Jan-2001'; '01-Jan-2002'; '01-Jan-2003'; '01-Jan-2004']; ValuationDate = '01-Jan-2000'; RateSpec = intenvset('Compounding',1,'Rates', Rates,... 'StartDates', StartDates, 'EndDates', EndDates,... 'ValuationDate', ValuationDate) RateSpec = FinObj: 'RateSpec' Compounding: 1 Disc: [4x1 double] Rates: [4x1 double] EndTimes: [4x1 double] StartTimes: [4x1 double] EndDates: [4x1 double] StartDates: [4x1 double] ValuationDate: 730486 Basis: 0 EndMonthRule: 1
Use the function datedisp
to examine the dates defined in the variable RateSpec
. For example,
Specifying the Time Structure (TimeSpec)
The structure TimeSpec
specifies the time structure for a BDT tree. This structure defines the mapping between the observation times at each level of the tree and the corresponding dates.
TimeSpec
is built using the function bdttimespec
. The bdttimespec
function requires three input arguments:
The syntax used for calling bdttimespec
is
ValuationDate
is the first observation date in the tree.
Maturity
is a vector of dates representing the cash flow dates of the tree. Any instrument cash flows with these maturities fall on tree nodes.
Compounding
is the frequency at which the rates are compounded when annualized.
Calling bdttimespec
with the same data used to create the interest rate term structure, RateSpec
builds the structure that specifies the time layout for the tree.
Maturity = EndDates; TimeSpec = bdttimespec(ValuationDate, Maturity, Compounding) TimeSpec = FinObj: 'BDTTimeSpec' ValuationDate: 730486 Maturity: [4x1 double] Compounding: 1 Basis: 0 EndMonthRule: 1
Note that the maturities specified when building TimeSpec
do not have to coincide with the EndDates
of the rate intervals in RateSpec
. Since TimeSpec
defines the time-date mapping of the BDT tree, the rates in RateSpec
are interpolated to obtain the initial rates with maturities equal to those found in TimeSpec
.
Example: Creating a BDT Tree
Use the previously computed values for VolSpec
, RateSpec
, and TimeSpec
as input to the function bdttree
to create a BDT Tree.
BDTTree = bdttree(BDTVolSpec, RateSpec, TimeSpec) BDTTree = FinObj: 'BDTFwdTree' VolSpec: [1x1 struct] TimeSpec: [1x1 struct] RateSpec: [1x1 struct] tObs: [0 1.00 2.00 3.00] TFwd: {[4x1 double] [3x1 double] [2x1 double] [3.00]} CFlowT: {[4x1 double] [3x1 double] [2x1 double] [4.00]} FwdTree: {[1.02] [1.02 1.02] [1.01 1.02 1.03] [1.01 1.02 1.02 1.03]}
![]() | Calculating Prices and Sensitivities | Using BDT Trees in MATLAB | ![]() |