主要内容

利用Black-Karasinski模型对投资组合进行定价和对冲

该示例说明了如何使用MATLAB®创建利率衍生品证券组合,并使用Black Karasinski利率模型对其进行定价。该示例还显示了一些对冲策略,以最大限度地减少市场波动的风险。

根据报告的数据创建利率期限结构

结构RateSpec是一种利率期限结构,它定义了初始利率规格,从初始利率规格中导出了树形利率。使用下表中的年化零利率信息来填充RateSpec结构。

距离2007年2月27日2008年2月27日0.0493 2月27日2007年2月27日2009年2月27日2007年2月27日2010年2月27日0.0450 2月27日2012年2月27日0.0446 2月27日2014年2月27日0.0445 2月27日2017年2月27日0.0450 27 2月27日2月27日2027 0.0473

可以使用Datafeed工具箱从美联储统计发布页面检索这些数据™. 在本例中,Datafeed工具箱™ 将连接到FRED®并收回以下国库券的利率。

条款符号======= ====== 1 = DGS1 2 = DGS2 3 = DGS3 5 = DGS5 7 = DGS7 10 = DGS10 20 = DGS20

创建连接对象:

c = fred;

创建符号获取列表:

FredNames={...“DGS1”...% 1年“DGS2”...% 2年“DGS3”...% 3年“DGS5”...% 5年“DGS7”...%7年“DGS10”...% 10年“DGS20”};%20年

定义条款:

Terms = [1;...% 1年2;...% 2年3;...% 3年5;...% 5年7;...%7年10;...% 10年20);%20年

设定开始日期到2007年2月27日:

StartDate可以= datenum(2月- 27 - 2007);
fredret = fetch(c,frednames,startdate);

设定估值基于这一点开始日期

valationdate = startdate;
enddates = [];
率= [];

创造终点

对于IDX = 1:长度(FREDRET)
%提取与2007年2月27日相关的利率。随着百分比= [率;... Fredret(IDX).data(1,2)/ 100];
%通过将术语添加到%startdate enddates = [ENDDATES]来确定enddate......回合(Datenum(...年(startdate)+术语(idx,1),...(startdate),...日(startdate)))];
结束

使用的函数intenvset创建RateSpec提供以下数据:

复合= 1;StartDate可以=”2007年- 2月27日;率= (0.0493;0.0459;0.0450;0.0446;0.0446;0.0450;0.0473);EndDates = {”2008年- 2月27日”2009年- 2月27日'27 -feb-2010''27 -feb-2012'...'27 -FEB-2014'“2017年2月27日”‘2027年2月27日’};valationdate = startdate;ratespec = intenvset(“复合”复合,'startdates'StartDate可以,...“EndDates”,结束,“利率”率,“ValuationDate”,估值)
RateSpec =结构体字段:FinObj: 'RateSpec' compound: 1 Disc: [7x1 double] Rates: [7x1 double] EndTimes: [7x1 double] StartTimes: [7x1 double] EndDates: [7x1 double] StartDates: 733100 ValuationDate: 733100 Basis: 0 EndMonthRule: 1

指定波动率模型

创建结构沃尔斯派克它使用以下数据指定波动性过程。

波动率=[0.011892;0.01563;0.02021;0.02125;0.02165;0.02065;0.01803];α=[0.0001];VolSpec=bkvolspec(估值日期,结束日期,波动率,结束日期,α)
VolSpec =结构体字段:FinObj: 'BKVolSpec' ValuationDate: 733100 VolDates: [7x1 double] VolCurve: [7x1 double] AlphaCurve: 1.0000e-04 AlphaDates: 740405 VolInterpMethod: 'linear'

指定树的时间结构

结构TimeSpec指定利率树的时间结构。这个结构定义了树的每一层的观察时间和相应日期之间的映射。

timespec = bktimespec(valuationdate,enddates)
TimeSpec=结构体字段:FinObj: 'BKTimeSpec' ValuationDate: 733100到期日:[7x1 double]复利:-1基础:0 endmonth规则:1

创建BK树

使用前面计算的值RateSpec沃尔斯派克,TimeSpec创建BK树。

