Swaption

Swaption инструментальный объект

Описание

Создайте и оцените Swaption инструментальный объект, использующий этот рабочий процесс:

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

  2. Использование finmodel задавать HullWhite, BlackKarasinski, Black, Normal, или SABR модель для Swaption инструмент.

  3. Использование finpricer задавать Normal, SABR, Black, HullWhite, или IRTree метод ценообразования для Swaption инструмент.

Для получения дополнительной информации об этом рабочем процессе смотрите Начало работы с Рабочими процессами Используя Основанную на объектах Среду для Оценки Финансовых инструментов.

Для получения дополнительной информации о доступных моделях и методах ценообразования для Swaption инструмент, смотрите, Выбирают Instruments, Models и Pricers.

Создание

Описание

пример

SwaptionInstrument = fininstrument(InstrumentType,'Strike',strike_value,'ExerciseDate',exercice_date) создает Swaption объект путем определения InstrumentType и устанавливает свойства для необходимых аргументов пары "имя-значение" Strike и ExerciseDate. Для получения дополнительной информации о Swaption инструмент, смотрите Больше О.

пример

SwaptionInstrument = fininstrument(___,Name,Value) устанавливает дополнительные свойства с помощью дополнительных пар "имя-значение" в дополнение к обязательным аргументам в предыдущем синтаксисе. Например, SwaptionInstrument = fininstrument("Swaption",'Strike',0.67,'ExerciseDate',datetime(2019,1,30),'Swap',Swap_obj,'OptionType',"put",'ExerciseStyle',"European",'Name',"swaption_instrument") создает Swaption поместите инструмент с забастовкой 0,67 и европейское осуществление. Можно задать несколько аргументов пары "имя-значение".

Входные параметры

развернуть все

Инструментальный тип в виде строки со значением "Swaption" или вектор символов со значением 'Swaption'.

Типы данных: char | string

Swaption Аргументы в виде пар имя-значение

Задайте требуемые и дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: SwaptionInstrument = fininstrument("Swaption",'Strike',.67,'ExerciseDate',datetime(2019,1,30),'Swap',Swap_obj,'OptionType',"put",'ExerciseStyle',"European",'Name',"swaption_instrument")
Необходимый Swaption Аргументы в виде пар имя-значение

развернуть все

Значение забастовки опции в виде разделенной запятой пары, состоящей из 'Strike' и скалярное неотрицательное десятичное значение.

Типы данных: double

Дата осуществления опции в виде разделенной запятой пары, состоящей из 'ExerciseDate' и скалярный datetime, последовательный номер даты, вектор символов даты или строка даты.

Примечание

Для европейской опции существует только один ExerciseDate на дате окончания срока действия опции.

Если вы используете вектор символов даты или строку даты, формат должен быть распознаваемым datetime потому что ExerciseDate свойство хранится как datetime.

Типы данных: double | char | string | datetime

Лежание в основе Swap объект в виде разделенной запятой пары, состоящей из 'Swap' и скалярный Swap объект.

Типы данных: object

Дополнительный Swaption Аргументы в виде пар имя-значение

развернуть все

Тип опции в виде разделенной запятой пары, состоящей из 'OptionType' и скалярная строка или вектор символов.

Типы данных: char | string

Осуществление опции разрабатывает в виде разделенной запятой пары, состоящей из 'ExerciseStyle' и скалярная строка или вектор символов.

Примечание

Когда вы задаете Swap инструмент как базовый актив для Swaption инструмент и использование Normal, SABR, Black, или HullWhite калькулятор цен, Swap инструмент LegType должен быть ["fixed","float"] или ["float","fixed"] и Swaption инструмент ExerciseStyle должен быть "European".

Типы данных: string | char

Пользовательское имя для инструмента в виде разделенной запятой пары, состоящей из 'Name' и скалярная строка или вектор символов.

Типы данных: char | string

Свойства

развернуть все

Значение забастовки опции, возвращенное как скалярное неотрицательное десятичное значение.

Типы данных: double

Дата осуществления опции, возвращенная как datetime.

Типы данных: datetime

Swap объект, возвращенный как скалярный Swap объект.

Типы данных: object

Тип опции, возвращенный как строка со значением "call" или "put".

Типы данных: string

Стиль осуществления опции, возвращенный как строка со значением "European".

Типы данных: string

Пользовательское имя для инструмента, возвращенного как строка.

Типы данных: string

Примеры

свернуть все

Этот пример показывает рабочий процесс, чтобы оценить Swaption инструмент, когда вы используете SABR модель и SABR метод ценообразования.

Создайте ratecurve Объект

Создайте ratecurve объект с помощью ratecurve.

