Прайс Свапшнс с отрицательными забастовками Используя переключенную модель SABR

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

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

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

Во-первых, загрузите рыночные процентные ставки и swaption данные об энергозависимости. Рынок swaption колебания заключается в кавычки в терминах Переключенных Черных колебаний с 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

Задайте swaption.

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

Укажите, что сумма переключает десятичные числа на нижний регистр для моделей Shifted Black и Shifted SABR.

Shift = 0.008;  % 0.8 percent shift

Загрузите подразумеваемые Сдвинутые Черные данные об энергозависимости рынка для swaptions.

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. Beta параметр предопределяется в 0.5.

Beta = 0.5;

Эта функция решает Переключенный SABR уравнение энергозависимости в деньгах как полином 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

Покажите калиброванные Переключенные параметры 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

Вычислите swaption колебания с помощью калиброванной модели 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)']);

Оцените swaptions, включая тех с отрицательными забастовками.

Использование swaptionbyblk с 'Shift' параметр, чтобы вычислить swaption цены с помощью модели Shifted 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');

Вычислите переключенную Delta SABR.

Использование optsensbysabr с 'Shift' параметр, чтобы вычислить Delta использование модели Shifted 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');

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

Нейтральная к риску плотность вероятности терминальных цен базового актива может быть аппроксимирована как вторая производная swaption цен относительно забастовки (Breeden и 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');

Ссылки

Хейган, P. S. Кумар, D., Лесниевский, A. S. и лесничий, D. E. "Управляя риском улыбки". Журнал Wilmott. 2002.

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

Breeden, D. T. и Litzenberger, R. H. "Цены заявлений состояния сопряженных, неявных в ценах опции". Бизнес журнала. Издание 51. 1978.

Смотрите также

| | | | | | | |

Связанные примеры

Больше о