主要内容

使用SABR模型为交换定价

这个例子展示了如何使用SABR模型为交换定价。首先,根据市场波动率构造掉期波动率曲面。这是通过为每个互换成熟度分别校准SABR模型参数来实现的。然后通过使用表面隐含的黑波动率作为输入来计算掉期价格swaptionbyblk函数。

步骤1。负载市场互换波动率数据。

加载市场隐含的黑色波动率数据进行掉期。

解决=12 - 2013年6月- - - - - -”;ExerciseDates = {的12 - 9月- 201312 - 2014年6月- - - - - -”12 - 2015年6月- - - - - -”...12 - 2016年6月- - - - - -”12 - 2017年6月- - - - - -”12 - 2018年6月- - - - - -”12 - 2020年6月- - - - - -”...12 - 2023年6月- - - - - -”};YearsToExercise = yearfrac(Settle, ExerciseDates, 1);NumMaturities =长度(YearsToExercise);市场波动= [...57.6 53.7 49.4 45.6 44.1 41.1 35.2 32.0 46.6 46.9 44.8 41.6 39.8 37.4 33.4 31.0 35.9 39.3 39.6 37.9 37.2 34.7 30.5 28.9 34.1 36.5 37.8 36.6 35.0 31.9 28.1 26.6 41.0 41.3 39.5 37.8 36.0 32.6 29.0 26.0 45.8 43.4 41.9 39.2 36.9 33.2 29.6 26.3 50.3 46.9 44.0 37.5 33.8 30.2 27.3]/100;MarketStrikes = [...1.00 1.25 1.68 2.00 2.26 2.41 2.58 2.62;1.50 1.75 2.18 2.50 2.76 2.91 3.08 3.12;2.00 2.25 2.68 3.00 3.26 3.41 3.58 3.62;2.50 2.75 3.18 3.50 3.76 3.91 4.08 4.12;3.00 3.25 3.68 4.00 4.26 4.41 4.58 4.62;3.50 3.75 4.18 4.50 4.76 4.91 5.08 5.12;4.00 4.25 4.68 5.00 5.26 5.41 5.58 5.62]/100;CurrentForwardValues = MarketStrikes(4,:)
CurrentForwardValues =1×80.0250 0.0275 0.0318 0.0350 0.0376 0.0391 0.0408 0.0412
atmvolatility =市场波动性(4,:)
ATMVolatilities =1×80.3410 0.3650 0.3780 0.3660 0.3500 0.3190 0.2810 0.2660

在这两个矩阵的第四行中表示了当前的潜在远期利率和对应的八种互换期限的现价波动率。

步骤2。校准每个互换成熟度的SABR模型参数。

使用函数中实现的模型blackvolbysabr,一个静态SABR模型,其中模型参数被假设为相对于时间的常数,参数分别校准为每个交换期限(年到行使)在循环。为了更好地反映市场的平价波动,α参数值由市场平价波动率暗示(参见“方法2”)校准SABR模型).

定义预定的β,校准每个交换成熟度的SABR模型参数,并将校准后的参数显示在表格中。

Beta = 0.5;Beta = repmat(Beta, nummatities, 1);阿尔法=零(nummaturity, 1);ros = 0 (nummaturity, 1);Nus = 0 (nummaturity, 1);选项= optimoptions(“lsqnonlin”“显示”“没有”);k = 1:NumMaturities该函数将SABR平价波动方程解为的%多项式alpharoots = @(Rho,Nu)根([...(1 - Beta)^2*YearsToExercise(k)/24/CurrentForwardValues(k)^(2 - 2*Beta)...Rho*Beta*Nu*YearsToExercise(k)/4/CurrentForwardValues(k)^(1 - Beta)...(1 + (2 - 3*Rho²)*Nu²*YearsToExercise(k)/24)...- atmvolatility (k)*CurrentForwardValues(k)^(1 - Beta)]);此函数通过选择。将平价波动率转换为%最小正实根atmVol2SabrAlpha = @(Rho,Nu) min(real(arrayfun(@(x))...x * (x > 0) +最大浮点数* (x < 0 | | abs(图像放大(x)) > 1 e-6), alpharoots(ρ,ν))));%拟合Rho和Nu(同时将平价波动率转换为Alpha)objFun = @(X)市场波动性(:,k) -...blackvolbysabr (atmVol2SabrAlpha (X (1), (2)),...Beta, X(1), X(2), Settle, ExerciseDates(k), CurrentForwardValues(k),...MarketStrikes (:, k));X = lsqnonlin(objFun, [0 0.5], [-1 0], [1 Inf], options);罗= X(1);Nu = X(2);从校准的参数中获得最终AlphaAlpha = atmVol2SabrAlpha(Rho, Nu);Alpha (k) = Alpha;Rho (k) = Rho;Nus(k) = Nu;结束校准参数= array2table([Alphas Betas rass Nus],...“VariableNames”, {“α”“β”的ρ“怒”},...“RowNames”, {“从3M到10Y”“从1Y到10Y”...“2Y变成10Y”“从3Y到10Y”“从4Y到10Y”...“从5年到10年”“从7Y到10Y”“从10Y到10Y”})
CalibratedPrameters =8×4表Alpha Beta Rho Nu ________ ____ ________ _______ 3M变成10Y 0.051947 0.5 0.39572 1.4146 1Y变成10Y 0.054697 0.5 0.2955 1.1257 2Y变成10Y 0.058433 0.5 0.24175 0.93463 3Y变成10Y 0.058484 0.5 0.20568 0.79647 4Y变成10Y 0.056054 0.5 0.13685 0.76993 5Y变成10Y 0.04475 0.5 0.083385 0.66341 10Y变成10Y 0.044548 0.5 0.02261 0.49487