Settle = datetime(2018,9,15);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 15-Sep-2018
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создайте Swap Инструментальный объект

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

Swap = fininstrument("Swap",'Maturity',datetime(2027,3,15),'LegRate',[0 0],'LegType',...
    ["float","fixed"],'Notional',100,'StartDate',datetime(2022,3,15),'Name',"swap_instrument")
Swap = 
  Swap with properties:

                     LegRate: [0 0]
                     LegType: ["float"    "fixed"]
                       Reset: [2 2]
                       Basis: [0 0]
                    Notional: 100
          LatestFloatingRate: [NaN NaN]
                 ResetOffset: [0 0]
    DaycountAdjustedCashFlow: [0 0]
             ProjectionCurve: [0x0 ratecurve]
       BusinessDayConvention: ["actual"    "actual"]
                    Holidays: NaT
                EndMonthRule: [1 1]
                   StartDate: 15-Mar-2022
                    Maturity: 15-Mar-2027
                        Name: "swap_instrument"

Создайте Swaption Инструментальный объект

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

Swaption = fininstrument("Swaption",'Strike',0.02,'ExerciseDate',datetime(2022,3,15),'Swap',Swap,'Name',"swaption_option")
Swaption = 
  Swaption with properties:

       OptionType: "call"
    ExerciseStyle: "european"
     ExerciseDate: 15-Mar-2022
           Strike: 0.0200
             Swap: [1x1 fininstrument.Swap]
             Name: "swaption_option"

Создайте SABR Объект модели

Используйте finmodel создать SABR объект модели.

SabrModel = finmodel("SABR",'Alpha',0.032,'Beta',0.04,'Rho',.08,'Nu',0.49,'Shift',0.002)
SabrModel = 
  SABR with properties:

             Alpha: 0.0320
              Beta: 0.0400
               Rho: 0.0800
                Nu: 0.4900
             Shift: 0.0020
    VolatilityType: "black"

Создайте SABR Объект калькулятора цен

Используйте finpricer создать SABR объект калькулятора цен и использование ratecurve объект для 'DiscountCurve' аргумент пары "имя-значение".

outPricer = finpricer("analytic",'Model',SabrModel,'DiscountCurve',myRC)
outPricer = 
  SABR with properties:

    DiscountCurve: [1x1 ratecurve]
            Model: [1x1 finmodel.SABR]

Цена Swaption Инструмент

Используйте price вычислить цену за Swaption инструмент.

Price = price(outPricer,Swaption)
Price = 10.8558

Этот пример показывает рабочий процесс, чтобы оценить Swaption инструмент, когда вы используете Black модель и Black метод ценообразования.

Создайте ratecurve Объект

Создайте ratecurve объект с помощью ratecurve.

Settle = datetime(2018,9,15);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 15-Sep-2018
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создайте Swap Инструментальный объект

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

Swap = fininstrument("Swap",'Maturity',datetime(2027,3,15),'LegRate',[0 0],'LegType',...
    ["float","fixed"],'Notional',100,'StartDate',datetime(2022,3,15),'Name',"swap_instrument")
Swap = 
  Swap with properties:

                     LegRate: [0 0]
                     LegType: ["float"    "fixed"]
                       Reset: [2 2]
                       Basis: [0 0]
                    Notional: 100
          LatestFloatingRate: [NaN NaN]
                 ResetOffset: [0 0]
    DaycountAdjustedCashFlow: [0 0]
             ProjectionCurve: [0x0 ratecurve]
       BusinessDayConvention: ["actual"    "actual"]
                    Holidays: NaT
                EndMonthRule: [1 1]
                   StartDate: 15-Mar-2022
                    Maturity: 15-Mar-2027
                        Name: "swap_instrument"

Создайте Swaption Инструментальный объект

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

Swaption = fininstrument("Swaption",'Strike',0.02,'ExerciseDate',datetime(2022,3,15),'Swap',Swap,'Name',"swaption_option")
Swaption = 
  Swaption with properties:

       OptionType: "call"
    ExerciseStyle: "european"
     ExerciseDate: 15-Mar-2022
           Strike: 0.0200
             Swap: [1x1 fininstrument.Swap]
             Name: "swaption_option"

Создайте Black Объект модели

Используйте finmodel создать Black объект модели.

BlackModel = finmodel("Black",'Volatility',0.032,'Shift',0.002)
BlackModel = 
  Black with properties:

    Volatility: 0.0320
         Shift: 0.0020

Создайте Black Объект калькулятора цен

Используйте finpricer создать Black объект калькулятора цен и использование ratecurve объект для 'DiscountCurve' аргумент пары "имя-значение".

