主要内容

使用Black-Karasinski模型对投资组合进行定价和套期保值

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

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

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

自2007年2月27日至2008年2月27日0.0493 2007年2月27日至2009年2月27日0.0459 2007年2月27日至2010年2月27日0.0450 2007年2月27日至2012年2月27日0.0446 2007年2月27日至2014年2月27日0.0445 2007年2月27日至2017年2月27日0.0450 2007年2月27日至2027年2月0.0473

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

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

创建连接对象:

c=弗雷德;

创建符号获取列表:

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

定义术语:

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

设定起始日期至2007年2月27日:

StartDate=datenum(2007年2月27日);
FredRet=fetch(c,FredNames,StartDate);

设定估价日期基于起始日期:

估价日期=起始日期;
结束日期=[];
费率=[];

创建结束日期:

对于idx=1:长度(FredRet)
%拉取与2007年2月27日相关的利率。所有的Fred比率都以百分比比率=[Rates;…FredRet(idx).Data(1,2)/100];
%通过将期限添加到%StartDate EndDates=[EndDates;…round(datenum(…year(StartDate)+期限(idx,1),…month(StartDate),…day(StartDate)))的年份来确定结束日期;
终止

使用的函数意图集创建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日“2010年2月27日”“2012年2月27日”...“2014年2月27日”“2017年2月27日”‘2027年2月27日’};估价日期=起始日期;费率规范=意向集(“复合”,复配,“开始日期”,起始日期,...“EndDates”,结束日期,“利率”率,“估价日期”,估价日期)
等级规范=结构体字段:FinObj:“费率规格”复利:1盘:[7x1双精度]费率:[7x1双精度]结束时间:[7x1双精度]开始时间:[7x1双精度]结束日期:[7x1双精度]开始日期:733100估价日期:733100基准:0结束月规则:1

指定波动率模型

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

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

指定树的时间结构

结构TimeSpec指定利率树的时间结构。此结构定义树的每个级别的观察时间与相应日期之间的映射。

TimeSpec=BKTTimeSpec(估价日期、结束日期)
TimeSpec=结构体字段:FinObj:'BKTimeSpec'估值日期:733100到期日:[7x1双]复利:-1基准:0月底规则:1

创建BK树

将以前计算的值用于RateSpec,沃尔斯派克,TimeSpec创建BK树。

BKTree = BKTree (VolSpec, RateSpec, TimeSpec)
BKTree=结构体字段:FinObj:'BKFwdTree'VolSpec:[1x1结构]TimeSpec:[1x1结构]RateSpec:[1x1结构]tObs:[01235710]dObs:[7331007334653733831734196734926735657736753]CFlowT:{1x7单元}Probs:{1x6单元}连接:{[2][234][23456 23456 23456 23456 23456 23456 23456][23456 2.]FwdTree:{1x7单元}

通过查看输出结构,将利率沿树的演变可视化BKTree.功能bktree返回一个反向贴现树,您可以使用cvtree作用

BKTreeR=cvtree(BKTree)
BKTreeR=结构体字段:FinObj:'BKRateTree'VolSpec:[1x1结构]TimeSpec:[1x1结构]RateSpec:[1x1结构]tObs:[01235710]dObs:[733100733465733831734196734926735657736753]CFlowT:{1x7单元}Probs:{1x6单元}连接:{[2][234][23456 23456 23456 23456 23456 23456 23456 7][2……}速率树:{1x7单元}

查看树的上、中、下分支路径。

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])
速率路径中间=7×10.0481 0.0416 0.0423 0.0430 0.0436 0.0449 0.0484
%沿下支路的费率:RatePathDown=trintreepath(BKTreeR[3])
速率下降=7×10.0408 0.0401 0.0388 0.0373 0.0363 0.0378

您还可以显示树的图形表示,以交互方式检查树节点上的速率,直到成熟树人在左侧窗口中显示费率树的结构。右侧窗口中的树可视化为空,但通过选择桌子/单击节点,可以检查路径上的速率。

treeview (BKTreeR);

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

创建一个工具组合

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

%两个债券耦合率=[0.04;0.05];结算=‘2007年2月27日’; 到期日={‘2009年2月27日’‘2010年2月27日’}; 周期=1;5%债券的%美国期权OptSpec = {“电话”};罢工=98;锻炼日期=‘2010年2月27日’;AmericanOpt = 1;InstSet = instadd (“债券”,息票率,结算,到期,期限);InstSet = instadd (InstSet,“OptBond”,2,OptSpec,罢工,锻炼日期,AmericanOpt);%指定名称和财产资产= [10;15; 3);名称= {“4%债券”“5%债券”“选项98”}; InstSet=instsetfield(InstSet,“指数”,1:3,“字段名”, {“数量”},“数据”,控股公司);InstSet=instsetfield(InstSet,“指数”,1:3,“字段名”, {“姓名”},“数据”,姓名);

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

