这个例子说明MATLAB®如何被用来创建的利率衍生证券的投资组合,并利用价格布莱克 - 卡拉辛斯基利率模型。这个例子也显示了一些对冲策略,以尽量减少暴露于市场走势。
结构RateSpec
是定义从该树率导出的初始速率规范的利率期限结构。使用年零分息率的信息下表中填充RateSpec
结构体。
从对2007年2月27日2008年2月27日0.0493 0.0459 2007年2月27日2009年2月27日2007年2月27日2010年2月27日0.0450 0.0446 2007年2月27日2012年2月27日2007年2月27日2014年2月27日0.0445 0.0450 2007年2月27日2017年2月27日2007年2月27日2027年2月27日0.0473
这些数据可以从美联储统计发布页面使用数据传送专线工具箱™进行检索。在这种情况下,数据传送专线工具箱™将连接到FRED®和拉回以下国库券的利率。
术语符号======= ====== 1 = DGS1 2 = DGS2 3 = DGS3 5 = DGS5 7 = DGS7 10 = DGS10 20 = DGS20
创建连接对象:
c =弗雷德;
创建符号获取列表:
FredNames = {...'DGS1';...% 1年'DGS2';...% 2年'DGS3';...%3年'DGS5';...%5年'DGS7';...% 7年'DGS10';...%10年'DGS20'};% 20年
定义条款:
术语= [1;...% 1年2;...% 2年3;...%3年5;...%5年7;...% 7年10;...%10年20];% 20年
设置StartDate可以
到2007年2月27日:
起始日期= datenum( 'FEB-27-2007');
FredRet =获取(c FredNames StartDate可以);
设置ValuationDate
基于StartDate可以
:
ValuationDate = StartDate可以;
EndDates = [];
率= [];
创建EndDates
:
对于idx = 1:长度(FredRet)
%拉与2007年2月27日相关的费率。所有的Fred率都以百分比形式返回%率=[率;…FredRet (idx) . data (1、2) / 100);
%通过在%StartDate结束日期=[结束日期;…轮(datenum (…年(StartDate可以)+ (idx, 1),…月(StartDate可以),……天(StartDate可以))));
结束
使用功能intenvset
创建RateSpec
具有下列数据:
配混= 1;起始日期='27 -Feb-2007';率= [0.0493;0.0459;0.0450;0.0446;0.0446;0.0450;0.0473];EndDates = {'27 -Feb-2008';'27 -Feb-2009';”2010年- 2月27日;”2012年- 2月27日;...”2014年- 2月27日;'27 -Feb-2017';”2027年- 2月27日};ValuationDate = StartDate可以;RateSpec = intenvset (“复利”,复利,startdate可以的, 开始日期,...'EndDates'EndDates,“价格”,价格,'ValuationDate',ValuationDate)
RateSpec =同场的结构:FinObj: 'RateSpec' 配混:1张光盘:[7X1双]价格:[7X1双] EndTimes:[7X1双] StartTimes:[7X1双] EndDates:[7X1双] StartDates:733100 ValuationDate:733100基础:0 EndMonthRule:1
使用以下数据创建指定波动过程的结构VolSpec。
波幅= [0.011892;0.01563;0.02021;0.02125;0.02165;0.02065;0.01803];阿尔法= [0.0001];VolSpec = bkvolspec(ValuationDate,EndDates,挥发性,EndDates(结束),阿尔法)
VolSpec =同场的结构:FinObj: 'BKVolSpec' ValuationDate:733100个VolDates:[7X1双] VolCurve:[7X1双] AlphaCurve:1.0000e-04 AlphaDates:740405 VolInterpMethod: '线性'
结构TIMESPEC
指定的利率树中的时间结构。这个结构定义在树的每个级别的观测时间和相应的日期之间的映射。
TimeSpec = bktimespec(ValuationDate, enddate)
TimeSpec =同场的结构:FinObj: 'BKTimeSpec' ValuationDate:733100成熟度:[7X1双混配:-1基础:0 EndMonthRule:1
对于使用先前计算的值RateSpec
,VolSpec
和TIMESPEC
创建BK树。
BKTree = bktree(VolSpec,RateSpec,TIMESPEC)
BKTree =同场的结构:FinObj: 'BKFwdTree' VolSpec:[1x1的结构] TIMESPEC:[1x1的结构] RateSpec:[1x1的结构] TOBS:[0 1 2 3 5 7 10] DOBS:[733100 733465 733831 734196 734926 735657 736753] CFlowT:{1X7细胞} Probs:{1X6细胞}连接:{1X6细胞} FwdTree:{1X7细胞}
观察利率树。
通过观察输出结构,可视化利率沿着树的演化BKTree
。功能bktree
返回一个反折现树,您可以将其转换为一个利率树cvtree
功能。
BKTreeR = cvtree(BKTree)
BKTreeR =同场的结构:FinObj: 'BKRateTree' VolSpec:[1x1的结构] TIMESPEC:[1x1的结构] RateSpec:[1x1的结构] TOBS:[0 1 2 3 5 7 10] DOBS:[733100 733465 733831 734196 734926 735657 736753] CFlowT:{1X7细胞} Probs:{1X6细胞}连接:{1X6细胞} RateTree:{1X7细胞}
看树的上、中、下分枝路径:
OldFormat = GET(0,'格式');格式短在根节点%价格:RateRoot = trintreepath(BKTreeR,0)
RateRoot = 0.0481
沿上支的百分率:RatePathUp = trintreepath(BKTreeR,[1 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
沿下叉%价格:RatePathDown = trintreepath(BKTreeR, [3 3 3 3 3 3])
RatePathDown =7×10.0481 0.0408 0.0401 0.0388 0.0373 0.0363 0.0378
您还可以显示树的图形表示,以交互式地检查树节点上的速率,直到树成熟。功能树状视图
显示速度树的左侧窗口中的结构。树可视化在右边的窗口是空白的,而是由节点上选择表/图并点击您可以检查沿路径的速度。
TreeViewer中(BKTreeR);
创建由两个键工具组合和5%键上的一个选项。
%两个债券CouponRate = [0.04 0.05];定居=2007年2月27日的;成熟= {2009年2月27日的;2010' '27月};周期= 1;5%的债券在%美式期权OptSpec = {'呼叫'};击= 98;ExerciseDates =2010' '27月;AmericanOpt = 1;InstSet = instadd(“债券”,CouponRate,沉降,成熟度,周期);InstSet = instadd(InstSet,“OptBond”, 2, OptSpec, Strike, ExerciseDates, AmericanOpt);分配名称和财产控股= [10;15; 3];名称= {“4%的债券”;“5%的债券”;“选项98”};InstSet = instsetfield (InstSet,'指数'1:3,的字段名{'数量'},“数据”、控股);InstSet = instsetfield (InstSet,'指数'1:3,的字段名{'名称'},“数据”,名称);
检查组包含的变量仪器InstSet
。
instdisp(InstSet)
索引类型CouponRate Settle的成熟期基础EndMonthRule IssueDate FirstCouponDate LastCouponDate的StartDate面部数量名称1债券0.04 27-FEB-2007 27-FEB-2009 1 0 1楠楠楠楠100 10 4%债券2邦德0.05 27-FEB-2007 27-FEB-2010 1 0 1楠楠楠楠100 15 5%的债券指数类型UnderInd OptSpec击ExerciseDates AmericanOpt量名称3 OptBond 2呼叫98 27-FEB-2010 1 3选项98
计算投资组合每件乐器的价格。
[Price, PTree] = bkprice(BKTree, InstSet)
价格=3×198.8841 101.3470 3.3470
ptree中=同场的结构:FinObj: 'BKPriceTree' PTree: {1x8 cell} AITree: {1x8 cell} ExTree: {1x8 cell} tObs: [0 1 2 3 5 7 10 20] Connect: {1x6 cell} Probs: {1x6 cell}
在输出向量价格价钱
对应于观测时刻0的价格(则
=0
),定义为利率树的估值日。
在里面价钱
矢量,第一个元素,98。884,表示第一个工具(4%债券)的价格;第二个元素101.347表示第二种工具(5%债券)的价格,3.347表示美国看涨期权的价格。
您还可以显示价格树的图形表示检查树的节点上的价格,直到成熟。
treeview (PTree InstSet);
添加工具到现有的投资组合:帽,地板,浮息票据,香草交换和可回售和赎回债券。
%的帽子StrikeC = 0.035;InstSet = instadd(InstSet,'帽',StrikeC,定居,2010' '27月);%楼StrikeF = 0.05;InstSet = instadd(InstSet,'地板'StrikeF定居,2009年2月27日的);%浮息票据InstSet = instadd(InstSet,'浮动'30,定居,2009年2月27日的);%香草交换LegRate = (0.04 - 5);InstSet = instadd(InstSet,'交换'LegRate定居,2010' '27月);%可存入和可赎回债券InstSet = instadd(InstSet,'OptEmBond',CouponRate,定居,2010' '27月{'放';'呼叫'},...罢工,2010' '27月,“AmericanOpt”,1'期',1);%进程名称和控股控股= [15; 5; 8;7;9;4];名称= {'3.5%的上限';'5%的地板';“30BP浮动”;“4% / 5 bp交换”;'PuttBond';“CallBond”};InstSet = instsetfield (InstSet,'指数',4:9,的字段名{'数量'},“数据”、控股);InstSet = instsetfield (InstSet,'指数',4:9,的字段名{'名称'},“数据”,名称);
检查组包含的变量仪器InstSet
。
instdisp(InstSet)
索引类型CouponRate Settle的成熟期基础EndMonthRule IssueDate FirstCouponDate LastCouponDate的StartDate面部数量名称1债券0.04 27-FEB-2007 27-FEB-2009 1 0 1楠楠楠楠100 10 4%债券2邦德0.05 27-FEB-2007 27-FEB-2010 1 0 1楠楠楠楠100 15 5%的债券指数类型UnderInd OptSpec击ExerciseDates AmericanOpt量名称3 OptBond 2呼叫98 27-FEB-2010 1 3选项98Index Type Strike Settle Maturity CapReset Basis Principal Quantity Name 4 Cap 0.035 27-Feb-2007 27-Feb-2010 1 0 100 15 3.5% Cap Index Type Strike Settle Maturity FloorReset Basis Principal Quantity Name 5 Floor 0.05 27-Feb-2007 27-Feb-2009 1 0 100 5 5% Floor Index Type Spread Settle Maturity FloatReset Basis Principal EndMonthRule CapRate FloorRate Quantity Name 6 Float 30 27-Feb-2007 27-Feb-2009 1 0 100 1 Inf -Inf 8 30BP Float Index Type LegRate Settle Maturity LegReset Basis Principal LegType EndMonthRule StartDate Quantity Name 7 Swap [0.04 5] 27-Feb-2007 27-Feb-2010 [NaN] 0 100 [NaN] 1 NaN 7 4%/5BP Swap Index Type CouponRate Settle 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模型。
[δ,γ,维加,价钱] = bksens(BKTree,InstSet);
获取当前组合持股。
资产= instget (InstSet,的字段名,'数量');
创建敏感性矩阵。
灵敏度=Δ伽玛维加];
灵敏度矩阵的每一行与在所述组合中的一个不同的仪器,并用不同的灵敏度测量每一列相关联。
显示的信息。
格式银行disp([价格持有敏感性])
98.88 10.00 -185.47 528.47 101.35 0 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.75 -0.00 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 98.00 04.00 -53.99 -10798.27 0
上述第一列是每个仪器的美元单价,第2栏是每个仪器的合同数目,而第三,第四和第五列是美元δ,γ,和维加敏感性。
目前的投资组合灵敏度在组合仪表的加权平均值。
TargetSens =控股公司的*敏感性
TargetSens =1×3-7249.21 317573.92 -0.00
假设你想获得一个三角洲,伽玛和Vega中性的投资组合。功能hedgeslf
在最接近自筹资金的金融工具投资组合中(保持不变的投资组合价值)进行重新分配。
[Sens, Value1, Quantity]= hedgeslf(敏感度,价格,持有量)
桑斯=3×1-0.00 -0.00 -0.00
Value1 = 4637.54
数量=9×110.00 5.26 -5.11 7.06 -3.05 12.45 -7.36 8.47 10.37
功能hedgeslf
返回组合美元灵敏度(Sens
),则重新平衡的组合的价值(值1
)及每种文书的新分配额(数量
)。如果Value0
和值1
代表了投资组合的价值之前和之后的再平衡,可以通过比较投资组合值验证的成本。
Value0 =控股的*价格
Value0 = 4637.54
在这个例子中,该组合是完全对冲(同时δ,γ,和维加中性)和自筹资金(组合的前和后平衡(该值Value0
和值1
) 是相同的。
假设你想对投资组合中的单个工具设定上下界。假设你想在+/- 11合约中绑定所有工具的头寸。
应用这些约束将不允许第五和第八种工具的当前位置。所有其他工具目前都在上/下界。
%指定下限和上限LowerBounds = [-11 -11 -11 -11 -11 -11 -11 -11 -11]。UpperBounds = [11 11 11 11 11 11 11 11 11];%使用功能portcons建立约束ConSet = portcons('AssetLims'下界,UpperBounds);%将约束应用于投资组合[Sens, Value, Quantity1] = hedgeslf(敏感性,价格,持有,[],设置)
桑斯=3×10 0 0
价值= 0
Quantity1 =9×10 0 0 0 0 0 0 0 0 0 0 0 0
观察该hedgeslf
功能强制在第五和第八仪器界限,组合继续被完全对冲和自筹资金。
组(0,'格式',OldFormat);