采用赫尔怀特双因素模型和伦敦银行同业拆放利率市场模型进行提前支付建模

这个例子说明了如何在MATLAB®使用从金融工具的工具箱™功能模型预付款。具体来说,理查德和辊预付费模式的变化是使用双因素赫尔 - 怀特利率模型和LIBOR市场模型来模拟未来的利率路径实现的。A住房贷款抵押支持证券的定价与自定义和默认提前还款模型两者。

介绍

预付款造型是抵押贷款支持证券(MBS)的分析是至关重要的。由个体抵押贷款持有预付款影响的量和流动的现金定时 - 和抵押担保(例如,仅息证券),预付款可以极大地影响证券的价值。

PSA模型

最基本的预付款模型是公众证券协会(PSA)模型,其中假定斜坡上升相,然后以恒定的条件预付率(CPR)。可以在MATLAB使用金融工具工具箱功能来生成PSA模型psaspeed2rate

G2PP_CPR = psaspeed2rate([100 200]);图绘制(G2PP_CPR)标题(" 100和200 PSA预付速度")包含(“月”)ylabel (“心肺复苏”)ylim([0 0.14])图例({100 PSA,'200 PSA'},“位置”,“最佳”)

抵押贷款支持证券

本例中分析的MBS将在2020年到期,并具有本节中概述的属性。只要输入PSA速度作为输入参数,就可以生成PSA提前支付速度的现金流。

传递到MBS的参数被定价定居= datenum(的15 - 12月- 2007);成熟= datenum ('15  - 癸-2020');IssueDate = datenum('15  - 癸2000');GrossRate = 0.0475;CouponRate = 0.045;延迟= 14;期间= 12;基础= 4;使用100 PSA为基线病例产生现金流和日期[cflowamount, cflowdate] = mbscfamounts(结算,到期,发行,GrossRate CouponRate,延迟,100);CFlowDates CFlowTimes = yearfrac(解决);NumCouponsRemaining = cpncount(结算、到期、期限、基础、1、发行);

理查德与罗尔模型

虽然预付款造型往往涉及复杂的和先进的建模,通常在贷款层面,本例中使用基于文献[6]理查德和轧辊提出的模型稍微修改的方法。

理查德和轧辊预付费模式包括以下因素:

  • 再融资激励

  • 季节性(一年中的月份)

  • 节日或抵押的年龄

  • 烧完

理查德和轧辊提出以下建议的乘法模型:

$$ CPR = RefiIncentive*季节性乘数*

对于本例中的自定义模式,倦怠乘数,它描述了当房主的显著数量已再融资提前还款速度慢的倾向,被忽略,而前三个术语使用。

再融资动机是抵押给现有抵押贷款利率的息票率的在特定时间点的比率的函数。例如,储蓄机构监理局(OTS)提出了以下模型:

$ $再融资= .2406 -.1389 *反正切(5.952 *(1.089 - \压裂{CouponRate} {MortgageRate})) & # xA; $ $

再融资激励要求模拟未来利率。本例稍后将对此进行讨论。

C_M = 0.1:0.1:2;G2PP_Refi = 0.2406  -  0.1389 * ATAN(5.952 *(1.089  -  C_M));图图(C_M,G2PP_Refi)xlabel(“优惠券/按揭利率”)ylabel (“心肺复苏”)标题(“再融资激励”)

调味品是指在贷款开始时,在贷款趋于平稳之前,提前支付的趋势逐渐增加。OTS模型的调味品乘数如下:

调味=酮(360,1);调味料(1:29)=(1:29)/ 30;图图(调味料)XLIM([1 360])标题(“调味乘数”)包含(“月”)

季节性乘法器简单模型预付款的季节性行为 - 这数据是根据图3中[6],它适用于吉利美30年,单户的MBS的行为。

季节性= [0.94 0.76 0.73 0.96 0.98 0.92 0.99 1.1 1.18 1.21 1.23 0.97];图图(季节性)XLIM([112])AX = GCA;ax.XTick = 1:12;ax.XTickLabel = {“扬”,“二月”,“三月”,“四月”,“可能”,“君”,“七月”,“八月”,“9”,“十月”,“十一月”,“十二月”};标题(“季节性乘数”)

G2 ++利率模型

由于再融资的激励要求的未来利率的仿真,必须使用利率模型。一个选择是一个双因素加性高斯模型,通过Brigo和信使[2]被称为G2 ++。

G2++利率模型为:

$$ R(T)= X(t)+ Y(t)的+ \ varphi(t)的$$

$$ dx(t) = -ax(t) dt +∑dW_1(t) $$

$$ DY(T)= -by(T)dt的+ \ ETA dW_2(t)的$$