outPricer = finpricer("analytic",'Model',BlackModel,'DiscountCurve',myRC)
outPricer = 
  Black with properties:

            Model: [1x1 finmodel.Black]
    DiscountCurve: [1x1 ratecurve]

Цена Swaption Инструмент

Используйте price вычислить цену за Swaption инструмент.

Price = price(outPricer,Swaption)
Price = 3.3116

Этот пример показывает рабочий процесс, чтобы оценить Swaption инструмент, когда вы используете HullWhite модель и IRTree метод ценообразования.

Создайте ratecurve Объект

Создайте ratecurve объект с помощью ratecurve.

Settle = datetime(2018,9,15);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 15-Sep-2018
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Создайте Swap Инструментальный объект

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

Swap = fininstrument("Swap",'Maturity',datetime(2027,3,15),'LegRate',[0 0],'LegType',...
    ["float","fixed"],'Notional',100,'StartDate',datetime(2022,3,15),'Name',"swap_instrument")
Swap = 
  Swap with properties:

                     LegRate: [0 0]
                     LegType: ["float"    "fixed"]
                       Reset: [2 2]
                       Basis: [0 0]
                    Notional: 100
          LatestFloatingRate: [NaN NaN]
                 ResetOffset: [0 0]
    DaycountAdjustedCashFlow: [0 0]
             ProjectionCurve: [0x0 ratecurve]
       BusinessDayConvention: ["actual"    "actual"]
                    Holidays: NaT
                EndMonthRule: [1 1]
                   StartDate: 15-Mar-2022
                    Maturity: 15-Mar-2027
                        Name: "swap_instrument"

Создайте Swaption Инструментальный объект

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

Swaption = fininstrument("Swaption",'Strike',0.02,'ExerciseDate',datetime(2022,3,15),'Swap',Swap,'Name',"swaption_option")
Swaption = 
  Swaption with properties:

       OptionType: "call"
    ExerciseStyle: "european"
     ExerciseDate: 15-Mar-2022
           Strike: 0.0200
             Swap: [1x1 fininstrument.Swap]
             Name: "swaption_option"

Создайте HullWhite Объект модели

Используйте finmodel создать HullWhite объект модели.

HullWhiteModel = finmodel("HullWhite",'Alpha',0.032,'Sigma',0.04)
HullWhiteModel = 
  HullWhite with properties:

    Alpha: 0.0320
    Sigma: 0.0400

Создайте IRTree Объект калькулятора цен

Используйте finpricer создать IRTree объект калькулятора цен и использование ratecurve объект для 'DiscountCurve' аргумент пары "имя-значение".

outPricer = finpricer("IRTree",'Model',HullWhiteModel,'DiscountCurve',myRC,'TreeDates',ZeroDates)
outPricer = 
  HWBKTree with properties:

             Tree: [1x1 struct]
        TreeDates: [10x1 datetime]
            Model: [1x1 finmodel.HullWhite]
    DiscountCurve: [1x1 ratecurve]

Цена Swaption Инструмент

Используйте price вычислить цену и чувствительность для Swaption инструмент.

[Price, outPR] = price(outPricer,Swaption,["all"])
Price = 14.6581
outPR = 
  priceresult with properties:

       Results: [1x4 table]
    PricerData: [1x1 struct]

outPR.Results
ans=1×4 table
    Price      Vega      Gamma     Delta
    ______    ______    _______    _____

    14.658    321.44    -2261.6    142.2

В этом примере показано, как калибровать переключенный SABR параметры модели для Swaption инструмент, когда вы используете SABR метод ценообразования.

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

% Zero curve
ValuationDate = datetime("5-Mar-2016", 'Locale', 'en_US');
ZeroDates = datemnth(ValuationDate,[1 2 3 6 9 12*[1 2 3 4 5 6 7 8 9 10 12]])';
ZeroRates = [-0.33 -0.28 -0.24 -0.12 -0.08 -0.03 0.015 0.028 ...
    0.033 0.042 0.056 0.095 0.194 0.299 0.415 0.525]'/100;
Compounding = 1;
ZeroCurve = ratecurve("zero",ValuationDate,ZeroDates,ZeroRates,'Compounding',Compounding)
ZeroCurve = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: 1
                Basis: 0
                Dates: [16x1 datetime]
                Rates: [16x1 double]
               Settle: 05-Mar-2016
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

% Define the swaptions
SwaptionSettle = datetime("5-Mar-2016", 'Locale', 'en_US');
SwaptionExerciseDate = datetime("5-Mar-2017", 'Locale', 'en_US');
SwaptionStrikes = (-0.6:0.01:1.6)'/100; % Include negative strikes
SwapMaturity = datetime("5-Mar-2022", 'Locale', 'en_US'); % Maturity of underlying swap
OptSpec = 'call';

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

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