步骤3。构造一个波动面。

使用校准的模型来计算任何打击值的新波动率,以产生给定成熟度的平滑微笑。这可以对每个期限重复,以形成波动率面

使用每个成熟度的校准模型计算波动率,并绘制波动率曲面。

PlottingStrikes = (0.95:0.1:5.8)'/100;ComputedVols =零(长度(PlottingStrikes), NumMaturities);k = 1: nummatities ComputedVols(:,k) = blackvolbysabr(alpha (k), Betas(k), ros (k), Nus(k), Settle,...ExerciseDates(k), CurrentForwardValues(k), PlottingStrikes);结束图;冲浪(YearsToExercise, PlottingStrikes, ComputedVols);xlim ([0 10]);ylim ([0.0095 - 0.06]);zlim ([0.2 - 0.8]);视图(113年,32);集(gca),“位置”, [0.13 0.11 0.775 0.815],...“PlotBoxAspectRatioMode”“手动”);包含(“锻炼几年”“Fontweight”“大胆”);ylabel (“罢工”“Fontweight”“大胆”);zlabel (“隐含黑色波动率”“Fontweight”“大胆”);

图中包含一个轴对象。axis对象包含一个surface类型的对象。

请注意,在这个波动表面上,笑容往往会随着更长的互换期限(行使年限)而变得更平坦。这与ν参数值会随着交换的成熟而减小,如前面的表所示CalibratedPrameters

步骤4。使用swaptionbyblk为交换定价。

使用波动面来为5年到期的互换定价。定义一个5年内到期的互换(10年期互换),并使用互换时的利率期限结构解决日期来定义RateSpec.使用RateSpec方法计算当前远期掉期率swapbyzero函数。计算此交换的SABR隐含Black波动率blackvolbysabr函数(在下面的图中用红色箭头标记)。使用SABR隐含的黑色波动率作为输入对掉期进行定价swaptionbyblk函数。

定义交换SwaptionSettle =12 - 2013年6月- - - - - -”;SwaptionExerciseDate =12 - 2018年6月- - - - - -”;SwapMaturity =12 - 2028年6月- - - - - -”;重置= 1;OptSpec =“电话”;罢工= 0.0263;定义RateSpecValuationDate =12 - 2013年6月- - - - - -”;结束日期= {“12 - 7 - 2013”的12 - 9月- 2013的12 - 12月- 201312 - 2014年6月- - - - - -”...12 - 2015年6月- - - - - -”12 - 2016年6月- - - - - -”12 - 2017年6月- - - - - -”12 - 2018年6月- - - - - -”...12 - 2019年6月- - - - - -”12 - 2020年6月- - - - - -”12 - 2021年6月- - - - - -”12 - 2022年6月- - - - - -”...12 - 2023年6月- - - - - -”12 - 2025年6月- - - - - -”12 - 2028年6月- - - - - -”12 - 2033年6月- - - - - -”};费率= [0.2 0.3 0.4 0.7 0.5 0.7 1.0 1.4 1.7 1.9 ....2.1 2.3 2.5 2.8 3.1 3.3]'/100;复利= 1;RateSpec = intenvset(“ValuationDate”ValuationDate,startdate可以的ValuationDate,...“EndDates”EndDates,“利率”率,“复合”复合)
RateSpec =带字段的结构:FinObj: 'RateSpec'复合:1光盘:[16x1 double]利率:[16x1 double]结束时间:[16x1 double]开始时间:[16x1 double]结束日期:[16x1 double]开始日期:735397估值日期:735397基础:0 EndMonthRule: 1
%使用swapbyzeroLegRate = [NaN 0];若要计算远期掉期利率,请将票面利率设置为NaN。[~, CurrentForwardSwapRate] = swapbyzero(RateSpec, leggrate, SwaptionSettle, SwapMaturity,...StartDate可以的, SwaptionExerciseDate);%使用blackvolbysabrSABRBlackVolatility = blackvolbysabr(alpha (6), Betas(6), ros (6), Nus(6), SwaptionSettle,...SwaptionExerciseDate, CurrentForwardSwapRate, Strike)
SABRBlackVolatility = 0.3932
文本(YearsToExercise(6),罢工,SABRBlackVolatility,“\ leftarrow”...“颜色”“r”“FontWeight”“大胆”“字形大小”、22);

图中包含一个轴对象。axis对象包含两个类型为surface、text的对象。

%使用swaptionbyblk价格= swaptionbyblk(RateSpec, OptSpec, Strike, SwaptionSettle, SwaptionExerciseDate,...SwapMaturity SABRBlackVolatility,“重置”重置)
价格= 14.2403

Hagan, P. S., Kumar, D., Lesniewski, A. S.和Woodward, D. E.,“微笑风险管理”,Wilmott杂志,2002。

[2] West, G.,“非流动性市场中SABR模型的校准”,应用数理金融, 12(4), pp. 371-385, 2004。

另请参阅

||

相关的例子

更多关于