instdisp (InstSet)
指数型偶合利率结算到期日基准月底发行的第一偶合债券最后偶合债券开始日期票面数量名称1债券0.04 2007年2月27日2009年2月10日1南南100 10 4%债券2债券0.05 2007年2月27日2010年2月1 0南南100 15 5%债券指数型IND OptSpec罢工日期美国债券数量名称3 OptBond 2呼叫98 2010年2月27日1 3选项98

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

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

[Price,PTree]=bkprice(BKTree,InstSet)
价格=3×198.8841 101.3470 3.3470
树=结构体字段:FinObj:'BKPriceTree'PTree:{1x8 cell}AITree:{1x8 cell}ExTree:{1x8 cell}tObs:[0123571020]Connect:{[2][2334][23456][23456][23456][23456 8][23223}Probs:{1x6 cell}

输出向量中的价格价格与观测时间零点的价格相对应(托布斯=0),定义为利率树的估值日期。

价格向量,第一个元素98.884,代表第一种工具(4%债券)的价格;第二个元素101.347,代表第二种工具(5%债券)的价格,3.347代表美式看涨期权的价格。

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

treeviewer(树、仪表组);

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

向现有投资组合中添加更多工具

在现有投资组合中添加工具:上限、下限、浮动利率票据、普通掉期以及可出售和可赎回债券。

%帽StrikeC=0.035;InstSet=instadd(InstSet,“帽子”,罢工,解决,‘2010年2月27日’);%地板STRICKEF=0.05;InstSet=instadd(InstSet,“地板”,罢工,解决,‘2009年2月27日’);%浮动利率票据InstSet = instadd (InstSet,“浮动”30岁,‘2009年2月27日’);%香草交换LegRate=[0.04 5];InstSet=instadd(InstSet,“交换”,LegRate,结算,‘2010年2月27日’);%可赎回债券和可赎回债券InstSet = instadd (InstSet,“OptEmBond”CouponRate定居,‘2010年2月27日’, {“把”“电话”},...罢工,‘2010年2月27日’,“AmericanOpt”1.“时间”1);%处理名称和持有量持股=[15;5;8;7;9;4];姓名={“3.5%上限”“5%楼”“30个基点浮动”“4%/5便士掉期”“PuttBond”“赎回债券”}; InstSet=instsetfield(InstSet,“指数”,4:9,“字段名”, {“数量”},“数据”,控股公司);InstSet=instsetfield(InstSet,“指数”,4:9,“字段名”, {“姓名”},“数据”,姓名);

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

instdisp (InstSet)
指数型偶合利率结算到期日基准月底发行的第一偶合债券最后偶合债券开始日期票面数量名称1债券0.04 2007年2月27日2009年2月10日1南南100 10 4%债券2债券0.05 2007年2月27日2010年2月1 0南南100 15 5%债券指数型IND OptSpec罢工日期美国债券数量名称3 OptBond 2呼叫98 2010年2月27日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模型计算灵敏度。

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

获取当前的投资组合持有量。

控股=instget(InstSet,“字段名”,“数量”);

创建敏感度矩阵。

灵敏度= [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-0.0725 3.1757 -0.0000

使用以下方法获得中性敏感度投资组合:hedgeslf

假设你想得到一个delta,gamma和vega中性的投资组合hedgeslf查找最接近自我融资的金融工具组合中的重新分配(保持不变的组合价值)。

[敏感度、价值1、数量]=套期保值SLF(敏感度、价格、持有量)
Sens =3×10.0091 -0.5821 -0.4055
值1=4637.54
数量=9×110.0000 5.2592 -5.1130 7.0585 -3.0469 12.4539 -7.3590 8.4718 10.3731

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

价值0=持有量“*价格
值0=4637.54

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

添加约束以对冲投资组合

假设你想对投资组合中的单个工具设置上下限,假设你想将所有工具的头寸限制在+/-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 (“资产负债表”,下限,上限);%将约束应用于投资组合[敏感度、价值、数量1]=套期保值SLF(敏感度、价格、持有量、[],成本)
Sens =3×10 0 0
值=0
数量1=9×10 0 0 0 0 0 0 0 0

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

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

另见

|

相关实例

更多关于