Калибровка модели SABR с помощью нормальных (холостяцких) волатильностей с отрицательными ударами

В этом примере показано, как использовать два различных метода для калибровки модели стохастической волатильности SABR из рыночных подразумеваемых волатильностей Normal (Bachelier) с отрицательными ударами. Оба подхода используют normalvolbysabr, который вычисляет подразумеваемые волатильности Normal с помощью модели SABR. Когда Beta параметр модели SABR установлен в нуль, модель является моделью Normal SABR, которая позволяет вычислять подразумеваемые волатильности Normal для отрицательных ударов.

Загрузка рыночных подразумеваемых данных о нормальной (холостяцкой) волатильности

Создание гипотетического рынка подразумевало Нормальную волатильность для европейских свопсов в ряде забастовок перед калибровкой. Срок действия свопционов истекает через год после Settle дата и двухлетние свопы в качестве базового инструмента. Скорости выражены десятичными числами. Рынок подразумевал Нормальные волатильности преобразуются из базисных точек в десятичные числа. (Изменение модулей влияет на числовое значение и интерпретацию Alpha вход функции normalvolbysabr.)

% Load the market implied Normal volatility data for swaptions expiring in one year.
Settle = '20-Sep-2017';
ExerciseDate = '20-Sep-2018';
Basis = 1;

