主要内容

理解利率树模型

简介

金融工具工具箱™支持以下利率树:金宝app

  • Black-Derman-Toy (BDT)

  • Black-Karasinski (BK)

  • Heath-Jarrow-Morton (HJM)

  • Hull-White (HW)

  • Cox-Ingersoll-Ross (CIR)

Heath-Jarrow-Morton模型是利率衍生品定价中应用最广泛的模型之一。该模型考虑给定利率的初始期限结构和远期利率波动率的规范,基于统计过程构建代表利率演变的树。欲知进一步解释,请参阅书籍固定收益证券与利率期权模型罗伯特·a·贾罗著。

Black-Derman-Toy模型是另一个常用的利率衍生品定价分析模型。该模型考虑了给定的初始零利率期限结构和长期利率收益率波动率的规范,构建了表示利率演变的树。如需进一步解释,请参阅菲舍尔·布莱克、伊曼纽尔·德曼和威廉·托伊的论文《利率的单因素模型及其在国债期权中的应用》。

Hull-White模型结合利率的初始期限结构和波动率期限结构,构建了短期利率的三叉重组树。生成的树用于评估利率相关证券的价值。赫尔-怀特模型在金融工具工具箱软件中的实现仅限于一个因素。

布莱克-卡拉辛斯基模型是赫尔-怀特模型的单因素对数正态模型。

有关赫尔-怀特模型和布莱克-卡拉辛斯基模型的进一步信息,请参阅该书期权、期货和其他衍生品约翰·c·赫尔著。

构建远期汇率树

远期利率树是表示一定时期内利率变化的基本单位。本节解释如何使用金融工具工具箱创建正向利率树。

请注意

为了避免不必要的重复,本文使用HJM和BDT模型来说明利率树的创建和使用。HW和BK模型与BDT模型类似。存在具体差异的地方,在HW和BK树结构

MATLAB®创建速率树的函数是hjmtree而且bdttree.的hjmtree功能创造结构,HJMTree,包含茂密树木的时间和正向速率信息。的bdttree函数创建了类似的结构,BDTTree,表示重组树。

此结构是一个自包含单元,其中包括速率树(在FwdTree结构的字段)以及用于构建此树的波动性、速率和时间规范。

这些函数以三个结构体作为输入参数:

可视化您创建的任何树的一个简单方法是使用树状视图函数,该函数以图形方式显示树。看到树木的图形表示有关树状视图

调用序列

的调用语法hjmtreeHJMTree = HJMTree (VolSpec, RateSpec, TimeSpec)

的调用语法类似地bdttreeBDTTree = BDTTree (VolSpec, RateSpec, TimeSpec)

这些函数都需要VolSpecRateSpec,TimeSpec输入参数:

  • VolSpec是指定正向汇率波动过程的结构。您创建VolSpec使用任意一个函数hjmvolspecbdtvolspec

    hjmvolspec函数最多支持三个因金宝app子的规格。它处理利率期限结构波动的这些模型:

    • 常数

    • 静止的

    • 指数

    • Vasicek

    • 成比例的

    单因素模型假设利率期限结构受单一不确定性来源的影响。结合多个因素可以让你在利率结构的形状和位置上指定不同类型的变化。看到hjmvolspec获取详细信息。

    bdtvolspec函数只支持单个波动金宝app因子。波动性在树的节点对之间保持不变。您以十进制值的矢量形式提供输入波动值。看到bdtvolspec获取详细信息。

  • RateSpec是初始利率曲线的利率规范。你用函数创建了这个结构intenvset.(见利率期限结构建模.)

  • TimeSpec是树时间布局规范。用函数创建这个变量hjmtimespecbdttimespec.它表示费率报价的级别时间和级别日期之间的映射。这个结构间接地决定了树中的层数。

指定波动性模型(VolSpec)

因为HJM支持多因素(最金宝app多3个)波动率模型,而BDT(也包括BK和HW)只支持单一波动率模型hjmvolspec而且bdtvolspec函数需要不同的输入,产生的输出也略有不同。有关示例,请参见创建HJM波动率模型.有关BDT示例,请参见创建BDT波动率模型

