Swaption
объект прибора
Создайте и оцените 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 и европейскими упражнениями. Можно задать несколько аргументы пары "имя-значение".
InstrumentType
- Тип КИПиА"Swaption"
| вектор символов с 'Swaption'
значений
Тип инструмента, заданный как строка со значением "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'
- Значение падения опцииЗначение падения опции, заданное как разделенная разделенными запятой парами, состоящая из 'Strike'
и скаляр неотрицательное десятичное значение.
Типы данных: double
'ExerciseDate'
- Дата выполнения опцииДата выполнения опции, заданная как разделенная разделенными запятой парами, состоящая из 'ExerciseDate'
и скалярное значение datetime, серийный номер даты, вектор символов даты или строка даты.
Примечание
Для европейской опции существует только один ExerciseDate
на дату истечения срока действия опции.
Если вы используете вектор символов даты или строку даты, формат должен быть распознаваемым datetime
потому что ExerciseDate
свойство сохранено как datetime.
Типы данных: double
| char
| string
| datetime
'Swap'
- Базовые Swap
объектSwap
объектБазовые Swap
объект, заданный как разделенная разделенными запятой парами, состоящая из 'Swap'
и скаляр Swap
объект.
Типы данных: object
Swaption
Аргументы в виде пар имя-значение'OptionType'
- Тип опции "call"
(по умолчанию) | строку со значениями "call"
или "put"
| вектор символов с 'call'
значений
или 'put'
Тип опции, заданный как разделенная разделенными запятой парами, состоящая из 'OptionType'
и скалярную строку или вектор символов.
Типы данных: char
| string
'ExerciseStyle'
- Стиль упражнения опции"European"
(по умолчанию) | строку со значением "European"
| вектор символов с 'European'
значений
Опция стиль упражнения, заданный как разделенная запятой пара, состоящий из 'ExerciseStyle'
и скалярную строку или вектор символов.
Примечание
Когда вы задаете Swap
инструмент как базовый актив для Swaption
инструмент и использование Normal
, SABR
, Black
, или HullWhite
цена, Swap
контрольно-измерительные LegType
должен быть ["fixed","float"]
или ["float","fixed"]
и Swaption
контрольно-измерительные ExerciseStyle
должен быть "European"
.
Типы данных: string
| char
'Name'
- Определяемое пользователем имя прибора" "
(по умолчанию) | строку | вектор символовОпределяемое пользователем имя инструмента, заданное как разделенная разделенными запятой парами, состоящая из 'Name'
и скалярную строку или вектор символов.
Типы данных: char
| string
Strike
- Значение падения опцииЗначение падения опции, возвращаемое как скаляр неотрицательное десятичное значение.
Типы данных: double
ExerciseDate
- Дата выполнения опцииДата выполнения опции, возвращенная как datetime.
Типы данных: datetime
Swap
- Базовые Swap
объектSwap
объектSwap
объект, возвращенный в виде скаляра Swap
объект.
Типы данных: object
OptionType
- Тип опции"call"
(по умолчанию) | строку со значением "call"
или "put"
Тип опции, возвращенный как строка со значением "call"
или "put"
.
Типы данных: string
ExerciseStyle
- Стиль упражнения опции"European"
(по умолчанию) | строку со значением "European"
Опция стиле упражнения возвращается как строка со значением "European"
.
Типы данных: string
Name
- Определяемое пользователем имя прибора" "
(по умолчанию) | строкуОпределяемое пользователем имя инструмента, возвращаемое как строка.
Типы данных: 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)']);
Ценовые 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');
Свопцион call swaption или плательщика позволяет покупателю опции заключить процентный своп, при котором покупатель опции платит фиксированную ставку и получает плавающую ставку.
Свопцион put swaption или приемник позволяет покупателю опции заключить процентный своп, при котором покупатель опции получает фиксированную ставку и платит плавающую ставку.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.