exponenta event banner

capvolstrip

Волатильность полосового каплета от летучести плоского колпачка

Описание

пример

[CapletVols,CapletPaymentDates,CapStrikes] = capvolstrip(ZeroCurve,CapSettle,CapMaturity,CapVolatility) полоски летучих веществ caplet из летучих веществ плоского колпачка с использованием способа начальной загрузки. Эта функция интерполирует предельные волатильности на каждую дату платежа caplet перед удалением волатильности caplet.

пример

[CapletVols,CapletPaymentDates,CapStrikes] = capvolstrip(___,Name,Value) указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к входным аргументам в предыдущем синтаксисе.

Примеры

свернуть все

Вычислите нулевую кривую для дисконтирования и проецирования форвардных ставок.

ValuationDate = datenum('23-Jun-2015');
ZeroRates = [0.01 0.09 0.30 0.70 1.07 1.71]/100;
CurveDates = datemnth(ValuationDate, [0.25 0.5 1 2 3 5]*12);
ZeroCurve = IRDataCurve('Zero',ValuationDate,CurveDates,ZeroRates)
ZeroCurve = 
			 Type: Zero
		   Settle: 736138 (23-Jun-2015)
	  Compounding: 2
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [6x1 double]
			 Data: [6x1 double]

Определите данные волатильности верхнего предела ATM.

CapSettle = datenum('25-Jun-2015');
CapMaturity = datenum({'27-Jun-2016';'26-Jun-2017';'25-Jun-2018'; ...
    '25-Jun-2019';'25-Jun-2020'});
CapVolatility = [0.29;0.38;0.42;0.40;0.38];

Стрип-каплет летучих веществ из кэпов банкоматов.

[CapletVols, CapletPaymentDates, ATMCapStrikes] = capvolstrip(ZeroCurve, ...
    CapSettle, CapMaturity, CapVolatility);

PaymentDates = cellstr(datestr(CapletPaymentDates));
format;
table(PaymentDates, CapletVols, ATMCapStrikes)
ans=9×3 table
     PaymentDates      CapletVols    ATMCapStrikes
    _______________    __________    _____________

    {'27-Jun-2016'}        0.29        0.0052014  
    {'27-Dec-2016'}     0.34657        0.0071594  
    {'26-Jun-2017'}     0.41404        0.0091175  
    {'26-Dec-2017'}     0.42114         0.010914  
    {'25-Jun-2018'}     0.45297         0.012698  
    {'26-Dec-2018'}     0.37257         0.014222  
    {'25-Jun-2019'}     0.36184         0.015731  
    {'26-Dec-2019'}      0.3498         0.017262  
    {'25-Jun-2020'}     0.33668         0.018774  

Вычислите нулевую кривую для дисконтирования и проецирования форвардных ставок.

ValuationDate = datenum('17-Feb-2015');
ZeroRates = [0.02 0.07 0.25 0.70 1.10 1.62]/100;
CurveDates = datemnth(ValuationDate, [0.25 0.5 1 2 3 5]*12);
ZeroCurve = IRDataCurve('Zero',ValuationDate,CurveDates,ZeroRates)
ZeroCurve = 
			 Type: Zero
		   Settle: 736012 (17-Feb-2015)
	  Compounding: 2
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [6x1 double]
			 Data: [6x1 double]

Определите данные волатильности верхнего предела.

CapSettle = datenum('19-Feb-2015');
CapMaturity = datenum({'19-Feb-2016';'21-Feb-2017';'20-Feb-2018'; ...
    '19-Feb-2019';'19-Feb-2020'});
CapVolatility = [0.44;0.45;0.44;0.41;0.39];
CapStrike = 0.013;

Стрип каплеты летучие из крышек с таким же ударом.

[CapletVols, CapletPaymentDates, CapStrikes] = capvolstrip(ZeroCurve, ...
    CapSettle, CapMaturity, CapVolatility, 'Strike', CapStrike);