创建HJM波动率模型

这个函数hjmvolspec生成结构VolSpec,其中规定了波动过程 σ t T 用于创建正向速率树。在这种情况下,资本T表示正向速率的开始时间,和t表示观测时间。波动性过程可以由在创建该过程的函数调用中按顺序指定的因素组合来构造。每个因子规范都以指定因子名称的字符向量开始,然后是相关参数。

HJM波动率规范示例。考虑一个使用单一因子的例子,具体地说,常数-西格玛因子。常量因子规范只需要一个参数,即值 σ .在本例中,该值对应于0.10。

HJMVolSpec = HJMVolSpec (“不变”, 0.10)
HJMVolSpec = FinObj: 'HJMVolSpec' FactorModels: {'Constant'} FactorArgs: {{1x1 cell}} SigmaShift: 0 NumFactors: 1 NumBranch: 2 PBranch: [0.5000 0.5000] Fact2Branch: [-1 1]

NumFactors字段VolSpec结构,VolSpec。NumFactors = 1,揭示了用于生成的因子的数量VolSpec是一个。的FactorModels字段表示是常数因子,和NumBranchesField分支数量。因此,结果树的每个节点都有两个分支,一个向上,另一个向下。

现在考虑一个由比例因子和指数因子构成的双因子波动过程。

指数因子Sigma_0 = 0.1;Lambda = 1;比例因子CurveProp = [0.11765;0.08825;0.06865);CurveTerm = [1;2;3);%构建VolSpecHJMVolSpec = HJMVolSpec (“比例”, CurveProp, CurveTerm,1 e6,“指数”, Sigma_0, Lambda)
HJMVolSpec = FinObj: 'HJMVolSpec' FactorModels: {'Proportional' 'Exponential'} FactorArgs: {{1x3 cell} {1x2 cell}} SigmaShift: 0 NumFactors: 2 NumBranch: 3 PBranch: [0.2500 0.2500 0.5000] Fact2Branch: [2x3 double]

输出显示波动率规范是使用两个因素生成的。树的每个节点有三个分支。从上到下,每个分支的概率分别为0.25、0.25和0.5。

创建BDT波动率模型

这个函数bdtvolspec生成结构VolSpec,其中规定了波动过程。该函数需要三个输入参数:

  • 估价日期ValuationDate

  • 收益率波动结束日期VolDates

  • 收益率波动值VolCurve

可选的第四个参数InterpMethod,指定插值方法,可以包括在内。

用于调用的语法bdtvolspec是:

BDTVolSpec = BDTVolSpec (ValuationDate, VolDates, VolCurve,…InterpMethod)

地点:

  • ValuationDate是树中的第一个观测日期。

  • VolDates表示收益率波动率结束日期的日期向量。

  • VolCurve是收益率波动值的向量。

  • InterpMethod是用插值的方法。默认为线性

BDT挥发率规范示例。考虑下面的例子:

ValuationDate = datetime(2000,1,1);EndDates = [datetime(2001,1,1);datetime(2002年,1,1);Datetime (2003,1,1);datetime(2005年,1,1)];波动率= [.2;.19;只要;.17;16);

使用bdtvolspec创建一个波动性规范。由于没有显式指定插值方法,函数使用线性违约。

BDTVolSpec = BDTVolSpec(估值日期,结束日期,波动率)
BDTVolSpec = FinObj: 'BDTVolSpec' ValuationDate: 730486 VolDates: [5x1 double] VolCurve: [5x1 double] VolInterpMethod: 'linear'

指定利率期限结构(RateSpec)

结构RateSpec是一种利率期限结构,它定义了派生树利率的初始正向利率规范。利率期限结构建模说明如何使用函数创建这些结构intenvset,给出利率,每个利率的开始和结束日期,以及复利值。

速率规格创建示例

考虑下面的例子:

