Swaption

Swaption объект прибора

Описание

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

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

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

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

Дополнительные сведения об этом рабочем процессе см. в разделе Запуске с рабочими процессами с использованием объектной среды для ценообразования финансовых инструментов.

Для получения дополнительной информации о доступных моделях и методах ценообразования для Swaption инструмент, см. «Выбор инструментов», «Модели» и «Цены».

Создание

Описание

пример

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 и используйте объект pricer 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 и используйте объект pricer 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 и используйте объект pricer 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

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

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

The 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 и используйте объект pricer 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
Для просмотра документации необходимо авторизоваться на сайте