在哪里$$是dw_1(t)的dW_2(t)的$$二维布朗运动具有相关性吗$$ \ RHO $$

$$是dw_1(t)的dW_2(T)= \ RHO DT $$

$ $ \ varphi (T) = f M ^ (0, T) + \压裂{\σ^ 2}{2 ^ 2}(1 - e ^ {——}) ^ 2 + & # xA; \压裂{\埃塔^ 2}{2 b ^ 2} (1 - e ^ {bt}) ^ 2 + \ρ\压裂{\σ\埃塔}{ab} & # xA; (1 - e ^ {——}) (1 - e ^ {bt}) $ $

$$ R(T)$$是短期利率,$$一个$$$$ b $$均值回归常数和$ $ \σ$ $$ $ \埃塔$ $为波动率常数,$$˚F^ M(0,T)$$是市场远期汇率,或在日定居观察到的远期利率。

LIBOR市场模型

LIBOR市场模型(LMM)与短期利率模型的不同之处在于,它发展了一套离散的远期利率。具体来说,对数正态LMM为每个正向速率指定了如下扩散方程:

$ $ \压裂{dF_i (t)} {F_i} = - \ mu_i dt + \ sigma_i (t) dW_i $ $

在哪里

dW是一个N与三维几何布朗运动:

$$ dW_i(t)的dW_j(T)= \ rho_ {IJ} dt的$$

LMM将基于无套利论据的远期利率浮动联系起来。具体而言,根据即期伦敦银行同业拆借利率(LIBOR)衡量,浮动幅度如下:

$ $ \ mu_i (t) = - \ sigma_i (t) \ sum_ {j = q (t)} ^我{\压裂{\ tau_j \ rho_ {i, j} \ sigma_j (t) F_j (t)} {1 + \ tau_j F_j (t)}} $ $

在哪里

$$ \ tau_i $$是与第i前向速率相关联的时间分数

$$ q(t) $$是一个由$$ T_{q(t)-1} < t
< T_{q(t)} $$关系定义的索引函数

现货LIBOR数字定义如下:

$ $ B (t) = P (t) T_{问(t)})识别\ prod_ {n = 0} ^ {q (t) 1} (1 + \ tau_n fn (T_n)) $ $

鉴于上述情况,与LMM的选择是如何模型波动性和相关性。

速率的波动可以用随机波动进行建模,但对于本例中使用一个确定性的波动,因此一个功能形式需要被指定。其中一个在文学中最流行的函数形式如下:

$$ \ sigma_i(T)= \ phi_i(一个(T_i  -  T)+ b)的E 1 {C(T_i-T)} + d $$

在哪里$$ \披$$调整曲线以匹配的波动性我$ $ ^ {th} $ $远期利率。

同样,需要指定的远期汇率之间的相关性。这可以从历史数据来估计或装期权价格。对于这个例子,下面的函数形式将被使用:

$$ \ rho_ {I,J} = E ^ { -  \的β| I-J |}​​ $$

一旦波动性和相关性被指定时,参数需要校准 - 这可以与历史或市场数据,通常掉期期权或帽/楼层来完成。在这个例子中,我们简单地使用相关和波动率参数的合理估计。

%所用的挥发性功能 - 和对参数的一个选择LMMVolFunc = @(A,T)(A(1)* T + A(2))* EXP(-a(3)* T)+ A(4)。LMMVolParams = [0.13 0.04 0.7 0.08];%波动规范fplot(@(t) LMMVolFunc(LMMVolParams,t),[0 10]) title([“与参数波动函数”mat2str (LMMVolParams)]) ylabel ('波幅(%)')包含(“男高音(年)”)

按市场数据进行校正

G2++模型中的参数可以根据市场数据进行校准。通常,这些参数是根据观察到的利率上限、下限和/或互换数据进行校准的。目前,市值数据用于校准。

这个数据是硬编码,但可以导入到MATLAB与数据库工具箱™或数据传送专线工具箱™。