PaymentDates = cellstr(datestr(CapletPaymentDates));
format;
table(PaymentDates, CapletVols, CapStrikes)
ans=9×3 table
     PaymentDates      CapletVols    CapStrikes
    _______________    __________    __________

    {'19-Feb-2016'}        0.44        0.013   
    {'19-Aug-2016'}     0.44495        0.013   
    {'21-Feb-2017'}     0.45256        0.013   
    {'21-Aug-2017'}     0.43835        0.013   
    {'20-Feb-2018'}     0.42887        0.013   
    {'20-Aug-2018'}     0.38157        0.013   
    {'19-Feb-2019'}     0.35237        0.013   
    {'19-Aug-2019'}      0.3525        0.013   
    {'19-Feb-2020'}     0.33136        0.013   

Вычислите нулевую кривую для дисконтирования и проецирования форвардных ставок.

ValuationDate = datenum('06-Mar-2015');
ZeroRates = [0.01 0.08 0.27 0.73 1.16 1.70]/100;
CurveDates = datemnth(ValuationDate, [0.25 0.5 1 2 3 5]*12);
ZeroCurve = IRDataCurve('Zero',ValuationDate,CurveDates,ZeroRates)
ZeroCurve = 
			 Type: Zero
		   Settle: 736029 (06-Mar-2015)
	  Compounding: 2
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [6x1 double]
			 Data: [6x1 double]

Определите данные волатильности верхнего предела.

CapSettle = datenum('06-Mar-2015');
CapMaturity = datenum({'07-Mar-2016';'06-Mar-2017';'06-Mar-2018'; ...
    '06-Mar-2019';'06-Mar-2020'});
CapVolatility = [0.43;0.44;0.44;0.43;0.41];
CapStrike = 0.011;

Укажите квартальные и полугодовые даты.

CapletDates = [cfdates(CapSettle, '06-Mar-2016', 4) ...
     cfdates('06-Mar-2016', '06-Mar-2020', 2)]';
CapletDates(~isbusday(CapletDates)) =  ...
    busdate(CapletDates(~isbusday(CapletDates)), 'modifiedfollow');

Волатильность стрип-каплет с использованием указанного CapletDates.

[CapletVols, CapletPaymentDates, CapStrikes] = capvolstrip(ZeroCurve, ...
    CapSettle, CapMaturity, CapVolatility, 'Strike', CapStrike, ...
    'CapletDates', CapletDates);

PaymentDates = cellstr(datestr(CapletPaymentDates));
format;
table(PaymentDates, CapletVols, CapStrikes)
ans=11×3 table
     PaymentDates      CapletVols    CapStrikes
    _______________    __________    __________

    {'08-Sep-2015'}        0.43        0.011   
    {'07-Dec-2015'}     0.42999        0.011   
    {'07-Mar-2016'}        0.43        0.011   
    {'06-Sep-2016'}     0.43538        0.011   
    {'06-Mar-2017'}     0.44396        0.011   
    {'06-Sep-2017'}     0.43999        0.011   
    {'06-Mar-2018'}     0.44001        0.011   
    {'06-Sep-2018'}     0.41934        0.011   
    {'06-Mar-2019'}     0.40985        0.011   
    {'06-Sep-2019'}     0.36818        0.011   
    {'06-Mar-2020'}     0.34657        0.011   

Вычислите нулевую кривую для дисконтирования и проецирования форвардных ставок.

ValuationDate = datenum('1-Mar-2016');
ZeroRates = [-0.38 -0.25 -0.21 -0.12 0.01 0.2]/100;
CurveDates = datemnth(ValuationDate, [0.25 0.5 1 2 3 5]*12);
ZeroCurve = IRDataCurve('Zero',ValuationDate,CurveDates,ZeroRates)
ZeroCurve = 
			 Type: Zero
		   Settle: 736390 (01-Mar-2016)
	  Compounding: 2
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [6x1 double]
			 Data: [6x1 double]