复利= 1;比率= [0.02;0.02;0.02;0.02);开始日期= [' 01 - 1月- 2000' 01 - 1月- 2001' 01 - 1月- 2002' 01 - 1月- 2003];结束日期= [' 01 - 1月- 2001' 01 - 1月- 2002' 01 - 1月- 2003' 01 - 1月- 2004];ValuationDate =' 01 - 1月- 2000;RateSpec = intenvset(“复合”, 1“利率”率,startdate可以的startdate可以,“EndDates”EndDates,“ValuationDate”ValuationDate)
RateSpec = FinObj: 'RateSpec'复合:1光盘:[4x1 double]利率:[4x1 double] EndTimes: [4x1 double] StartTimes: [4x1 double] EndDates: [4x1 double] StartDates: [4x1 double] ValuationDate: 730486基础:0 EndMonthRule: 1

使用函数datedisp检查变量中定义的日期RateSpec.例如:

datedisp (RateSpec.ValuationDate)
01 - 1月- 2000

指定时间结构(TimeSpec

结构TimeSpec指定利率树的时间结构。这个结构定义了树的每个层次上的观测时间与相应日期之间的映射。

TimeSpec是否使用hjmtimespecbdttimespec函数。这些函数需要三个输入参数:

  • 估价日期ValuationDate

  • 到期日成熟

  • 复利率复合

例如,用于调用的语法hjmtimespec

TimeSpec = hjmtimespec(估值日期,成熟度,复合)

地点:

  • ValuationDate是树中的第一个观测日期。

  • 成熟表示树的现金流日期的日期向量。这些期限的任何工具现金流都落在树节点上。

  • 复合年化时复利率的频率。

创建时间规范

使用与创建利率期限结构相同的数据调用时间规范创建函数,RateSpec构建指定树的时间布局的结构。

HJM时间规范示例。考虑下面的例子:

期限=结束日期;HJMTimeSpec = HJMTimeSpec(估值日期,成熟度,复合)
HJMTimeSpec = FinObj: 'HJMTimeSpec'估值日期:730486期限:[4x1 double]复利:1基准:0结束月规则:1

在构建时指定的期限TimeSpec不必与之重合EndDates的速率区间RateSpec.自TimeSpec定义树的时间-日期映射,在RateSpec是插值得到的初始利率,其期限等于年利率TimeSpec

创建BDT时间规格。考虑下面的例子:

期限=结束日期;BDTTimeSpec = BDTTimeSpec(估值日期,期限,复合)
BDTTimeSpec = FinObj: 'BDTTimeSpec'估值日期:730486成熟度:[4x1 double]复利:1基础:0结束月规则:1

创建树

使用VolSpecRateSpec,TimeSpec您之前创建的用于创建HJM和BDT树的函数的输入。

创建HJM树

将波动系数重置为常量HJMVolSpec = HJMVolSpec (“不变”, 0.10);HJMTree = HJMTree (HJMVolSpec, RateSpec, HJMTimeSpec)
HJMTree = FinObj: 'HJMFwdTree' VolSpec: [1x1 struct] TimeSpec: [1x1 struct] RateSpec: [1x1 struct] tObs: [0 1 2 3] TFwd: {[4x1 double][3x1 double][2x1 double][3]} CFlowT: {[4x1 double][3x1 double][2x1 double][4]} FwdTree:{[4x1 double][3x1x2 double][2x2x2 double][1x4x2 double][1x4x2 double]

创建BDT树

现在使用之前计算的值VolSpecRateSpec,TimeSpec作为函数的输入bdttree创建BDT树。

BDTTree = BDTTree (BDTVolSpec, RateSpec, BDTTimeSpec)
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.01 1.02 1.03] [1.01 1.02 1.02 1.02 1.03]}

研究树木

在使用模型时,Financial Instruments Toolbox使用树表示远期利率、价格等。在最高层,这些树有结构包裹着它们。这些结构封装了完整解释树中包含的信息所需的信息。