% 0曲线——该数据目前是硬编码的,但可以引导使用%a |引导|IRDataCurve |方法|。ZeroTimes = [3/12 6/12 1 5 7 10 20 30]';ZeroRates = [0.033 0.034 0.035 0.040 0.042 0.044 0.048 0.0475]';ZeroDates = daysadd(沉降,360个* ZeroTimes,1);DiscountRates = zero2disc(ZeroRates,ZeroDates,定居);IRDC = IRDataCurve('零'、结算、ZeroDates ZeroRates);figure plot(ZeroDates,ZeroRates)“美国零曲线”datestr(定居)])%帽数据重置= 2;名义= 100;CapMaturity = daysadd(结算,360*[1:5 7 10 15 20 25 30],1);CapVolatility = [。' ' 28 .30 .32 .31 .30 .27 .23 .18 .17 .165;%ATM罢工可能与swapbyzero计算击= [0.0353 0.0366 0.0378 0.0390 0.0402 0.0421 0.04390.0456 0.0471 0.0471]’;%这可能与capbyblk计算BlackCapPrices = [0.1532 0.6416 1.3366 2.0290 2.7366 4.2960 6.5992]9.6787 12.2580 14.0969 15.7873]';图散射(CapMaturity,CapVolatility)datetick标题([“ATM波动对帽”datestr(定居)])

为了校准模型参数,参数集将被发现,最小化的G2 ++预测第值和所观察到的黑色盖帽值之间的平方差的总和。优化工具箱™功能lsqnonlin在本实施例中被使用,虽然其他方法(例如,全局优化)也适用。功能capbylg2f计算给定参数值的上限的解析值。

模型参数的上下界设置为相对约束。正如Brigo和Mercurio讨论的那样,相关参数$ $ $ $ρ,往往可以接近-1当拟合一个G2++模型利率上限的价格。因此,$ $ $ $ρ被限制为间-.77以确保参数代表真正的双因素模型。剩余的均值回复和波动率参数被约束为间05。校准仍然是一个复杂的任务,而下面的情节表明,最适合的参数似乎做再现上限价格的一个相当不错的工作,但应注意的是,程序中概括这里只是代表一种方法。

