主要内容

hedgeslf

自筹经费对冲

描述

实例

[波特森斯,PortValue,PortHolds) = hedgeslf (敏感性,价格,CurrentHolds)在一系列工具之间分配自筹资金的对冲。hedgeslf查找金融工具组合中的重新分配,这些金融工具针对市场波动对投资组合进行套期保值,并且最接近于自筹资金(保持不变的投资组合价值)。默认情况下,输入的第一个工具与其他工具进行套期保值。

hedgeslf试图找到最接近自我融资的投资组合配置,同时将敏感性降至零。如果找不到解决方案,hedgeslf找到最小化敏感性的分配。如果最终的投资组合是自筹资金的,PortValue等于原始投资组合的价值。

实例

[波特森斯,PortValue,PortHolds) = hedgeslf (___,FixedInd,ConSet)添加额外的可选参数。

例子

全部折叠

这个例子说明了MATLAB®如何用于创建利率衍生证券投资组合,并使用Black-Karasinski利率模型为其定价。该例子还显示了一些对冲策略,以尽量减少对市场波动的敞口。

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

结构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

可以使用dataffeed工具箱™从美联储统计发布页面检索该数据。在这种情况下,Datafeed工具箱™将连接到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年

定义术语:

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

设置StartDate可以至2007年2月27日:

StartDate=datenum(2007年2月27日);
FredRet =获取(c FredNames StartDate可以);

设置ValuationDate基于StartDate可以:

ValuationDate = StartDate可以;
EndDates = [];
费率=[];

创建EndDates:

for idx = 1:length(FredRet)
%调出与2007年2月27日相关的利率。所有的弗雷德利率返回%的百分比利率=[利率;...FredRet (idx) . data(1、2)/ 100);
%通过将Term添加到%StartDate的年份来确定EndDates...轮(datenum(…年(StartDate可以)+ (idx, 1),…月(StartDate可以),……天(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日};ValuationDate = StartDate可以;RateSpec = intenvset (“复合”,复配,startdate可以的StartDate可以,...“EndDates”EndDates,“利率”率,“ValuationDate”ValuationDate)
等级规范=结构体字段: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

指定波动率模型

创建结构VolSpec它使用以下数据指定波动性过程。

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

指定树的时间结构

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

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

创建BK树

将以前计算的值用于RateSpec,VolSpec,TimeSpec创建BK树。

BKTree = BKTree (VolSpec, RateSpec, TimeSpec)
BKTree=结构体字段:FinObj: 'BKFwdTree' VolSpec: [1x1 struct] TimeSpec: [1x1 struct] RateSpec: [1x1 struct] tObs: [0 1 2 35 7 10] dObs: [733100 733465 733831 734196 735926 735657 736753] CFlowT: {1x7 cell} probes: {1x6 cell} Connect: {1x6 cell} FwdTree: {1x7 cell}

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

BKTreeR = cvtree (BKTree)
BKTreeR =结构体字段: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])日志含义
RatePathMiddle =7×10.0481 0.0416 0.0423 0.0430 0.0436 0.0449 0.0484
%沿下支路的费率:RatePathDown = trintreepath(BKTreeR,[3 3 3 3 3])日志含义
RatePathDown =7×10.0408 0.0401 0.0388 0.0373 0.0363 0.0378

您还可以显示树的图形表示,以交互方式检查树中节点的速率,直到成熟为止。这个函数树状视图在左侧窗口中显示速率树的结构。右边窗口中的树显示是空白的,但是通过选择表格/点击节点,你可以沿着路径检查速率。

treeview (BKTreeR);

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

创建一个工具组合

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

%两个债券CouponRate = [0.04, 0.05];解决=2007年2月27日的;成熟= {2009年2月27日的‘2010年2月27日’}; 周期=1;5%债券的%美国期权OptSpec = {“电话”};罢工= 98;ExerciseDates =‘2010年2月27日’;AmericanOpt = 1;InstSet = instadd (“债券”,息票率,结算,到期,期限);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)
指数型偶合利率结算到期日基准月底发行的第一偶合债券最后偶合债券开始日期票面数量名称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
PTree =结构体字段:FinObj:'BKPriceTree'PTree:{1x8 cell}AITree:{1x8 cell}ExTree:{1x8 cell}tObs:[0123571020]Connect:{[2][2334][23456][23456][23456][1x9 double]}Probs:{1x6 cell}

输出向量中的价格价格对应于观测时刻0的价格(=0),它被定义为利率树的估值日期。

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

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

treeview (PTree InstSet);

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

在现有的投资组合中增加更多的投资工具

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

%的帽子StrikeC = 0.035;InstSet = instadd (InstSet,“帽子”,罢工,解决,‘2010年2月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年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 bp交换”“PuttBond”“CallBond”};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 =持股' *敏感性
TargetSens =1×3-7249.21 317573.92 -0.00

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

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

[Sens, Value1, Quantity]= hedge(敏感度,价格,持股)
Sens =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),重新平衡的投资组合的价值(Value1)及每项文书的新编配(数量).如果价值0Value1表示重新平衡之前和之后的投资组合值,您可以通过比较投资组合值来验证成本。

Value0 =持股量*价格
值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 (“资产负债表”下界,UpperBounds);%对投资组合应用约束条件[Sens, Value, Quantity1] = hedgeslf(sensitivity, Price, Holdings, [], ConSet)
Sens =3×10 0 0
值=0
Quantity1 =9×10 0 0 0 0 0 0 0

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

集(0,“格式”, OldFormat);

输入参数

全部折叠

每个仪器的灵敏度,指定为若干个仪器(NINST),以敏感性数目(恩森)美元敏感性矩阵。每一行代表一个不同的工具。每一列代表不同的灵敏度。

数据类型:

仪器价格,指定为NINST——- - - - - -1.向量。

数据类型:

分配给每个票据的合同,指定为NINST——- - - - - -1.向量。

数据类型:

(可选)固定仪表的数量,指定为NFIXED——- - - - - -1.仪器的指数矢量保持不变。例如,保持10种工具组合中的第一和第三种工具不变,设置FixedId=[13].默认值是FixedInd=1.;第一种工具的持有是固定的。如果没有固定的乐器,请进入FixedInd=[ ]

数据类型:

(可选)投资组合重新分配的附加条件,指定为若干约束条件(NCONS),以文书数目(NINST)投资组合再分配附加条件矩阵。一个合格的NINST——- - - - - -1.合同持股矢量,PortWts,满足所有不等式A * PortWts < =,在那里A=ConSet(:,1:end-1)b = ConSet(:,结束)

笔记

约束PortHolds (FixedInd) = CurrentHolds (FixedInd)附加到传入的任何约束ConSet通过FixedInd=[ ]通过指定所有约束的步骤ConSet.生成的默认约束港口公司是不合适的,因为它们要求所有资产的总和为正且等于1.

数据类型:

输出参数

全部折叠

投资组合中美元的敏感性,回吐为若干点恩森——- - - - - -1.向量。当存在完美对冲时,波特森斯为零。否则,将选择可能的最佳对冲。

投资组合的总价值,以标量值返回。当一个完全自我融资的对冲存在时,PortValue等于这个值吗点(价格、CurrentHolds)最初的投资组合。

分配给每种工具的合同,作为NINST——- - - - - -1.向量。这是重新配置的投资组合。

之前介绍过的R2006a