Ценовые свопционы с отрицательными ударами с использованием сдвинутой модели SABR

В этом примере показано, как оценить свопционы с отрицательными ударами с помощью модели Shifted SABR. Рыночные Сдвинутые Черные волатильности используются для калибровки параметров Сдвинутой модели SABR. Калиброванная модель Shifted SABR затем используется для вычисления изменчивости Сдвинутого Черного для отрицательных ударов.

Свопционы с отрицательными ударами затем оцениваются с помощью вычисленных Сдвинутых Черных волатильностей и swaptionbyblk функция со 'Shift' Набор параметров к предварительно заданной смене. Точно так же сдвинутые греки SABR могут быть вычислены с помощью optsensbysabr функция путем установки 'Shift' параметр. Наконец, из цен свопциона вычисляется плотность вероятностей базового актива, чтобы показать, что цены свопциона подразумевают положительные плотности вероятностей для некоторых негативных ударов.

Загрузите рыночные данные.

Во-первых, загрузите рыночные процентные ставки и данные о волатильности свопциона. Рыночные волатильности свопциона котируются с точки зрения Сдвинутых Черных волатильностей с 0.8 процентный сдвиг.

Определите RateSpec.

ValuationDate = '5-Apr-2016';
EndDates = datemnth(ValuationDate,[1 2 3 6 9 12*[1 2 3 4 5 6 7 8 9 10 12]])';
ZeroRates = [-0.34 -0.29 -0.25 -0.13 -0.07 -0.02 0.010 0.025 ...
    0.031 0.040 0.052 0.090 0.190 0.290 0.410 0.520]'/100;
Compounding = 1;
RateSpec = intenvset('ValuationDate',ValuationDate,'StartDates',ValuationDate, ...
'EndDates',EndDates,'Rates',ZeroRates,'Compounding',Compounding)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 1
             Disc: [16x1 double]
            Rates: [16x1 double]
         EndTimes: [16x1 double]
       StartTimes: [16x1 double]
         EndDates: [16x1 double]
       StartDates: 736425
    ValuationDate: 736425
            Basis: 0
     EndMonthRule: 1

Определите свопцию.

SwaptionSettle = '5-Apr-2016';
SwaptionExerciseDate = '5-Apr-2017';
SwapMaturity = '5-Apr-2022';
Reset = 1;
OptSpec = 'call';
TimeToExercise = yearfrac(SwaptionSettle,SwaptionExerciseDate);

Использовать swapbyzero для вычисления скорости прямого свопа.

LegRate = [NaN 0];  % To compute the forward swap rate, set the fixed rate to NaN.
[~, CurrentForwardValue] = swapbyzero(RateSpec,LegRate,SwaptionSettle,SwapMaturity,...
'StartDate',SwaptionExerciseDate)
CurrentForwardValue = 6.6384e-04

Задайте количество сдвига десятичных десятичных чисел для Сдвинутых Черных и Сдвинутых моделей SABR.

Shift = 0.008;  % 0.8 percent shift

Загрузите рыночные данные о сдвинутой волатильности черного цвета для свопционов.

MarketShiftedBlackVolatilities = [21.1; 15.3; 14.0; 14.6; 16.0; 17.7; 19.8; 23.9; 26.2]/100;
StrikeGrid = [-0.5; -0.25; -0.125; 0; 0.125; 0.25; 0.5; 1.0; 1.5]/100;
MarketStrikes = CurrentForwardValue + StrikeGrid;
ATMShiftedBlackVolatility = MarketShiftedBlackVolatilities(StrikeGrid==0);

Калибровка параметров Сдвинутой модели SABR.

Чтобы лучше представлять волатильность рынка на деньгах, Alpha значение параметров подразумевается рыночной волатильностью в деньгах. Это похоже на «Метод 2» в Калибровке модели SABR. Однако обратите внимание на сложение Shift на CurrentForwardValue и использование 'Shift' параметр с blackvolbysabr. The Beta параметр предопределен на 0.5.

Beta = 0.5;

Эта функция решает Сдвинутое уравнение волатильности в деньгах как полином Alpha. Обратите внимание на сложение Shift на CurrentForwardValue.

alpharoots = @(Rho,Nu) roots([...
    (1 - Beta)^2*TimeToExercise/24/(CurrentForwardValue + Shift)^(2 - 2*Beta) ...
    Rho*Beta*Nu*TimeToExercise/4/(CurrentForwardValue + Shift)^(1 - Beta) ...
    (1 + (2 - 3*Rho^2)*Nu^2*TimeToExercise/24) ...
    -ATMShiftedBlackVolatility*(CurrentForwardValue + Shift)^(1 - Beta)]);

Эта функция преобразует волатильность в деньгах в Alpha путем выбора наименьшего положительного реального корня.

atmVol2ShiftedSabrAlpha = @(Rho,Nu) min(real(arrayfun(@(x) ...
    x*(x>0) + realmax*(x<0 || abs(imag(x))>1e-6), alpharoots(Rho,Nu))));

Подгонка Rho и Nu (при преобразовании волатильности в Alpha). Обратите внимание на 'Shift' параметр blackvolbysabr устанавливается в заданный сдвиг.

