主要内容

使用仿真的利率模型的价格临时

介绍

此示例显示如何使用金融仪器工具箱™中使用兴趣模型进行欧洲休眠。具体而言,船体 - 白色一个因子模型,线性高斯双因子模型和Libor市场模型被校准到市场数据,然后使用Monte Carlo仿真生成兴趣路径。

以下部分设置了与示例一起使用的数据<一种href="//www.tatmou.com/help/fininst/price-bermudan-swaptions-with-different-interest-rate-models.html" class="intrnllnk">使用Hull-White单因子模型模拟兴趣率路径那<一种href="//www.tatmou.com/help/fininst/price-bermudan-swaptions-with-different-interest-rate-models.html" class="intrnllnk">使用线性高斯双因子模型模拟兴趣率路径,<一种href="//www.tatmou.com/help/fininst/price-bermudan-swaptions-with-different-interest-rate-models.html" class="intrnllnk">使用Libor市场模型模拟利率路径:

构造零曲线

此示例显示了如何使用ZeroRates对于硬编码的零曲线。您还可以通过从市场数据引导零曲线(例如,存款,期货/转发和掉掉)来创建零曲线

0曲线的硬编码数据定义为:

settr = datenum('21-jul-2008');%零曲线曲面=天空(沉淀,360 *([1 3 5 7 10 20]),1);Zerorates = [1.9 2.6 3.1 3.5 4 4.3]'/ 100;绘图(曲面,零)DateTick标题([“零曲线”datestr(settr)]);

图包含轴。具有标题零曲线的轴为21-jul-2008包含了类型线的对象。

构建A.orcurve.对象。

IRDC = Irdatacurve(“零”,解决,曲象,毒物);

创造RateSpec

ratespec = intenvset(“利率”,毒品,“EndDates”CurveDates,'开始日期',定居)
ratespec =结构体字段:FINOBJ:'Ratespec'复合:2个光盘:[6x1双]速率:[6x1双]终端:[6x1双]启动时间:[6x1双] ENDDATES:[6X1 DOUBLE] Startdates:733610估值:733610基础:0 endmonthule:1

掉期期权参数定义

虽然蒙特卡罗模拟通常用于重视更复杂的衍生物(例如,百慕大仪器),但在这个例子中,欧洲仪式的价格计算在五年的运动日期和五年的潜在交换。

InstrumentExerciseDate = datenum ('21-jul-2013');InstrumentMaturity = datenum ('21-jul-2018');internerStrike = .045;

计算Black模型和掉期波动矩阵

Black的模型通常用于价格和引用欧洲运动的利率选项,即盖子,地板和临时。在临时的情况下,鉴于当前观察到的市场价格,黑色的模型用于暗示波动性。以下矩阵显示了一系列仪式锻炼日期(列)和底层交换时间(行)的黑色隐含波动率。