Определите данные волатильности верхнего предела (сдвинутый черный).

CapSettle = datenum('1-Mar-2016');
CapMaturity = datenum({'1-Mar-2017';'1-Mar-2018';'1-Mar-2019'; ...
    '2-Mar-2020';'1-Mar-2021'});
CapVolatility = [0.35;0.40;0.37;0.34;0.32]; % Shifted Black volatilities
Shift = 0.01; % 1 percent shift.
CapStrike = -0.001; % -0.1 percent strike.

Стрипуйте летучие вещества каплета из кэпов с помощью сдвинутой модели черного.

[CapletVols, CapletPaymentDates, CapStrikes] = capvolstrip(ZeroCurve, ...
CapSettle,CapMaturity,CapVolatility,'Strike',CapStrike,'Shift',Shift);

PaymentDates = string(datestr(CapletPaymentDates));
format;
table(PaymentDates,CapletVols,CapStrikes)
ans=9×3 table
    PaymentDates     CapletVols    CapStrikes
    _____________    __________    __________

    "01-Mar-2017"        0.35        -0.001  
    "01-Sep-2017"     0.39129        -0.001  
    "01-Mar-2018"      0.4335        -0.001  
    "04-Sep-2018"     0.35284        -0.001  
    "01-Mar-2019"      0.3255        -0.001  
    "03-Sep-2019"      0.3011        -0.001  
    "02-Mar-2020"     0.27266        -0.001  
    "01-Sep-2020"     0.27698        -0.001  
    "01-Mar-2021"     0.25697        -0.001  

Вычислите нулевую кривую для дисконтирования и проецирования форвардных ставок.

ValuationDate = datenum('1-Jun-2018');
ZeroRates = [-0.38 -0.25 -0.21 -0.12 0.01 0.2]/100;
CurveDates = datemnth(ValuationDate, [0.25 0.5 1 2 3 5]*12);
ZeroCurve = IRDataCurve('Zero',ValuationDate,CurveDates,ZeroRates)
ZeroCurve = 
			 Type: Zero
		   Settle: 737212 (01-Jun-2018)
	  Compounding: 2
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [6x1 double]
			 Data: [6x1 double]

Определите обычные данные волатильности верхнего предела.

CapSettle = datenum('1-Jun-2018');
CapMaturity = datenum({'3-Jun-2019';'1-Jun-2020';'1-Jun-2021'; ...
    '1-Jun-2022';'1-Jun-2023'});
CapVolatility = [0.0057;0.0059;0.0057;0.0053;0.0051]; % Normal volatilities
CapStrike = -0.002; % -0.2 percent strike.

Стрип-каплеты летучих веществ из кэпов с использованием модели Normal (Bachelier).

[CapletVols, CapletPaymentDates, CapStrikes] = capvolstrip(ZeroCurve, ...
    CapSettle,CapMaturity,CapVolatility,'Strike',CapStrike,'Model','normal');

PaymentDates = string(datestr(CapletPaymentDates));
format;
table(PaymentDates,CapletVols,CapStrikes)
ans=9×3 table
    PaymentDates     CapletVols    CapStrikes
    _____________    __________    __________

    "03-Jun-2019"       0.0057       -0.002  
    "02-Dec-2019"    0.0058686       -0.002  
    "01-Jun-2020"    0.0060472       -0.002  
    "01-Dec-2020"    0.0055705       -0.002  
    "01-Jun-2021"    0.0053912       -0.002  
    "01-Dec-2021"    0.0047404       -0.002  
    "01-Jun-2022"     0.004357       -0.002  
    "01-Dec-2022"    0.0046481       -0.002  
    "01-Jun-2023"    0.0044477       -0.002  

Входные аргументы

свернуть все