考虑这个例子,它在mat文件中使用利率和投资组合数据deriv.mat包含在工具箱中。

将数据加载到MATLAB工作区中。

负载deriv.mat

显示从mat文件加载的变量列表。

名称大小字节类属性BDTInstSet 1x1 15956 struct BDTTree 1x1 5138 struct BKInstSet 1x1 15946 struct BKTree 1x1 5904 struct CRRInstSet 1x1 12434 struct CRRTree 1x1 5058 struct EQPInstSet 1x1 12434 struct EQPTree 1x1 5058 struct HJMInstSet 1x1 15948 struct HJMTree 1x1 5838 struct HWInstSet 1x1 15946 struct HWTree 1x1 5904 struct ITTInstSet 1x1 12438 struct ITTTree 1x1 8862 struct ZeroInstSet 1x1 10282 struct ZeroRateSpec 1x1 1580 struct

HJM树形结构

的内容HJMTree结构。

HJMTree
HJMTree = FinObj: 'HJMFwdTree' VolSpec: [1x1 struct] TimeSpec: [1x1 struct] RateSpec: [1x1 struct] tObs: [0 1 2 3] TFwd: {[4x1 double][3x1 double][2x1 double][3]} CFlowT: {[4x1 double][3x1 double][2x1 double][4]} FwdTree:{[4x1 double][3x1x2 double][2x2x2 double][1x4x2 double][1x4x2 double]

FwdTree包含实际的正向速率树。MATLAB将其表示为一个单元格数组,每个单元格数组元素包含一个树级。

其他字段包含与解释中的值相关的其他信息FwdTree.最重要的是VolSpecTimeSpec,RateSpec,分别包含波动率、时间结构和利率结构信息。

第一个节点。观察远期汇率FwdTree.第一个节点表示估值日期,tObs = 0

HJMTree。FwdTree{1}
卖出价= 1.0356 1.0468 1.0523 1.0563

请注意

金融工具工具箱使用逆的折扣表示树中正向速率的符号。逆贴现表示资产的当前价值乘以其未来价值的一个因子。一般来说,这些远期因子是贴现因子的倒数。

仔细看RateSpec用于生成此树的结构,以查看这些值的起源。将值排列在一个数组中。

[HJMTree.RateSpec。开始时间HJMTree.RateSpec.EndTimesHJMTree.RateSpec.Rates]
Ans = 0 1.0000 0.0356 1.0000 2.0000 0.0468 2.0000 3.0000 0.0523 3.0000 4.0000 0.0563

如果你在第三列中找到相应的利率的逆折现,你就得到了树的第一个节点的值。您可以使用该函数将利率转换为反向折扣rate2disc

圆盘= rate2圆盘(hjmtree . timespec . compound,HJMTree.RateSpec。率、HJMTree.RateSpec.EndTimesHJMTree.RateSpec.StartTimes);FRates = 1./光盘
FRates = 1.0356 1.0468 1.0523 1.0563

第二个节点。第二个节点表示一流的观测时间,tObs = 1.这个节点显示两个状态:一个表示向上的分支,另一个表示向下的分支。

请注意,HJMTree.VolSpec.NumBranch = 2

HJMTree。VolSpec
ans = FinObj: 'HJMVolSpec' FactorModels: {'Constant'} FactorArgs: {{1x1 cell}} SigmaShift: 0 NumFactors: 1 NumBranch: 2 PBranch: [0.5000 0.5000] Fact2Branch: [-1 1]

检查向上分支对应的节点的速率。

HJMTree.FwdTree {2} (:,: 1)
卖出价= 1.0364 1.0420 1.0461

现在检查相应的向下分支。

HJMTree.FwdTree {2} (:: 2)
卖出价= 1.0574 1.0631 1.0672

第三个节点。第三个节点表示第二次观测时间,tObs = 2.这个节点总共包含四个状态,两个表示向上的分支,另外两个表示向下的分支。检查节点对应up状态的速率。

HJMTree.FwdTree {3} (:,: 1)
卖出价= 1.0317 1.0526 1.0358 1.0568

接下来检查相应的向下状态。

HJMTree.FwdTree {3} (:: 2)
卖出价= 1.0526 1.0738 1.0568 1.0781

隔离指定节点。从第三层开始,在树单元数组中建立索引变得复杂,并且隔离特定节点可能很困难。这个函数bushpath通过将到达该节点的路径指定为到达该节点的分支向量来隔离特定节点。例如,考虑从根节点开始到达的节点,向上取分支,然后向下取分支,然后向下取另一个分支。假设树每个节点只有两个分支,向上的分支对应于1,向下的分支对应于2。从上到下的路径变成了向量[1 2 2]

FRates =灌木路径(HJMTree。FwdTree, [1 2 2])
FRates = 1.0356 1.0364 1.0526 1.0674

bushpath返回输入参数中指定的路径所选中的所有节点的即期汇率,第一个节点对应根节点,最后一个节点对应目标节点。

使用直接索引隔离相同的节点

HJMTree。FwdTree{4}(:, 3, 2)
Ans = 1.0674

正如预期的那样,这个值对应于返回的速率的最后一个元素bushpath

您可以将这些技术用于“金融工具工具箱”生成的任何类型的树,例如正向利率树或价格树。

BDT树结构

的内容BDTTree结构。

BDTTree
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.10 1.14] [1.10 1.14 1.19] [1.09 1.12 1.16 1.22]}