%电话lsqnonlin校准参数objfun = @(x)黑帽价格- capbylg2f(irdc,x(1),x(2),x(3),x(4),x(5),罢工,CapMaturity);x0 = [。5 .05 .1 .01 - 1];lb = [0 0 0 0 -.7];乌兰巴托= [。5 .5 .5 .7];G2PP_Params = lsqnonlin (x0, objfun磅,乌兰巴托);一个= G2PP_Params (1);b = G2PP_Params (2);σ= G2PP_Params (3); eta = G2PP_Params(4); rho = G2PP_Params(5);%对比结果图散射(CapMaturity BlackCapPrices)散射(CapMaturity capbylg2f (irdc, a, b,σ,埃塔(ρ,罢工,CapMaturity),'RX')datetick标题(“市场与模型隐含的价格”)ylabel (的价格($))
局部最小值。lsqnonlin之所以停止,是因为相对于其初始值的平方和的最终变化小于函数容差的值。

G2 ++模型实现

LinearGaussian2F模型可以用来指定G2 ++模型和未来模拟路径利率。

从Brigo和信使%G2 ++模型随时间均匀的波动%的参数G2PP = LinearGaussian2F(IRDC,A,B,西格玛,η-,ρ-);

LIBOR市场模型中的实现

在波动率和相关性校准后,使用蒙特卡罗模拟来及时地演进速率。的LiborMarketModel对象用于模拟远期汇率。

虽然LMM经常使用因子约简来降低计算复杂度,但是在本例中没有因子约简。

6M LIBOR利率都选择在这个模拟中演变而来的。由于每月预付款矢量必须计算,插值被用于产生所述中间速率。简单的线性插值被使用。

numForwardRates = 46;而不是适合,VolPhi只是硬编码-代表%随着时间的推移下降的波动。VolPhi = linspace(1.2,0.8,numForwardRates-1)';测试版= 0.08;CorrFunc = @(I,J,β)EXP(-beta * ABS(I-J));CorrMat = CorrFunc(meshgrid(1:numForwardRates-1)”,meshgrid(1:numForwardRates-1),β);VolFunc =细胞(长度(VolPhi),1);jdx = 1:长度(VolPhi) VolFunc(jdx) = {@(t) VolPhi(jdx)* 1 (size(t)).*(LMMVolParams(1)*t +LMMVolParams (2))。* exp (-LMMVolParams (3) * t) + LMMVolParams (4)};结束LMM = LiborMarketModel (irdc VolFunc CorrMat);

G2 ++蒙特卡罗模拟

各种利率路径,可以通过调用模拟simTermStructs方法。

这种双因素高斯模型的一个限制是它允许负利率。这是一个值得关注的问题,特别是在低利率环境下。为了应对这种可能性,任何带有负利率的利率路径都会被拒绝。

nPeriods = NumCouponsRemaining;nTrials = 100;的DeltaTime = 1/12;%生成因素和短期利率男高音= [1/12 1 2 3 4 5 7 10 15 20 30];G2PP_SimZeroRates = G2PP.simTermStructs(nPeriods,“NTRIALS”,nTrials,“男高音”男高音歌唱家,'的DeltaTime',的DeltaTime);SimDates = daysadd(沉降,360 * *的DeltaTime(0:nPeriods),1);将为每个模拟日期恢复的%期限。stepsize是这里包括%,以方便计算每个折扣因子%模拟路径。%删除任何路径,走向负NegIdx = squeeze(any(any(G2PP_SimZeroRates < 0,1),2));G2PP_SimZeroRates (:,:, NegIdx) = [];nTrials =大小(G2PP_SimZeroRates, 3);%一个样本路径的情节演进trialIdx = 1;图冲浪(男高音、SimDates G2PP_SimZeroRates (:,:, trialIdx)) datetickykeeptickskeeplimits标题([“零线试行的演变:”num2str(trialIdx)“G2++模型”])xlabel(“男高音(年)”)

LIBOR市场模型仿真

各种利率路径,可以通过调用模拟simTermStructs的方法LiborMarketModel对象。

LMMPeriod = 2;%半年度利率LMMNumPeriods = NumCouponsRemaining / 12 * LMMPeriod;半年度期间的数量%LMMDeltaTime = 1 / LMMPeriod;LMMNTRIALS = 100;模拟%[LMMZeroRates,LMMForwardRates] = LMM.simTermStructs(LMMNumPeriods,“nTrials”LMMNTRIALS,'的DeltaTime',LMMDeltaTime);ForwardTimes = 1/2:1/2:numForwardRates / 2;LMMSimTimes = 0:1 / LMMPeriod:LMMNumPeriods / LMMPeriod;%一个样本路径的情节演进trialIdx = 1;图tmpPlotData = LMMZeroRates(:,:,trialIdx);tmpPlotData(tmpPlotData == 0)= NaN的;冲浪(ForwardTimes,LMMSimTimes,tmpPlotData)标题([“零线试行的演变:”num2str(trialIdx)" LIBOR市场模型"])xlabel(“男高音(年)”)

计算抵押贷款利率从模拟

一旦模拟了利率路径,就需要计算抵押贷款利率——[7]讨论的一种方法是从2年期和10年期利率的组合中计算抵押贷款利率。

对于此示例,以下是用于:

$$ MortgageRate = 0.024 + 0.2 * TwoYearRate + 0.6 * TenYearRate $$

%根据利率路径计算抵押贷款利率TwoYearRates =挤压(G2PP_SimZeroRates(:,中音== 2,:));TenYearRates =挤压(G2PP_SimZeroRates(:,中音== 7,:));G2PP_MortgageRates = 0.024 + 0.2 * TwoYearRates + 0.6 * TenYearRates;LMMMortgageRates =挤压(0.024 + 0.2 * LMMZeroRates(:,4,:) + 0.6 * LMMZeroRates(:,20,:));LMMDiscountFactors =挤压(cumprod(1 ./(1个+ LMMZeroRates(:,1,:)* 5))。);内插得到每月按揭利率MonthlySimTimes = 0:1/12:LMMNumPeriods / LMMPeriod;LMMMonthlyMortgageRates =零(nPeriods + 1,LMMNTRIALS);LMMMonthlyDF =零(nPeriods + 1,LMMNTRIALS);trialidx = 1:LMMNTRIALS LMMMonthlyMortgageRates(:,trialidx) = interp1(LMMSimTimes,LMMMortgageRates(:,trialidx),MonthlySimTimes,“线性”,“extrap”);LMMMonthlyDF (:, trialidx) = interp1 (LMMSimTimes, LMMDiscountFactors (:, trialidx) MonthlySimTimes,“线性”,“extrap”);结束

计算CPR并生成和评估现金流

一旦抵押贷款利率进行了模拟,心肺复苏可以从每一个利率路径乘法模型来计算。

计算调味和再融资乘数调味料的= (nPeriods + 1, - 1);调味料(1:30)= 1/30 * (1:30);G2PP_Refi = .2406 - .1389 * atan(5.952*(1.089 - CouponRate./G2PP_MortgageRates));LMM_Refi = .2406 - .1389 * atan(5.952*(1.089 - lmmmonth - mortgagerates));%心肺复苏是简单计算通过评估乘法模型G2PP_CPR = bsxfun(@倍,G2PP_Refi,调味料*(季节性(月(CFlowDates))')。);LMM_CPR = bsxfun(@倍,LMM_Refi,调味料*(季节性(月(CFlowDates))')。);通过CPR计算单月死亡率(SMM)^(1/12);LMM_SMM = 1 - (1 - LMM_CPR).^(1/12);绘制CPR对100 PSA的比值CPR_PSA100 = psaspeed2rate(100);图PSA_handle =情节(CPR_PSA100(1:nPeriods),'RX');保持G2PP_handle =情节(G2PP_CPR,“b”);LMM_handle =情节(LMM_CPR,'G');标题(“提前还款速度”) legend([PSA_handle(1) G2PP_handle(1) LMM_handle(1)],{100 PSA,'G2PP CPR','LMM CPR'},“位置”,“最佳”);

产生现金流量和计算现值

通过计算每条利率路径的单月死亡率(SMM)向量,可以计算和贴现MBS的现金流。

%计算每个现金流时间的基准零利率CFlowZero = interp1(ZeroTimes,ZeroRates,CFlowTimes,“线性”,“extrap”);计算每个现金流时间的DFCFlowDF_Zero = zero2disc(CFlowZero,CFlowDates,定居);用零曲线计算按揭证券的价格Price_Zero = CFlowAmounts * CFlowDF_Zero';%产生现金每个IR路径流动G2PP_CFlowAmounts = mbscfamounts(结算,(1:到期,1,nTrials),发行,总药量,药敏,延迟,[],G2PP_SMM(2:结束,:);%计算DF每个IR路径G2PP_CFlowDFSim = cumprod (exp(挤压(-G2PP_SimZeroRates (: 1:)。* DeltaTime)));现值每个MBS的现金流G2PP_Price_Ind =总和(G2PP_CFlowAmounts * G2PP_CFlowDFSim”,2);G2PP_Price =平均值(G2PP_Price_Ind);%重复LMMLMM_CFlowAmounts = mbscfamounts(结算,(1:到期,1,LMMNTRIALS),发行,总药量,药敏,延迟,[],LMM_SMM(2:结束,:);现值每个MBS的现金流LMM_Price_Ind =总和(LMM_CFlowAmounts * LMMMonthlyDF”,2);LMM_Price =平均值(LMM_Price_Ind);

可以比较不同方法的结果。由于过滤掉了产生负利率的任何路径,G2++模型的试验次数通常少于100次。

另外,虽然在本实施例中的G2 ++模型试验的次数被设定为100,通常的情况是需要运行以产生一个准确的估值模拟更大数目的情况。

流('蒙特卡洛试验#:%8D \ n',nTrials)fprintf中('时间段#/试用:%8D \ n \ n',nPeriods)fprintf中('MBS价格与PSA 100:%8.4f \ N',Price_Zero)fprintf中('MBS价格与自定义G2PP预付型号:%8.4f \ n \ n',G2PP_Price)fprintf中(MBS价格与定制LMM预付模式:%8.4f\n\n'LMM_Price)
蒙特卡洛试验#:72#时间段/试验:156个MBS价格与PSA 100:1.0187 MBS价格与定制G2PP预付款型号:0.9884 MBS价格与定制LMM预付款型号:0.9993

结论

这个例子显示如何校准和模拟G2 ++利率模型,以及如何使用松散的基础上,理查德和滚动模式为预付费模式产生的利率路径。这个例子还提供了一个有用的起点使用G2 ++和LMM利率模型等金融领域。

参考书目

这个例子是基于以下书籍,报纸和杂志文章:

  1. 安德森,L和V. Piterbarg(2010)。利率建模,大西洋金融出版社。

  2. Brigo, D.和F. Mercurio(2001)。利率模型-理论与实践与微笑,通货膨胀和信贷(第二版,2006年版)。施普林格-。ISBN 978-3-540-22149-4。

  3. 所罗门美邦抵押贷款支持证券和资产支持证券指南。纽约:John Wiley & Sons出版社,2001年版

  4. 卡比什潘,Y., O.图瑞尔和A.哈沙,介绍花旗LMM抵押贷款期限结构模型,《固定收益期刊》,第20卷(2010),44-58页。

  5. Rebonato, R., K. McKay,和R. White(2010)。Sabr/Libor市场模型:复杂利率衍生品的定价、校准和对冲。约翰威利父子公司。

  6. 1989年,“固定利率抵押贷款支持证券的提前支付”,《投资组合管理期刊》。

  7. 办公室储蓄机构监理,“投资组合净值示范手册”,2000年3月。

  8. 斯坦因,H. J.,Belikoff,A. L.,李文,K和田玉,X.,抵押贷款支持证券的分析:之前和之后的信贷危机(2007年1月5日)。信用风险前沿:次贷危机,定价和套期保值策略,CVA,MBS,评级和流动性;别莱茨基,托马斯,;达米亚诺·布里戈和弗雷德里克·帕特拉斯,编,2011年可用2月在SSRN:https://papers.ssrn.com/sol3/papers.cfm?abstract_id=955358