Кривая нулевой ставки, заданная с помощью RateSpec или IRDataCurve объект, содержащий кривую нулевой ставки для дисконтирования в соответствии с соглашением по подсчету дней. Если не указан необязательный аргумент ProjectionCurve, функция использует ZeroCurve для вычисления базовых форвардных ставок. Дата наблюдения ZeroCurve определяет дату оценки. Дополнительные сведения о создании RateSpec, см. intenvset. Дополнительные сведения о создании IRDataCurve объект, см. IRDataCurve.

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

Общая дата сопоставления, заданная как скалярный серийный номер даты или вектор символов даты. CapSettle дата не может быть раньше даты ZeroCurve дата оценки.

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

Кэп сроков, задаваемый с помощью серийных номеров дат или массива ячеек векторов символов дат в качестве NCapоколо-1 вектор.

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

Летучесть плоского колпачка, указанная как NCapоколо-1 вектор положительных десятичных разрядов.

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

Аргументы пары «имя-значение»

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

Пример: [CapletVols,CapletPaymentDates,CapStrikes] = capvolstrip(ZeroCurve,CapSettle,CapMaturity,CapVolatility,'Strike',.2)

Cap strike rate, указанная как пара, разделенная запятыми, состоящая из 'Strike' и скалярное десятичное значение или NCapletVolsоколо-1 вектор. Использовать Strike в качестве скаляра для указания одного страйка, который одинаково применим ко всем крышкам. Или укажите NCapletVolsоколо-1 вектор ударов для крышек.

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

Дата сброса и оплаты Caplet, указанная как пара, разделенная запятыми, состоящая из 'CapletDates' и NCapletDatesоколо-1 вектор с использованием серийных номеров дат или массива ячеек векторов символов даты.

Использовать CapletDates чтобы вручную указать все даты сброса и оплаты caplet. Например, некоторые интервалы дат могут быть ежеквартальными, а другие - полугодовыми. Все даты должны быть позже CapSettle и не может быть позднее последнего CapMaturity дата. Даты корректируются в соответствии с BusDayConvention и Holidays входные данные.

Если CapletDates не указан, по умолчанию автоматически генерируются периодические даты caplet после CapSettle на основе последнего CapMaturity дата в качестве ссылочной даты, используя следующие необязательные входные данные: Reset, EndMonthRule, BusDayConvention, и Holidays.

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

Частота периодических платежей в год в пределах предельного значения, определяемого как разделенная запятыми пара, состоящая из 'Reset' и положительное скалярное целое число со значениями 1,2, 3, 4, 6, или 12.

Примечание

При указании CapletDates, функция игнорирует входные данные для Reset.

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

Флаг правила конца месяца для генерации дат caplet, указанный как пара, разделенная запятыми, состоящая из 'EndMonthRule' и скалярное неотрицательное целое число [0, 1].

  • 0 = Игнорировать правило, означающее, что дата платежа всегда совпадает с числовым днем месяца.

  • 1 = Установите правило, означающее, что дата платежа всегда является последним фактическим днем месяца.

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

Соглашения о рабочих днях, указанные как пара, разделенная запятыми, состоящая из 'BusDayConvention' и вектор символов. Этот аргумент используется для определения того, как функция обращается с нерабочими днями, которые являются днями, в которые предприятия не открыты (например, выходные и официальные праздники).

  • 'actual' - Нерабочие дни фактически игнорируются. Предполагается, что денежные потоки, приходящиеся на нерабочие дни, распределяются на фактическую дату.

  • 'follow' - Денежные потоки, приходящиеся на нерабочий день, предполагается распределить на следующий рабочий день.

  • 'modifiedfollow' - Денежные потоки, приходящиеся на нерабочий день, предполагается распределить на следующий рабочий день. Однако если следующий рабочий день находится в другом месяце, вместо него используется предыдущий рабочий день.

  • 'previous' - Денежные потоки, приходящиеся на нерабочий день, предполагается распределить в предыдущий рабочий день.

  • 'modifiedprevious' - Денежные потоки, приходящиеся на нерабочий день, предполагается распределить в предыдущий рабочий день. Однако если предыдущий рабочий день находится в другом месяце, вместо него принимается следующий рабочий день.

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