LegRate = [0 0];
Swap = fininstrument("Swap", 'Maturity', SwapMaturity, 'LegRate', LegRate, "LegType",["fixed" "float"],...
    "ProjectionCurve", ZeroCurve, "StartDate", SwaptionExerciseDate)
Swap = 
  Swap with properties:

                     LegRate: [0 0]
                     LegType: ["fixed"    "float"]
                       Reset: [2 2]
                       Basis: [0 0]
                    Notional: 100
          LatestFloatingRate: [NaN NaN]
                 ResetOffset: [0 0]
    DaycountAdjustedCashFlow: [0 0]
             ProjectionCurve: [1x2 ratecurve]
       BusinessDayConvention: ["actual"    "actual"]
                    Holidays: NaT
                EndMonthRule: [1 1]
                   StartDate: 05-Mar-2017
                    Maturity: 05-Mar-2022
                        Name: ""

ForwardValue = parswaprate(Swap,ZeroCurve)
ForwardValue = 7.3271e-04

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

Рынок swaption колебания заключается в кавычки в терминах переключенных Черных колебаний с 0.8 сдвиг процента.

StrikeGrid = [-0.5; -0.25; -0.125; 0; 0.125; 0.25; 0.5; 1.0; 1.5]/100;
MarketStrikes = ForwardValue + StrikeGrid;
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;
ATMShiftedBlackVolatility = MarketShiftedBlackVolatilities(StrikeGrid==0);

Калибруйте переключенный SABR Параметры модели

Beta параметр предопределяется в 0.5. Используйте volatilities вычислить подразумеваемую волатильность.

Beta = 0.5;

% Calibrate Alpha, Rho, and Nu
objFun = @(X) MarketShiftedBlackVolatilities - volatilities(finpricer("Analytic", 'Model', ...
    finmodel("SABR", 'Alpha', X(1), 'Beta', Beta, 'Rho', X(2), 'Nu', X(3), 'Shift', Shift), ...
    'DiscountCurve', ZeroCurve), SwaptionExerciseDate, ForwardValue, MarketStrikes);

X = lsqnonlin(objFun, [0.5 0 0.5], [0 -1 0], [Inf 1 Inf]);
Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to 
its initial value is less than the value of the function tolerance.
Alpha = X(1);
Rho = X(2);
Nu = X(3);

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

Используйте finmodel создать SABR объект модели.

SABRModel = finmodel("SABR",'Alpha',Alpha,'Beta',Beta,'Rho',Rho,'Nu',Nu,'Shift',Shift)
SABRModel = 
  SABR with properties:

             Alpha: 0.0135
              Beta: 0.5000
               Rho: 0.4654
                Nu: 0.4957
             Shift: 0.0080
    VolatilityType: "black"

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

Используйте finpricer создать SABR объект калькулятора цен и использование ratecurve объект для 'DiscountCurve' аргумент пары "имя-значение".

SABRPricer = finpricer("Analytic", 'Model', SABRModel, 'DiscountCurve', ZeroCurve)
SABRPricer = 
  SABR with properties:

    DiscountCurve: [1x1 ratecurve]
            Model: [1x1 finmodel.SABR]

SABRShiftedBlackVolatilities = volatilities(SABRPricer, SwaptionExerciseDate, ForwardValue, SwaptionStrikes)
SABRShiftedBlackVolatilities = 221×1

    0.2978
    0.2911
    0.2848
    0.2787
    0.2729
    0.2673
    0.2620
    0.2568
    0.2518
    0.2470
      ⋮

figure;
plot(MarketStrikes, MarketShiftedBlackVolatilities, 'o', ...
    SwaptionStrikes, 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.

Цена Swaption Инструменты Используя калиброванный SABR Модель и SABR Калькулятор цен

% Create swaption instruments
NumInst = length(SwaptionStrikes);
Swaptions(NumInst, 1) = fininstrument("Swaption", ...
    'Strike', SwaptionStrikes(1), 'ExerciseDate', SwaptionExerciseDate(1), 'Swap', Swap);
for k = 1:NumInst
    Swaptions(k) = fininstrument("Swaption", 'Strike', SwaptionStrikes(k), ...
        'ExerciseDate', SwaptionExerciseDate, 'Swap', Swap, 'OptionType', OptSpec);
end
Swaptions
Swaptions=221×1 object
  16x1 Swaption array with properties:

    OptionType
    ExerciseStyle
    ExerciseDate
    Strike
    Swap
    Name
      ⋮

% Price swaptions using the SABR pricer
SwaptionPrices = price(SABRPricer,Swaptions);

figure;
plot(SwaptionStrikes, 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.

Больше о

развернуть все

Введенный в R2020a