objFun = @(X) MarketShiftedBlackVolatilities - ...
    blackvolbysabr(atmVol2ShiftedSabrAlpha(X(1), X(2)), ...
    Beta, X(1), X(2), SwaptionSettle, SwaptionExerciseDate, CurrentForwardValue, ...
    MarketStrikes, 'Shift', Shift);

options = optimoptions('lsqnonlin','Display','none');
X = lsqnonlin(objFun, [0 0.5], [-1 0], [1 Inf], options);
Rho = X(1);
Nu = X(2);

Получите окончательный Alpha из калиброванных параметров.

Alpha = atmVol2ShiftedSabrAlpha(Rho, Nu)
Alpha = 0.0133

Отображение калиброванных параметров Shifted SABR.

CalibratedPrameters = array2table([Shift Alpha Beta Rho Nu],...
    'VariableNames',{'Shift' 'Alpha' 'Beta' 'Rho' 'Nu'},...
    'RowNames',{'1Y into 5Y'})
CalibratedPrameters=1×5 table
                  Shift     Alpha      Beta      Rho        Nu   
                  _____    ________    ____    _______    _______

    1Y into 5Y    0.008    0.013345    0.5     0.46698    0.49816

Вычислите волатильности свопции с помощью калиброванной модели Shifted SABR.

Использовать blackvolbysabr с 'Shift' параметр.

Strikes = (-0.6:0.01:1.6)'/100; % Include negative strikes.
SABRShiftedBlackVolatilities = blackvolbysabr(Alpha, Beta, Rho, Nu, SwaptionSettle, ...
    SwaptionExerciseDate, CurrentForwardValue, Strikes, 'Shift', Shift);

figure;
plot(MarketStrikes, MarketShiftedBlackVolatilities, 'o', ...
    Strikes, SABRShiftedBlackVolatilities);
h = gca;
line([0,0],[min(h.YLim),max(h.YLim)],'LineStyle','--');
ylim([0.13 0.31])
xlabel('Strike');
legend('Market quotes','Shifted SABR', 'location', 'southeast');
title (['Shifted Black Volatility (',num2str(Shift*100),' percent shift)']);

Figure contains an axes. The axes with title Shifted Black Volatility (0.8 percent shift) contains 3 objects of type line. These objects represent Market quotes, Shifted SABR.

Оценить свопционы, в том числе с негативными ударами.

Использовать swaptionbyblk с 'Shift' параметр для вычисления цен свопциона с помощью модели Shitted Black.

SwaptionPrices = swaptionbyblk(RateSpec, OptSpec, Strikes, SwaptionSettle, SwaptionExerciseDate, ...
    SwapMaturity, SABRShiftedBlackVolatilities, 'Reset', Reset, 'Shift', Shift);
figure;
plot(Strikes, SwaptionPrices, 'r');
h = gca;
line([0,0],[min(h.YLim),max(h.YLim)],'LineStyle','--');
xlabel('Strike');
title ('Swaption Price');

Figure contains an axes. The axes with title Swaption Price contains 2 objects of type line.

Вычисление сдвинутой дельты SABR.

Использовать optsensbysabr с 'Shift' параметр для вычисления Delta использование модели Shitted SABR.

ShiftedSABRDelta = optsensbysabr(RateSpec, Alpha, Beta, Rho, Nu, SwaptionSettle, ...
SwaptionExerciseDate, CurrentForwardValue, Strikes, OptSpec, 'Shift', Shift);

figure;
plot(Strikes,ShiftedSABRDelta,'r-');
ylim([-0.002 1.002]);
h = gca;
line([0,0],[min(h.YLim),max(h.YLim)],'LineStyle','--');
xlabel('Strike');
title ('Delta');

Figure contains an axes. The axes with title Delta contains 2 objects of type line.

Вычислите плотность вероятностей.

Нейтральная к риску плотность вероятностей базовых цен на активы терминала может быть аппроксимирована как вторая производная от цен свопциона в отношении забастовки (Breeden and Litzenberger, 1978). Как видно на графике ниже, вычисленная плотность вероятностей положительна для некоторых отрицательных скоростей выше -0,8 процента (нижняя граница, определяемая 'Shift').

NumGrids = length(Strikes);
ProbDensity = zeros(NumGrids-2,1);
dStrike = mean(diff(Strikes));

for k = 2:(NumGrids-1)
    ProbDensity(k-1) = (SwaptionPrices(k-1) - 2*SwaptionPrices(k) + SwaptionPrices(k+1))/dStrike^2;
end

ProbDensity = ProbDensity./sum(ProbDensity);
ProbStrikes = Strikes(2:end-1);

figure;
plot(ProbStrikes,ProbDensity,'r-');
h = gca;
line([0,0],[min(h.YLim),max(h.YLim)],'LineStyle','--');
xlabel('Strike');
title ('Probability Density');

Figure contains an axes. The axes with title Probability Density contains 2 objects of type line.

Ссылки

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

Kienitz, J. Разъяснение производных по процентной ставке. Том 1. Палгрейв Макмиллан, 2014.

Breeden, D. T. and Litzenberger, R. H. «Цены условных государственных претензий, неявных в опционных ценах». Журнал Бизнес. Том 51. 1978.

См. также

| | | | | | | |

Похожие примеры

Подробнее о