FwdTree包含实际的速率树。MATLAB将其表示为一个单元格数组,每个单元格数组元素包含一个树级。

其他字段包含与解释中的值相关的其他信息FwdTree.最重要的是VolSpecTimeSpec,RateSpec,分别包含波动率、时间结构和利率结构信息。

看看RateSpec用于生成此树的结构,以查看这些值的起源。将值排列在一个数组中。

[BDTTree.RateSpec。开始时间BDTTree.RateSpec.EndTimesBDTTree.RateSpec.Rates]
Ans = 0 1.0000 0.1000 0 2.0000 0.1100 0 3.0000 0.1200 0 4.0000 0.1250

看看里面的汇率FwdTree.第一个节点表示估值日期,tObs = 0.第二个节点表示tObs = 1.检查第二、第三和第四个节点上的速率。

BDTTree。FwdTree{2}
Ans = 1.0979 1.1432

第二个节点表示第一次观测时间,tObs = 1.该节点总共包含两个状态,一个表示向上(1.0979),另一个代表向下的分支(1.1432).

请注意

本文档约定为显示价格在上面的树枝上。当显示时利率,上支的税率在下降,下支的税率在增加。

BDTTree。FwdTree{3}
Ans = 1.0976 1.1377 1.1942

第三个节点表示第二次观测时间tObs = 2.该节点总共包含三个状态,一个表示向上(1.0976),一个代表中间的分支(1.1377),另一个代表向下的分支(1.1942).

BDTTree。FwdTree{4}
Ans = 1.0872 1.1183 1.1606 1.2179

第四个节点表示第三次观测时间,tObs = 3.该节点总共包含四个状态,其中一个表示向上(1.0872),其中两个代表中间的分支(1.1183而且1.1606),另一个表示向下的分支(1.2179).

隔离指定节点。这个函数treepath通过将到达该节点的路径指定为到达该节点的分支向量来隔离特定节点。例如,考虑从根节点开始到达的节点,向上取分支,然后向下取分支,最后向下取另一个分支。假设树每个节点只有两个分支,向上的分支对应于1,向下的分支对应于2。从上到下的路径变成了向量[1 2 2]

FRates = treepath(bdtretree。FwdTree, [1 2 2])
FRates = 1.1000 1.0979 1.1377 1.1606

treepath返回输入参数中指定的路径所选中的所有节点的短速率,第一个节点对应根节点,最后一个节点对应目标节点。

HW和BK树结构

HW和BK树结构类似于BDT树结构。如果检查文件中包含的示例HW树,就可以看到这一点deriv.mat

