В этом примере показано, как использовать два различных метода для калибровки модели стохастической волатильности SABR от рыночных подразумеваемых волатильностей Black. Оба подхода используют blackvolbysabr
.
Загрузка рыночных подразумеваемых данных о волатильности черного цвета
Метод 2: Калибровать Rho и Nu, подразумевая Альфа от волатильности в деньгах
Этот пример показывает, как настроить гипотетический рынок подразумевал волатильность черных для европейских свопсов в ряде ударов перед калибровкой. Срок действия свопционов истекает через три года после Settle
дата и иметь 10-летние свопы в качестве базового инструмента. Скорости выражены десятичными числами. (Изменение модулей влияет на числовое значение и интерпретацию Alpha
входной параметр функции blackvolbysabr
.)
Загрузка рынка подразумевает черные данные о волатильности для свопционов, срок действия которых истекает через три года.
Settle = '12-Jun-2013'; ExerciseDate = '12-Jun-2016'; MarketStrikes = [2.0 2.5 3.0 3.5 4.0 4.5 5.0]'/100; MarketVolatilities = [45.6 41.6 37.9 36.6 37.8 39.2 40.0]'/100;
Во время Settle
, определить базовую форвардную ставку и волатильность в деньгах.
CurrentForwardValue = MarketStrikes(4) ATMVolatility = MarketVolatilities(4)
CurrentForwardValue = 0.0350 ATMVolatility = 0.3660
В этом примере показано, как калибровать Alpha
, Rho
, и Nu
входные параметры непосредственно. Значение Beta
предопределяется либо подгонкой исторических данных о волатильности рынка, либо выбором значения, считающейся подходящей для этого рынка [1].
Задайте предопределенную Beta
.
Beta1 = 0.5;
После фиксации значения (Beta
), параметры (Alpha
), (Rho
), и (Nu
) все устанавливаются непосредственно. Функция Optimization Toolbox™ lsqnonlin
генерирует значения параметров, которые минимизируют квадратичную невязку между волатильностями рынка и волатильностями, вычисленными blackvolbysabr
.
% Calibrate Alpha, Rho, and Nu objFun = @(X) MarketVolatilities - ... blackvolbysabr(X(1), Beta1, X(2), X(3), Settle, ... ExerciseDate, CurrentForwardValue, MarketStrikes); X = lsqnonlin(objFun, [0.5 0 0.5], [0 -1 0], [Inf 1 Inf]); Alpha1 = X(1); Rho1 = X(2); Nu1 = X(3);
Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the default value of the function tolerance.
В этом примере показано, как использовать альтернативный метод калибровки, где значение (Beta
) снова предопределено как в способе 1.
Задайте предопределенную Beta
.
Beta2 = 0.5;
Однако после фиксации значения (Beta
), параметры (Rho
), и (Nu
) устанавливаются непосредственно в то время как (Alpha
) подразумевается от рыночной волатильности денег. Модели, калиброванные с использованием этого метода, приводят к волатильности в деньгах, которая равна рыночным котировкам. Этот подход широко используется в свопционах, где волатильность в деньгах цитируется чаще всего и важна для соответствия. Подразумевать (Alpha
) от рыночной волатильности денег (), следующий кубический полином решен для (Alpha
), и выбирается наименьший положительный действительный корень [2].
где:
- текущее прямое значение.
- доля года до погашения.
Для этого задайте анонимную функцию как:
% Year fraction from Settle to option maturity T = yearfrac(Settle, ExerciseDate, 1); % This function solves the SABR at-the-money volatility equation as a % polynomial of Alpha alpharoots = @(Rho,Nu) roots([... (1 - 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^(1 - Beta2)]); % This function converts at-the-money volatility into Alpha by picking the % smallest positive real root atmVol2SabrAlpha = @(Rho,Nu) min(real(arrayfun(@(x) ... x*(x>0) + realmax*(x<0 || abs(imag(x))>1e-6), alpharoots(Rho,Nu))));
Функция atmVol2SabrAlpha
преобразует волатильность в деньгах в (Alpha
) для заданного набора (Rho
) и (Nu
). Эта функция затем используется в целевой функции, чтобы соответствовать параметрам (Rho
) и (Nu
).
% Calibrate Rho and Nu (while converting at-the-money volatility into Alpha % using atmVol2SabrAlpha) objFun = @(X) MarketVolatilities - ... blackvolbysabr(atmVol2SabrAlpha(X(1), X(2)), ... Beta2, X(1), X(2), Settle, ExerciseDate, CurrentForwardValue, ... MarketStrikes); X = lsqnonlin(objFun, [0 0.5], [-1 0], [1 Inf]); Rho2 = X(1); Nu2 = X(2);
Local minimum found. Optimization completed because the size of the gradient is less than the default value of the function tolerance.
Калиброванный параметр (Alpha
) вычисляется с помощью калиброванных параметров (Rho
) и (Nu
).
% Obtain final Alpha from at-the-money volatility using calibrated parameters Alpha2 = atmVol2SabrAlpha(Rho2, Nu2); % Display calibrated parameters C = {Alpha1 Beta1 Rho1 Nu1;Alpha2 Beta2 Rho2 Nu2}; CalibratedPrameters = cell2table(C,... 'VariableNames',{'Alpha' 'Beta' 'Rho' 'Nu'},... 'RowNames',{'Method 1';'Method 2'})
CalibratedPrameters = Alpha Beta Rho Nu ________ ____ _______ _______ Method 1 0.060277 0.5 0.2097 0.75091 Method 2 0.058484 0.5 0.20568 0.79647
В этом примере показано, как использовать калиброванные модели для вычисления новых волатильностей при любом значении удара.
Вычислите летучесть для моделей, калиброванных с помощью Метода 1 и Метода 2, и постройте график результатов.
PlottingStrikes = (1.75:0.1:5.50)'/100; % Compute volatilities for model calibrated by Method 1 ComputedVols1 = blackvolbysabr(Alpha1, Beta1, Rho1, Nu1, Settle, ... ExerciseDate, CurrentForwardValue, PlottingStrikes); % Compute volatilities for model calibrated by Method 2 ComputedVols2 = blackvolbysabr(Alpha2, Beta2, Rho2, Nu2, Settle, ... ExerciseDate, CurrentForwardValue, PlottingStrikes); figure; plot(MarketStrikes,MarketVolatilities,'xk',... PlottingStrikes,ComputedVols1,'b', ... PlottingStrikes,ComputedVols2,'r', ... CurrentForwardValue,ATMVolatility,'ok',... 'MarkerSize',10); xlim([0.01 0.06]); ylim([0.35 0.5]); xlabel('Strike', 'FontWeight', 'bold'); ylabel('Implied Black Volatility', 'FontWeight', 'bold'); legend('Market Volatilities', 'SABR Model (Method 1)',... 'SABR Model (Method 2)', 'At-the-money volatility');
Модель, калиброванная с использованием Метода 2, точно воспроизводит волатильность рынка на деньгах (отмеченная кругом).
[1] Hagan, P. S., Kumar, D., Lesniewski, A. S. and Woodward, D. E., Managing smile risk, Wilmott Magazine, 2002.
[2] West, G., «Calibration of the SABR Model in Illiquid Markets», Applied Mathematical Finance, 12 (4), pp. 371-385, 2004.
blackvolbysabr
| optsensbysabr
| swaptionbyblk