ATMStrike = -0.174/100;
MarketStrikes = ATMStrike + ((-0.5:0.25:1.5)')./100;
MarketVolatilities = [20.58 17.64 16.93 18.01 20.46 22.90 26.11 28.89 31.91]'/10000;

% At the time of Settle, define the underlying forward rate and the at-the-money volatility.
CurrentForwardValue = MarketStrikes(3)
CurrentForwardValue = -0.0017
ATMVolatility = MarketVolatilities(3)
ATMVolatility = 0.0017

Метод 1: Калибровка Alpha, Rho, и Nu Непосредственно

В этом разделе показано, как калибровать Alpha, Rho, и Nu параметры непосредственно. Значение Beta параметр равен нулю в порядке, чтобы разрешить отрицательные скорости в модели SABR (Normal SABR). После фиксации значения β(Beta), параметры α (Alpha), ρ (Rho), и ν (Nu) все устанавливаются непосредственно. Функция Optimization Toolbox™ lsqnonlin генерирует значения параметров, которые минимизируют квадратичную невязку между волатильностями рынка и волатильностями, вычисленными normalvolbysabr.

% Define the predetermined Beta
Beta1 = 0; % Setting Beta to zero allows negative rates for Normal volatilities

% Calibrate Alpha, Rho, and Nu
objFun = @(X) MarketVolatilities - ...
    normalvolbysabr(X(1), Beta1, X(2), X(3), Settle, ...
    ExerciseDate, CurrentForwardValue, MarketStrikes, 'Basis', Basis);

% If necessary, tolerances and stopping criteria can be adjusted for lsqnonlin 
X = lsqnonlin(objFun, [ATMVolatility 0 0.5], [0 -1 0], [Inf 1 Inf]);
Local minimum found.

Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
Alpha1 = X(1);
Rho1 = X(2);
Nu1 = X(3);

Метод 2: Калибровка Rho и Nu Подразумевая Alpha от волатильности в деньгах

В этом разделе показано, как использовать альтернативный метод калибровки, где значение β снова предопределено, чтобы быть нулем в порядок, чтобы позволить отрицательные скорости. Однако после фиксации значения β (Beta), параметры ρ (Rho), и ν (Nu) устанавливаются непосредственно в то время как α (Alpha) подразумевается от рыночной волатильности денег. Модели, калиброванные с использованием этого метода, приводят к волатильности в деньгах, которая равна рыночным котировкам. Этот подход может быть полезным, когда волатильность в деньгах цитируется чаще всего и важна для соответствия. В порядок подразумевать α (Alpha) от рынка на деньги Нормальная волатильность (σNormal,ATM), следующий кубический полином решен для α (Alpha), и выбирается наименьший положительный действительный корень. Это аналогично подходу, используемому для подразумевания α (Alpha) с рынка на деньги Черная волатильность [2]. Однако обратите внимание, что следующее выражение, которое используется для Normal volatilities, отличается от другого выражения, которое используется для Black volatilities.

β(β-2)T24F(2-2β)α3+ρβνT4F(1-β)α2+(1+2-3ρ224ν2T)α-σNormal,ATMF-β=0

% Define the predetermined Beta
Beta2 = 0; % Setting Beta to zero allows negative rates for Normal volatilities

% Year fraction from Settle to option maturity
T = yearfrac(Settle, ExerciseDate, Basis);

% This function solves the SABR at-the-money volatility equation as a
% polynomial of Alpha
alpharootsNormal = @(Rho,Nu) roots([...
    Beta2.*(Beta2 - 2)*T/24/CurrentForwardValue^(2 - 2*Beta2) ...
    Rho*Beta2*Nu*T/4/CurrentForwardValue^(1 - Beta2) ...
    (1 + (2 - 3*Rho^2)*Nu^2*T/24) ...
    -ATMVolatility*CurrentForwardValue^(-Beta2)]);

% This function converts at-the-money volatility into Alpha by picking the
% smallest positive real root 
atmNormalVol2SabrAlpha = @(Rho,Nu) min(real(arrayfun(@(x) ...
    x*(x>0) + realmax*(x<0 || abs(imag(x))>1e-6), alpharootsNormal(Rho,Nu))));

% Calibrate Rho and Nu (while converting at-the-money volatility into Alpha
% using atmVol2NormalSabrAlpha)
objFun = @(X) MarketVolatilities - ...
    normalvolbysabr(atmNormalVol2SabrAlpha(X(1), X(2)), ...
    Beta2, X(1), X(2), Settle, ExerciseDate, CurrentForwardValue, ...
    MarketStrikes, 'Basis', Basis);

% If necessary, tolerances and stopping criteria can be adjusted for lsqnonlin 
X = lsqnonlin(objFun, [0 0.5], [-1 0], [1 Inf]);
Local minimum found.

Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
Rho2 = X(1);
Nu2 = X(2);

% Obtain final Alpha from at-the-money volatility using calibrated parameters
Alpha2 = atmNormalVol2SabrAlpha(Rho2, Nu2);

% Display calibrated parameters
C = {Alpha1 Beta1 Rho1 Nu1;Alpha2 Beta2 Rho2 Nu2};
format;
CalibratedPrameters = cell2table(C,...
    'VariableNames',{'Alpha' 'Beta' 'Rho' 'Nu'},...
    'RowNames',{'Method 1';'Method 2'})
CalibratedPrameters=2×4 table
                  Alpha      Beta       Rho         Nu   
                _________    ____    _________    _______

    Method 1    0.0016332     0      -0.034233    0.45877
    Method 2    0.0016652     0        -0.0318    0.44812

Используйте калиброванные модели

Используйте калиброванные модели для вычисления новых волатильностей при любом значении удара, включая отрицательные удары.

Вычислите летучесть для моделей, калиброванных с помощью Метода 1 и Метода 2, затем постройте график результатов. Модель, калиброванная с использованием Метода 2, точно воспроизводит волатильность рынка на деньгах (отмеченная кругом).

PlottingStrikes = (min(MarketStrikes)-0.0025:0.0001:max(MarketStrikes)+0.0025)';

% Compute volatilities for model calibrated by Method 1
ComputedVols1 = normalvolbysabr(Alpha1, Beta1, Rho1, Nu1, Settle, ...
    ExerciseDate, CurrentForwardValue, PlottingStrikes, 'Basis', Basis);

% Compute volatilities for model calibrated by Method 2
ComputedVols2 = normalvolbysabr(Alpha2, Beta2, Rho2, Nu2, Settle, ...
    ExerciseDate, CurrentForwardValue, PlottingStrikes, 'Basis', Basis);

figure;
plot(MarketStrikes,MarketVolatilities*10000,'xk',...
    PlottingStrikes,ComputedVols1*10000,'b', ...  
    PlottingStrikes,ComputedVols2*10000,'r', ...
    CurrentForwardValue,ATMVolatility*10000,'ok',...
    'MarkerSize',10);

h = gca;
line([0,0],[min(h.YLim),max(h.YLim)],'LineStyle','--');

xlabel('Strike', 'FontWeight', 'bold');
ylabel('Implied Normal Volatility (bps)', 'FontWeight', 'bold');
legend('Market Volatilities', 'Normal SABR Model (Method 1)', ...
    'Normal SABR Model (Method 2)', 'At-the-money volatility', ...
    'Location', 'northwest');

Figure contains an axes. The axes contains 5 objects of type line. These objects represent Market Volatilities, Normal SABR Model (Method 1), Normal SABR Model (Method 2), At-the-money volatility.

Ссылки

[1] Хаган, П. С., Кумар, Д., Лесневски, А. С. и Вудворд, Д. Е. «Управление риском улыбки». Wilmott Magazine, 2002.

[2] West, G. «Калибровка модели SABR на неликвидных рынках». Прикладные математические финансы, 12 (4), стр. 371-385, 2004.