Праздники, используемые в вычислительных рабочих днях, указанные как пара, разделенная запятыми, состоящая из 'Holidays' и NHolidaysоколо-1 вектор номеров дат MATLAB.

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

Кривая ставок для вычисления базовых прямых ставок, указанная как пара, разделенная запятыми, состоящая из 'ProjectionCurve' и RateSpec объект или IRDatCurve объект. Дополнительные сведения о создании RateSpec, см. intenvset. Дополнительные сведения о создании IRDataCurve объект, см. IRDataCurve.

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

Метод интерполяции предельных волатильностей на каждую дату погашения каплета перед удалением каплетных волатильностей, указанный как пара, разделенная запятыми, состоящая из 'MaturityInterpMethod' и символьный вектор со значениями: 'linear', 'nearest', 'next', 'previous', 'spline', или 'pchip'.

  • 'linear' - Линейная интерполяция. Интерполированное значение в точке запроса основано на линейной интерполяции значений в соседних точках сетки в каждом соответствующем измерении. Это метод интерполяции по умолчанию.

  • 'nearest' - интерполяция ближайшего соседа. Интерполированное значение в точке запроса - это значение в ближайшей выборочной точке сетки.

  • 'next' - интерполяция следующего соседа. Интерполированное значение в точке запроса - это значение в следующей выборочной точке сетки.

  • 'previous' - предыдущая интерполяция соседей. Интерполированное значение в точке запроса - это значение в предыдущей выборочной точке сетки.

  • 'spline' - интерполяция сплайна с использованием концевых условий без узла. Интерполированное значение в точке запроса основано на кубической интерполяции значений в соседних точках сетки в каждом соответствующем измерении.

  • 'pchip' - Фасонно-сохраняющая кусочно-кубическая интерполяция. Интерполированное значение в точке запроса основано на сохраняющей форму кусочно-кубической интерполяции значений в соседних точках сетки.

Дополнительные сведения о методах интерполяции см. в разделе interp1.

Примечание

Функция использует постоянную экстраполяцию для вычисления волатильности, выходящей за пределы диапазона данных, предоставляемых пользователем.

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

Верхняя граница интервала поиска подразумеваемой волатильности, указанная как разделенная запятыми пара, состоящая из 'Limit' и положительный скалярный десятичный знак.

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

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

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

Флажок для пропуска первого платежа caplet в кэпах, указанный как разделенная запятыми пара, состоящая из 'OmitFirstCaplet' и скалярный логический.

Если ограничения начинаются спот, первый платеж caplet опускается. Если ограничения находятся в прямом запуске, включается первый платеж caplet. Независимо от статуса кэпов, если для этого логического параметра установлено значение false, то функция включает в себя первый платеж caplet.

В целом, «спотовый лаг» - это задержка между датой фиксации и датой вступления в силу для ЛИБОР-подобных индексов. «Spot lag» определяет, является ли ограничение spot-start или forward-start (Corb, 2012). Ограничения считаются спотовым стартом, если они рассчитываются в пределах «спотового отставания» рабочих дней после даты оценки. Те, которые оседают позже, считаются стартовыми. Первый caplet опущен, если caps spot-start, в то время как он включен, если они forward-start (Tuckman, 2012).

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

Сдвиг в десятичных разрядах для сдвинутой модели SABR (для использования с моделью Shilded Black), указанной как разделенная запятыми пара, состоящая из 'Shift' и положительное скалярное десятичное значение. Установите для этого параметра положительное смещение десятичных разрядов, чтобы добавить положительное смещение к форвардной ставке и страйку, что эффективно устанавливает отрицательную нижнюю границу для форвардной ставки и страйка. Например, Shift значение 0,01 равно 1% сдвигу.

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