BKTree = BKTree (VolSpec, RateSpec, TimeSpec)
BKTree =结构体字段:FINOBJ:'BKFWDTree'volspec:[1x1 struct] timespec:[1x1 struct] ratespec:[1x1 struct] tobs:[0 1 2 3 5 7 10] DOB:[733100 733465 733831 734196 734926 735657 734926 735657 736753] CFlowt:{1x7细胞probs:{1x6小区} Connect:{1x6 Cell} FWDTree:{1x7 Cell}

通过查看输出结构来可视化沿树的利率演变bktree.。这个函数bktree返回一个逆折扣树,您可以使用它转换为利率树cvtree函数。

BKTreeR=cvtree(BKTree)
bktreere =.结构体字段:tObs: [0 1 2 35 7 10] dObs: [733100 733465 733831 734196 735926 735657 736753] CFlowT: {1x7 cell} probes: {1x6 cell} Connect: {1x6 cell} RateTree: {1x7 cell}

看树的上部,中间和下部分支路径。

OldFormat = get (0,“格式”);格式短的%根节点的速率:RateRoot = trintreepath(BKTreeR, 0)
RateRoot = 0.0481
沿着上部分支的%率:RatePathUp = trintreepath(BKTreeR, [1 1 1 1 1])
RatePathUp =7×10.0481 0.0425 0.0446 0.0478 0.0510 0.0555 0.0620
沿中间分支的百分率:RatePathmiddle = TrintreePath(BKTreer,[2 2 2 2 2 2])
RatePathmiddle =7×10.0481 0.0416 0.0423 0.0430 0.0436 0.0449 0.0484
沿下分支的百分比:RaperPathdown = TrintreePath(BKTreer,[3 3 3 3 3 3])
速率下降=7×10.0408 0.0401 0.0388 0.0373 0.0363 0.0378

您还可以显示树的图形表示,以交互方式在树的节点上以交互方式检查到成熟度。这个函数树景者显示左侧窗口中的速率树的结构。右侧窗口中的树可视化是空白的,但通过选择桌子/单击节点,可以检查路径上的速率。

treeview (BKTreeR);

图树查看器包含2个轴和其他类型的uicontrol对象。轴1包含137个类型为line的对象。Axes 2是空的。

创建仪器组合

创建一个投资组合,包括两种债券工具和5%债券的期权。

%两个键耦合率=[0.04;0.05];结算='27 2007年2月';成熟= {‘2009年2月27日’2010年2月27日的};时间= 1;5%债券的%美国期权OptSpec = {“电话”};罢工=98;锻炼日期=2010年2月27日的;AmericanOpt = 1;InstSet = instadd (“债券”,息票率,结算,到期,期限);InstSet = instadd (InstSet,'Optbond',2,optspec,罢工,锻炼,美国经验;%分配名称和控股资产= [10;15; 3);名称= {“4%债券”'5%债券'“选择98”};ettset = instsetfield(Instret,“指数”,1:3,'fieldname', {“数量”},'数据',控股);ettset = instsetfield(Instret,“指数”,1:3,'fieldname', {“名字”},'数据'、名称);

检查变量中包含的一组工具InstSet

instdisp (InstSet)
指数类型CouponRate结算期限为基础EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate可以面对数量名称1键0.04 2009年- 2007年2月27日- 2月27日1 0 1南南南南100 10 4%键2键0.05 2010年- 2007年2月27日- 2月27日1 0 1南南南南100 15 5%债券指数类型UnderInd OptSpec罢工ExerciseDates AmericanOpt数量名称3 OptBond 2 call 98 27-Feb-2010 1 3 Option 98

使用BK模型为投资组合定价

计算投资组合中每个工具的价格。

[价格,ptree] = bkprice(bktree,服装)
价格=3×198.8841 101.3470 3.3470
PTree =结构体字段:FinObj: ' bkprictree ' PTree: {1x8 cell} AITree: {1x8 cell} ExTree: {1x8 cell} tObs: [0 1 2 3 5 7 10 20] Connect: {[2] [2 3 4 4] [2 3 4 4 5 5 6] [2 3 4 5 6 7 8] [1x9 double]} probes: {1x6 cell}

价格在输出向量中价格对应于观察时间零的价格(托布斯0),其被定义为利率树的估值日期。

价格向量,第一个元素98.884代表第一仪器的价格(4%债券);第二个元素101.347代表第二仪器(5%债券)的价格,3.347代表美国通话选项的价格。

您还可以显示价格树的图形表示,以检查树的节点上的价格,直到价格成熟为止。

TreeViewer(Ptree,Attelet);

图树查看器包含2个轴和其他类型的uicontrol对象。axis 1包含155个类型为line的对象。Axes 2是空的。

向现有投资组合添加更多乐器

在现有的投资组合中增加工具:上限、下限、浮动利率票据、香草掉期和可卖出和可赎回债券。

%上限strikec = 0.035;InstSet = instadd (InstSet,“帽子”StrikeC定居,2010年2月27日的);%地板StrikeF=0.05;InstSet=instadd(InstSet,“地板”,罢工,定居,‘2009年2月27日’);%浮动利率票据InstSet = instadd (InstSet,“浮”30岁,‘2009年2月27日’);%香草掉leagrate = [0.04 5];InstSet = instadd (InstSet,“交换”,休闲,定居,2010年2月27日的);%可推动和可调用的债券InstSet = instadd (InstSet,“OptEmBond”CouponRate定居,2010年2月27日的, {“把”“电话”},...罢工,2010年2月27日的'美国经济',1,“时间”1);%进程名称和持股[15;5;8;]7;9;4);名称= {“3.5%上限”“5%楼”“30 bp浮动”'4%/ 5BP交换'“PuttBond”'Callbond'};ettset = instsetfield(Instret,“指数”9,'fieldname', {“数量”},'数据',控股);ettset = instsetfield(Instret,“指数”9,'fieldname', {“名字”},'数据'、名称);

检查变量中包含的一组工具InstSet

instdisp (InstSet)
指数类型CouponRate结算期限为基础EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate可以面对数量名称1键0.04 2009年- 2007年2月27日- 2月27日1 0 1南南南南100 10 4%键2键0.05 2010年- 2007年2月27日- 2月27日1 0 1南南南南100 15 5%债券指数类型UnderInd OptSpec罢工ExerciseDates AmericanOpt数量名3 OptBond 2拨打98 - 2月27日2010年1 98指数期权类型罢工解决成熟度CapReset基础主体数量名4帽0.035 2010年- 2007年2月27日- 2月27日1 0 100 15 3.5%股指数类型罢工解决成熟度FloorReset基础主体数量名5楼0.05 2009年- 2007年2月27日- 2月27日1 0 100 5 5%地板指数类型传播解决成熟FloatReset基础主要EndMonthRule癸酸盐FloorRate数量名称6浮动30 2009年- 2007年2月27日- 2月27日1 0 100 1正负无穷到8 30 bp浮动指数类型LegRate解决成熟度LegReset基础主要LegType EndMonthRule StartDate可以量名称7交换(0.04 - 5)2010年- 2007年2月27日- 2月27日(南)0 100(南)1南7 4% / 5 bp互换指数类型CouponRate解决Maturity OptSpec Strike ExerciseDates Period Basis EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate Face AmericanOpt Quantity Name 8 OptEmBond 0.04 27-Feb-2007 27-Feb-2010 put 98 27-Feb-2007 27-Feb-2010 1 0 1 NaN NaN NaN NaN 100 1 9 PuttBond 9 OptEmBond 0.05 27-Feb-2007 27-Feb-2010 call 98 27-Feb-2007 27-Feb-2010 1 0 1 NaN NaN NaN NaN 100 1 4 CallBond

对冲

对冲背后的理念是将市场波动的风险敞口降至最低。随着基础的变化,组成投资组合的工具的比例可能需要调整,以使敏感性保持在预期的范围内。

使用BK模型计算灵敏度。

[Delta, Gamma, Vega, Price] = bksens(BKTree, InstSet);

获得当前的投资组合。

控股=instget(InstSet,'fieldname'“数量”);

创建一个敏感性矩阵。

灵敏度= [Delta Gamma Vega];

每一行敏感性矩阵与投资组合中的不同工具相关联,每一列都有不同的灵敏度度量。

格式银行DISP([价格控股敏感性])
98.88 10.00 -185.47 528.47 0 101.35 15.00 -277.51 1045.05 0 3.35 3.00 -223.52 11843.32 0 2.77 15.00 250.04 2921.11 -0.00 0.75 5.00 -132.97 11566.69 0 100.56 8.00 -0.80 2.02 0 -1.53 7.00 -272.08 1027.85 0.00 98.60 9.00 -168.92 21712.82 0

上面第一列是每种仪器的美元单价,第二列是每种仪器的合同数量,第三、第四和第五列是美元的delta、gamma和vega敏感性。

当前投资组合的敏感性是投资组合中各种工具的加权平均值。

TargetSens=控股公司“*敏感性
塔吉森=1×3-7249.21 317573.92 -0.00

获得中性敏感性组合使用hedgeslf

假设你想获得一个delta, gamma和vega中性的投资组合。这个函数hedgeslf找到最接近自筹资金的金融工具组合中的重新分配(维持恒定的投资组合价值)。

[SENS,VALUE1,数量] = HEDGESLF(敏感,价格,控股)
Sens =3×1-0.00 -0.00 -0.00
值1=4637.54
数量=9×110.00 5.26 -5.11 7.06 -3.05 12.45 -7.36 8.47 10.37

这个函数hedgeslf返回投资组合的美元敏感性(sens),再平衡投资组合的价值(Value1)以及每个仪器的新分配().如果Value0Value1表示重新平衡之前和之后的投资组合值,您可以通过比较投资组合值来验证成本。

value0 = holdings'*价格
Value0 = 4637.54

在这个例子中,投资组合是完全对冲的(同时delta、gamma和vega中立)和自筹资金的(投资组合的价值在平衡(Value0Value1)都是一样的。

添加约束来对冲投资组合

假设您想要将上下限制放置在投资组合中的个体仪器上。假设您希望将所有乐器的位置绑定到+/- 11合同中。

应用这些约束不允许第五和第八乐器中的当前位置。所有其他仪器目前在较高/下限内。

%指定下限和上限lowbounds = [-11 -11 -11 -11 -11 -11 -11 -11];UpperBounds = [11 11 11 11 11 11 11 11 11 11 11 11];%使用portcons函数构建约束ConSet = portcons (“AssetLims”,下跨度,上行);%将限制应用于投资组合[SENS,VALUE,STACE1] = HEDGESLF(敏感度,价格,控股,[],机箱)
Sens =3×10 0 0.
值= 0
数量1 =9×10 0 0 0 0 0 0 0 0

观察到的hedgeslf功能加强了第五和第八种工具的界限,投资组合继续得到充分的对冲和自我融资。

设置(0,“格式”, OldFormat);

另请参阅

|

相关的例子

更多关于