swaptionblackvol = [22 21 19 13 15 13 12 21 19 14121111111413121111111111111111 111110 9] / 100;锻炼= [1:5 7 10];高等工具= [1:5 7 10];eurexdatesfull = repmat(stayaadd(stand,锻炼* 360,1)',......长度(男高音),1);Eurmatfull = Rehape(天塔(Eurexdatesfull),......repmat(360 *男高音,1,长度(ExerciseDates)), 1),大小(EurExDatesFull));

选择校准仪器

对模型进行标定的仪器的选择是标定的任务之一。对于百慕大掉期,典型的定价方法是参照与百慕大掉期共同末端的欧洲掉期。在这种情况下,所有标的期限在待定价的掉期(2018年7月21日)到期之前到期的掉期都被用于校准。

%找到了到期日期之前或之前过期的睡眠%样本互换期权Relidx = find(eurmatfull <= instrumentmaturity);

使用Black的型号计算练习价格

这个例子展示了如何使用布莱克模型计算掉期价格。然后使用掉期价格来比较从校准过程中获得的模型预测值。

使用Black模型计算掉期价格:

swaptionblackprices = zeros(尺寸(swaptionblackvol));swaptionstrike = zeros(尺寸(swaptionblackvol));为了IsWaption = 1:长度(锻炼)为了itEnor = 1:长度(男高音)[〜,swaptionstrike(Itenor,Iswaption)] = swapbyzero(ratespec,[nan 0],sold,eurmatfull(Itenor,Iswaption),......'开始日期',eurexdatesfull(Itenor,Iswaption),'legreeset'[1]);SwaptionBlackPrices (iTenor iSwaption) = swaptionbyblk (RateSpec,“电话”,Swaptionstrike(Itenor,Iswaption),解决,......Eurexdatesfull(Itenor,Iswaption),Eurmatfull(Itenor,Iswaption),SwaptionBlackvol(Itenor,Iswaption));结束结束

定义模拟参数

此示例显示了如何使用simtermstructs.方法Hullwhite1f.LinearGaussian2F,libormarketmodel.对象。

展示使用的simtermstructs.方法Hullwhite1f.LinearGaussian2F,libormarketmodel.对象,使用以下仿真参数:

nperiods = 5;deltatime = 1;ntrials = 1000;tenor =(1:10)';simdates = daysadd(定居,360 * deltatime *(0:nperiods),1)simtimes = diff(verfrac(simdates(1),simdates))%为1年期间和一个均匀间隔的男高音,练习行将是%在第5行,互换期限在第5列exRow = 5;endCol = 5;
SIMDATES = 733610 733975 734340 734705 734705 734705 734705 734705 73475 735071 735436 SIMTIMES = 1.0000 1.0000 1.0000 1.0027 1.0000

使用Hull-White单因子模型模拟兴趣率路径

此示例显示了如何使用Hull White单因子模型模拟兴趣率路径。在开始使用a的例子之前Hullwhite1f.模型,请确保您已经设置了如下所述的数据:

Hull-White单因素模型描述了短期汇率的演变,并使用零曲线指定,α,Sigma.等式的参数

D. R. = [ θ. T. - 一种 T. R. ] D. T. + σ. T. D. W.

在哪里:

博士短期利率在一个小区间内的变化,DT.。

R.是短期利率。

θ(t)是时间的函数决定了哪个方向的平均R.移动,选择这样的运动R.与今天的零优惠券屈服曲线一致。

α.是平均逆转率。

DT.是一个小的变化。

σ.是年度标准差的短率。

W.是布朗运动。

使用该功能进行校准船体模型swaptionbyhw.,构造了一个三叉树来为互换定价。校准包括最小化观察到的市场价格之间的差异(上面使用Black的隐含掉期波动矩阵计算,见<一种href="//www.tatmou.com/help/fininst/price-bermudan-swaptions-with-different-interest-rate-models.html" class="intrnllnk">计算Black模型和掉期波动矩阵)和该模型的预测价格。

在本例中,优化工具箱™函数lsqnonlin.用于找到最小化观察值和预测值之间的差异的参数集。然而,其他方法(例如,模拟退火)可能是合适的。的起始参数和约束α.和σ.设置在变量中X0.,UB.;这些也可以根据特定的校准方法而变化。

校正一组参数,使观测值和预测值之间的差异最小化swaptionbyhw.lsqnonlin.

timespec = hwtimespec(standaadd(standadd(stand,360 *(1:11),1),2);hw1fobjfun = @(x)swaptionblackprices(Relidx) -......SwaptionByHW(HWTree(HWVOLSPEC(SETRING,' 11 - 8月- 2015 ',x(2),' 11 - 8月- 2015 ',x(1)),ratespec,timespec),“电话”,swaptionstrike(Relidx),......Eurexdatesfull(Relidx),0,EurexDatesfull(Relidx),Eurematfull(Relidx));选项= OptimSet('DISP''iter'“MaxFunEvals”,1000,'tolfun',1E-5);%找出使观测值和观测值之间的差异最小的参数%预测价格x0 = [.1 .01];lb = [0 0];UB = [1 1];HW1FPARAMS = LSQNONLIN(HW1FOBJFUN,X0,LB,UB,选项);hw_alpha = hw1fparams(1)HW_SIGMA = HW1FPARAMS(2)
一阶迭代范数函数-count f(x)步优0 3 0.953772 20.5 16 0.142828 0.0169199 1.53 29 0.123022 0.0146705 2.31 312 0.122222 0.0154098 0.482 4 15 0.122217 0.00131297 0.00409局部最小可能。Lsqnonlin停止是因为平方和相对于初始值的最终变化小于函数公差的选定值。HW_alpha = 0.0967 HW_sigma = 0.0088

建造Hullwhite1f.模型使用Hullwhite1f.构造函数。

HW1F = HULLWHITE1F(RATESPEC,HW_ALPHA,HW_SIGMA)
HW1F = HullWhite1f具有属性:Zerocurve:[1x1 Irdatacurve] Alpha:@(t,v)Inalpha Sigma:@(t,v)insigma

利用蒙特卡罗模拟方法生成利率路径hullwhite1f.simtermstructs.

HW1FSimPaths = HW1F.simTermStructs (nPeriods,'ntrial'nTrials,......'deltatime',倾角,'男高音',男高音,“反向”,真正的);trialIdx = 1;图冲浪(男高音、SimDates HW1FSimPaths (:,:, trialIdx)) dateticky守克克利弗里维标题(['试验零曲线的演变:'num2str(timatiDX)'船体白色模特'])Xlabel(“男高音(年)”

价格欧洲的思维。

df = exp(bsxfun(@ times,-hw1fsimpaths,repmat(tenor',[nperiods + 1 1]))))));swaprate =(1  -  df(exrow,endcol,:))./ sum(bsxfun(@ times,1,df(exrow,1 :));PayOffValue = 100 * Max(Swaprate-InstrumentStrike,0)。*和(BSXFUN(@ Times,1,DF(exrow,1 :));emalifieddf = prod(exp(bsxfun(@ times,-hw1fsimpaths(1:exrow,1,:),simtimes(1:exrow)),1);HW1F_SWAPTIONPRICE =均值(实现DF。* PAYOFFVALUE)
HW1F_SwaptionPrice = 2.1839

使用线性高斯双因子模型模拟兴趣率路径

此示例显示了如何使用线性高斯双因子模型模拟兴趣率路径。在开始使用a的例子之前LinearGaussian2F模型,请确保您已经设置了如下所述的数据:

线性高斯双因子模型(由Brigo和Mercurio称为G2 ++,参见<一种href="//www.tatmou.com/help/fininst/Bibliography.html" class="a">利用蒙特卡罗模拟的利率建模)也是一个短期利率模型,但涉及两个因素。具体地说:

R. T. = X T. + y T. + φ. T.

D. X T. = - 一种 T. X T. D. T. + σ. T. D. W. 1 T. X 0. = 0.

D. y T. = - B. T. y T. D. T. + η. T. D. W. 2 T. y 0. = 0.

在哪里 D. W. 1 T. D. W. 2 T. = ρ D. T. 二维布朗运动是有相关性的吗ρ,φ.是选择匹配初始零曲线的功能。

这个函数swaptionbylg2f.用于计算模型参数的仪表价格的分析值,因此可用于校准模型。校准包括最小化观察到的市场价格之间的差异(上面使用Black的隐含掉期波动矩阵计算,见<一种href="//www.tatmou.com/help/fininst/price-bermudan-swaptions-with-different-interest-rate-models.html" class="intrnllnk">计算Black模型和掉期波动矩阵)和该模型的预测价格。

在本例中,方法类似于<一种href="//www.tatmou.com/help/fininst/price-bermudan-swaptions-with-different-interest-rate-models.html" class="intrnllnk">使用Hull-White单因子模型模拟兴趣率路径和优化工具箱功能lsqnonlin.用于最小化观察到的掉期价格与预测掉期价格之间的差异。然而,其他方法(例如,模拟退火)也可能是合适的。的起始参数和约束一种那B.那η.那ρ,σ.设置在变量中X0.,UB.;这些也可以根据特定的校准方法而变化。

校正一组参数,使观测值和预测值之间的差异最小化swaptionbylg2f.lsqnonlin.

g2ppobjfun = @(x)swaptionblackprices(Relidx) -  swaptionbylg2f(Irdc,x(1),x(2),x(3),x(4),x(5),swaptionstrike(Relidx),......eurexdatesfull(Relidx),Eurmatfull(Relidx),'重启'1);选项= OptimSet('DISP''iter'“MaxFunEvals”,1000,'tolfun',1E-5);x0 = [.2 .1 .02 .01 -.5];LB = [0 0 0 0 0 -1];UB = [1 1 1 1 1];LG2FPARAMS = LSQNONLIN(G2PPOBJFUN,X0,LB,UB,选项)
一定迭代FU(X)步骤最优性0 6 12.3547 67.6 1 12 1.37984 0.12 1.379743 8.59 2 18 1.37984 0.112847 82.0445202 0.028346 0.0564202 0.084303.0.445202 0.02825.0.445202 0.028346 0.0564239 0.056402 0.025 0.0564236 0.0843366 7.78 6 42 0.0303366.0.0564236 0.0564236 0.056402 0.02 5 36 0.13 0.03202.08448 0.0287731 0.038967 0.732 8 54 0.0273025 0.112847 0.881 9 60 0.0241689 0.213033 1.06 10 66 0.0241689 0.125602 1.06 11 72 0.0239103 0.0314005 9.78 12 78 0.0234246 0.0286685 1.21 13 84 0.0234246 0.0491135 1.21 14 90 0.023304 0.0122784 1.67 15 96 0.0231931 0.0245568 5.92 16 102 0.0230898 0.00785421 0.434 17108 0.0230898 0.0245568 0.434 18 114 0.023083 0.023083 0.25113919 0.255当地最低可能。Lsqnonlin停止是因为平方和相对于初始值的最终变化小于函数公差的选定值。LG2FPARAMS = 0.5752 0.1181 0.0146 0.0119 -0.7895

创造G2PP.对象并使用Monte Carlo仿真来生成利率路径lineargaussian2f.simtermstructs.

LG2f_a = LG2Fparams (1);LG2f_b = LG2Fparams (2);LG2f_sigma = LG2Fparams (3);LG2f_eta = LG2Fparams (4);LG2f_rho = LG2Fparams (5);G2PP = LinearGaussian2F (RateSpec LG2f_a、LG2f_b LG2f_sigma, LG2f_eta, LG2f_rho);G2PPSimPaths = G2PP.simTermStructs (nPeriods,'ntrial'nTrials,......'deltatime',倾角,'男高音',男高音,“反向”,真正的);trialIdx = 1;图冲浪(男高音、SimDates G2PPSimPaths (:,:, trialIdx)) dateticky守克克利弗里维标题(['试验零曲线的演变:'num2str(timatiDX)'G2 ++模型'])Xlabel(“男高音(年)”

价格欧洲的思维。

df = exp(bsxfun(@ times,-g2ppsimpaths,repmat(tenor',[nperiods + 1 1])))));swaprate =(1  -  df(exrow,endcol,:))./ sum(bsxfun(@ times,1,df(exrow,1 :));PayOffValue = 100 * Max(Swaprate-InstrumentStrike,0)。*和(BSXFUN(@ Times,1,DF(exrow,1 :));emaligeddf = prod(exp(bsxfun(@ times,-g2ppsimpaths(1:exrow,1,:),simtimes(1:exrow)),1);G2PP_SWAPTIONPRICE =均值(实现DF。* PAYOFFVALUE)
G2PP_SwaptionPrice = 2.0988

使用Libor市场模型模拟利率路径

此示例显示了如何使用Libor市场模型模拟兴趣路径。在开始使用a的例子之前libormarketmodel.,请确保您已经按照如下所述设置了数据:

LIBOR市场模型(LMM)与短速率模型不同,因为它会发展一组离散的前向速率。具体地,LogNormal LMM指定每个前向速率的以下扩散方程

D. F 一世 T. F 一世 = - μ. 一世 D. T. + σ. 一世 T. D. W. 一世

在哪里:

W.是一种n维几何布朗运动

D. W. 一世 T. D. W. j T. = ρ 一世 j

LMM基于无套标参数涉及前向速率的漂移。具体地,在现场Libor测量下,漂移表示为

μ. 一世 T. = - σ. 一世 T. σ. j = 问: T. 一世 τ. j ρ 一世 j σ. j T. F j T. 1 + τ. j F j T.

在哪里:

τ. 一世 是与之相关的时间分数一世前进率

q(t)是由关系定义的索引

T. 问: T. - 1 < T. < T. 问: T.

而现货LIBOR的计量单位定义为

B. T. = P. T. T. 问: T. π N = 0. 问: T. - 1 1 + τ. N F N T. N

LMM的选择是如何模拟波动性和相关性以及如何估计这些模型的参数以获得波动性和相关性。在实践中,您可以使用历史数据的组合(例如,观察到的前进率之间的相关性)和当前的市场数据。对于此示例,仅使用SWAITION数据。此外,存在许多不同的波动率和相关的参数化。对于此示例,使用两个相对简单的参数化。

波动性的文献中最受欢迎的功能形式之一是:

σ. 一世 T. = φ. 一世 一种 T. 一世 - T. + B. E. C T. 一世 - T. + D.

在哪里φ.调整曲线以匹配波动率一世远期利率。对于本例,所有的φ.被带走了1。对于相关性,使用以下功能形式:

ρ 一世 j = E. - β | 一世 - j |

一旦指定了功能形式,必须使用市场数据估计这些参数。给定一组波动函数和相关矩阵,最初由Rebonato开发的一个有用的近似是以下内容,这与欧洲仪式的黑色波动率相关

υ α. β L. F m 2 = σ. 一世 j = α. + 1 β W. 一世 0. W. j 0. F 一世 0. F j 0. ρ 一世 j S. α. β 0. 2 0. T. α. σ. 一世 T. σ. j T. D. T.

在哪里:

W. 一世 T. = τ. 一世 P. T. T. 一世 σ. K. = α. + 1 β τ. κ.. P. T. T. κ..

使用该功能完成此计算BlackVolbyRebonato.为了计算模型参数的练习价格的分析值,因此,然后使用来校准模型。校准包括最小化观察到隐含的智能黑色波动率和预测的黑色易位性之间的差异。

在本例中,方法类似于<一种href="//www.tatmou.com/help/fininst/price-bermudan-swaptions-with-different-interest-rate-models.html" class="intrnllnk">使用Hull-White单因子模型模拟兴趣率路径和<一种href="//www.tatmou.com/help/fininst/price-bermudan-swaptions-with-different-interest-rate-models.html" class="intrnllnk">使用线性高斯双因子模型模拟兴趣率路径优化工具箱功能的位置lsqnonlin.用于最小化观察到的掉期价格与预测掉期价格之间的差异。然而,其他方法(例如,模拟退火)也可能是合适的。的起始参数和约束一种那B.那D.,β设置在变量中X0.,UB.;这些也可以根据特定的校准方法而变化。

校正一组参数,使观测值和预测值之间的差异最小化BlackVolbyRebonato.lsqnonlin.

nrates = 10;corrfunc = @(i,j,beta)exp(-beta * abs(i-j));objfun = @(x)swaptionblackvol(Relidx) -  BlackVolbyRebonato(Ratespec,......repmat({@(t)那些(size(t))。*(x(1)* t + x(2))。* exp(-x(3)* t)+ x(4)},nrates-1,1),......corrfunc(meshgrid(1:nrates-1)',meshgrid(1:nrates-1),x(5)),......eurexdatesfull(Relidx),Eurmatfull(Relidx),'时期'1);选项= OptimSet('DISP''iter'“MaxFunEvals”,1000,'tolfun',1E-5);x0 = [.2 .05 1.05 .2];lb = [0 0 .5 0 .01];UB = [1 1 2 .3 1];LMMPARAMS = LSQNONLIN(OBJFUN,X0,LB,UB,选项)
第一阶迭代FU(X)步骤最优性0 6 0.156251 0.483 1 12.00871177 0.18 0.0046440 0.165527 0.165527 0.00095 3 24 0.00331055 0.32 0.0154 4 30 0.00294770 0.01920 0.00294770 0.0892617 7.47E-05 5 36 0. 0. 0.32 0.30 0.32 0.00917 6 42 0.002790 0.00917 6 42 0.002790 0.00917 6 42 0.002789 0.0091140 0.32.0110.0145632 4.15e-05 7 48 0.00278522 0.115042 0.115042 0.00116局部最低。Lsqnonlin停止是因为平方和相对于初始值的最终变化小于函数公差的选定值。LMMPARAMS = 0.0781 0.1656 0.5121 0.0617 0.0100

计算volfunc.为了lmm.对象。

a = lmmparams(1);b = lmmparams(2);c = lmmparams(3);d = lmmparams(4);beta = lmmparams(5);volfunc = repmat({@(t)那些(大小(t))。*(a * t + b)。* exp(-c * t)+ d},nrates-1,1);

绘制波动率函数。

figure fplot(VolFunc{1},[0 20])'波动函数')correlationmatrix = corrfunc(meshgrid(1:nrates-1)',meshgrid(1:nrates-1),beta);

检查相关矩阵。

DISP('相关矩阵')FPRINTF([REPMAT(' % 1.3 f ',1,长度(CorrelationMatrix))' \ n '】,CorrelationMatrix)
相关矩阵1.000 0.990 0.980 0.970 0.961 0.951 0.942 0.932 0.923 0.990 1.000 0.990 0.980 0.970 0.961 0.951 0.942 0.932 0.980 0.990 1.000 0.990 0.980 0.970 0.961 0.951 0.942 0.970 0.980 0.990 1.000 0.990 0.980 0.970 0.961 0.951 0.961 0.970 0.980 0.990 1.000 0.990 0.980 0.970 0.961 0.951 0.961 0.9700.980 0.990 1.000 0.990 0.980 0.970 0.942 0.951 0.961 0.970 0.980 0.990 1.000 0.990 0.980 0.932 0.942 0.951 0.961 0.970 0.980 0.990 1.000 0.990 0.923 0.932 0.942 0.951 0.961 0.970 0.980 0.990 1.000

创造lmm.对象并使用Monte Carlo仿真来生成利率路径libormarketmodel.simtermstructs.

lmm = libormarketmodel(IRDC,Volfunc,CorrelitationMatrix,'时期'1);[lmmzerates,forwardrates] = lmm.simtermstructs(nperiods,“nTrials”,ntrials);trialIdx = 1;图tmpplotdata = lmmzerates(:,:,timidx);tmpplotdata(tmpplotdata == 0)= nan;冲浪(男高音,Simdates,TMPPLOTDATA)标题(['试验零曲线的演变:'num2str(timatiDX)伦敦银行同业拆借利率市场模型])Xlabel(“男高音(年)”

价格欧洲的思维。

df = exp(bsxfun(@ times,-lmmeratorates,repmat(tenor',[nperiods + 1 1])))));swaprate =(1  -  df(exrow,endcol,:))./ sum(bsxfun(@ times,1,df(exrow,1 :));PayOffValue = 100 * Max(Swaprate-InstrumentStrike,0)。*和(BSXFUN(@ Times,1,DF(exrow,1 :));reviceiveddf = prod(exp(bsxfun(@ times,-lmmerates(2:exrow + 1,1,:),simtimes(1:exrow)),1);LMM_SWAPTIONPRICE =均值(emalizeddf. * PayOFFVALUE)
lmm_swaptionprice = 1.9915

比较兴趣率建模结果

此示例显示如何使用不同的利率模型进行比较欧洲仪式的结果。

利用蒙特卡罗模拟,比较欧洲掉期与利率模型定价的结果。

DISP('')fprintf('蒙特卡罗试验:%8d \ n',ntrials)fprintf('时间段/试验:%8d \ n \ n',nperiods)fprintf('HW1F欧洲练工价格:%8.4F \ n',hw1f_swaptionprice)fprintf('LG2F EUROPEN SWAITION价格:%8.4F \ n',g2pp_swaptionprice)fprintf('LMM欧洲练习价格:%8.4F \ n',lmm_swaptionprice)
# of Monte Carlo Trials: 1000 # of Time Periods/Trial: 5 HW1F European swapesn Price: 2.1839 LG2F European swapesn Price: 2.0988 LMM European swapesn Price: 1.9915

参考

Brigo,D.和F. Marcurio,利率模型 - 以微笑,通货膨胀和信贷的理论与实践,Springer Finance,2006。

安德森,L.和P. Piterbarg,利率建模,大西洋金息。2010年。

船体,j,期权,期货和其他衍生品,Springer Finance,2003。

Glasserman P金融工程中的蒙特卡罗方法,2008年Prentice Hall。

Rebonato,R.,K. Mckay和R. White,SABR / LIBOR市场模型:复杂兴趣衍生物的定价,校准和对冲,约翰瓦里和索恩2010年。

也可以看看

|||||||||||

相关话题