В этом примере показано, как оценить свопции с отрицательными ударами с помощью модели Shilded SABR. Волатильность сдвинутого черного используется для калибровки параметров модели сдвинутого SABR. Калиброванная модель Shilded 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
Укажите величину сдвига в десятичных разрядах для моделей Shaded Black и Shaded 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);
Чтобы лучше представлять волатильность рынка в деньгах, 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
Использовать 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)']);

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

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

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

Хаган, П. С., Кумар, Д., Лесневский, А. С. и Вудворд, Д. Е. «Управление риском улыбки». Журнал Уилмотт. 2002.
Kienitz, J. Процентные деривативы объяснены. Том 1. Пэлгрейв Макмиллан, 2014.
Бриден, Д. Т. и Литценбергер, Р. Х. «Цены государственных и условных претензий, подразумеваемых в опционных ценах». Бизнес журнала. Том 51. 1978.
capbyblk | capbynormal | capvolstrip | floorbyblk | floorbynormal | floorvolstrip | optsensbysabr | swaptionbyblk | swaptionbynormal