Модель, используемая для расчета подразумеваемой волатильности, указанная как пара, разделенная запятыми, состоящая из 'Model' и вектор скалярных символов или строковый скаляр с одним из следующих значений:

  • 'lognormal' - Подразумеваемая черная (без сдвига) или смещенная черная волатильность.

  • 'normal' - Подразумеваемая нормальная (холостяцкая) волатильность. При указании 'normal', Shift должно быть равно нулю.

capvolstrip функция поддерживает три типа волатильности.

Значение «Модель»Значение 'Shift'Тип волатильности
'lognormal'Shift = 0Черный
'lognormal'Shift > 0Сдвинутый черный
'normal'Shift = 0Нормальный (Холостяк)

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

Выходные аргументы

свернуть все

Урезанные летучие вещества каплет, возвращенные в виде NCapletVolsоколо-1 вектор десятичных разрядов.

Примечание

capvolstrip может выводить NaNs для некоторых летучих веществ каплета. Этот вывод может возникнуть, если волатильность не соответствует цене caplet, подразумеваемой данными предельного значения, предоставленными пользователем.

Даты оплаты (в номерах дат), возвращенные как NCapletVolsоколо-1 вектор номеров дат, соответствующих CapletVols.

Кэп наносит удар, возвращается как NCapletVolsоколо-1 вектор ударов в десятичных разрядах для кэпов, созревающих на соответствующем CapletPaymentDates. CapStrikes являются такими же, как удары соответствующих каплет, которые были сняты.

Ограничения

При начальной загрузке волатильности caplet из предельных значений ATM функция повторно использует волатильность caplet, снятую с более коротких предельных значений сроков в более длинных предельных значениях сроков без корректировки на разницу в страйке. capvolstrip следует упрощенному подходу, описанному в Gatarek, 2006.

Подробнее

свернуть все

Кепка

Верхний предел - это договор, который включает гарантию, устанавливающую максимальную процентную ставку, подлежащую выплате держателем, на основе плавающей процентной ставки.

Выплата за ограничение составляет:

max (CurrentRate CapRate, 0)

Дополнительные сведения см. в разделе Кепка.

At-The-Money

Колпачок или пол - это деньги (банкомат), если его страйк равен курсу прямого свопа.

Скорость прямого свопа - это фиксированная ставка свопа, которая делает текущее значение плавающей ветви равным значению фиксированной ноги. Для сравнения, кэплет или флорлет является ATM, если его страйк равен скорости прямого свопа (а не скорости прямого свопа). В целом (за исключением одного периода) ставка прямого свопа не равна ставке прямого свопа. Таким образом, если быть точным, отдельные каплеты в колпачке банкомата имеют несколько отличающиеся денежные средства и являются только приблизительно банкоматами (Alexander, 2003).

Кроме того, ставка свопа изменяется с погашением свопа. Аналогично, страйк кэпа ATM также изменяется со сроком погашения кэпа, поэтому страйки кэпа ATM вычисляются для каждого срока погашения кэпа перед удалением волатильности кэплета. В результате, при снятии летучести каплета с кэпов банкомата с возрастающими сроками погашения, удары банкомата по последовательным кэпам различны.

Ссылки

[1] Александр, С. «Общая корреляция и калибровка логнормальной модели прямой скорости». Журнал Уилмотта, 2003.

[2] Corb, H. Процентные свопы и другие деривативы. Columbia Business School Publishing, 2012.

[3] Гатарек, Д., П. Бахерт и Р. Максымюк. Модель рынка LIBOR на практике. Чичестер, Великобритания: Уайли, 2006.

[4] Такман, Б. и Серрат, А. Ценные бумаги с фиксированным доходом: инструменты для современных рынков. Хобокен, Нью-Джерси: Уайли, 2012.

Представлен в R2016a