定价和套期保值策略投资组合使用布莱克 - 卡拉辛斯基型号

这个例子说明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

创建BK树

对于使用先前计算的值RateSpecVolSpecTIMESPEC创建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

价格组合使用BK型号

计算投资组合每件乐器的价格。

[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);