负载deriv.mat;HWTree
HWTree = FinObj: 'HWFwdTree' VolSpec: [1x1 struct] TimeSpec: [1x1 struct] RateSpec: [1x1 struct] tObs: [0 1.00 2.00 3.00] dObs: [731947.00 732313.00 732678.00 733043.00] CFlowT: {[4x1 double] [3x1 double] [3x1 double] [2x1 double] [2x1 double] [4.00]} Probs: {[3x1 double] [3x3 double] [3x5 double]}连接:{[2.00 3.00 4.00][1.08 1.04 1.02][1.08 1.07 1.05 1.03 1.01][1.09 1.08 1.06 1.04 1.02]

该结构的所有字段都与BDT对应的字段相似。BDT中还有两个字段没有出现:聚合氯化铝而且连接.的聚合氯化铝字段表示树中每个节点的每个分支上的发生概率。的连接字段描述给定树级别的节点与下一个树级别的节点之间的连通性。

聚合氯化铝字段。虽然BDT和单因素HJM模型在一个节点上的每个分支具有相同的概率,但HW和BK没有。对于HW和BK树,聚合氯化铝Field表示从一个节点移动到下一层的另一个节点时使用特定分支的可能性。

聚合氯化铝字段由一个单元格数组组成,每个树级有一个单元格。每个单元格都是3.——- - - - - -NUMNODES数组,上面一行表示向上移动的概率,中间一行表示中间移动的概率,最后一行表示向下移动的概率。

的前两个元素作为说明聚合氯化铝结构的字段,对应于树的第一级(根)和第二级。

HWTree。聚合氯化铝{1}
0.1666666666666667 0.666666666667 0.166666666667
HWTree。聚合氯化铝{2}
0.12361333418768 0.1666666666666667 0.21877591615172 0.65761074966060 0.66666666666667 0.65761074966060 0.21877591615172 0.16666666666667 0.12361333418768

从上到下读取,其中的值HWTree。聚合氯化铝{1}对应于根节点上,中,下的概率。

HWTree。聚合氯化铝{2}是一个3.——- - - - - -3.值的矩阵。第一列表示顶部节点,第二列表示中间节点,最后一列表示底部节点。与根节点一样,第一行、第二行和第三行保存从每个节点向上、中间和向下分支的值。

正如预期的那样,任何节点上所有概率的和都等于1。

sum (HWTree.Probs {2})
1.0000 1.0000 1.0000

连接领域。区分HW和BK树结构与BDT树结构的另一个领域是连接.该字段描述了给定级别中的每个节点如何连接到下一级别的节点。对这个字段的需求来自于树中可能出现的非标准分支。

连接HW树结构的字段由一个单元数组组成,每个树级有一个单元。

HWTree。连接
Ans = [2] [1x3 double] [1x5 double]

每个单元格包含一个1——- - - - - -NUMNODES向量。向量中的每个值都与相应树级别中的一个节点相关,并表示该节点的中间分支连接到的下一个树级别中的节点的索引。

中包含的值减去1连接,则显示向上分支所连接的下一层节点的索引。如果你加上1对于这些值,您将显示相应向下分支的索引。

举例来说,考虑一下HWTree。连接{1}

HWTree。连接{1}
Ans = 2

这表明根节点的中间分支如预期的那样连接到下一层的第二个(从顶部)节点。如果减去1从这个值可以得到1,它告诉您向上分支到顶部节点。如果你加上1,你得到3.,它指向树的第二层的最后一个节点。

现在考虑这个例子中的第3级:

HWTree。连接{3}
2 2 3 4 4

在这个层次上,存在非标准分支。这很容易识别,因为两个节点的中间分支连接到下一层的同一节点。

为了使其可视化,请考虑下面的树说明。

在这里,在树的第三层,即顶部和底部节点上,显然存在非标准分支。第一个和第二个节点连接到下一层的相同的三个节点。类似的分支发生在树的底部和相邻底部的节点上。

另请参阅

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

相关的例子

更多关于