capvolstrip

Разделите caplet колебания от плоских колебаний дна

Описание

пример

[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];

Разделите caplet колебания от дна ATM.

[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;

Разделите caplet колебания от дна с той же забастовкой.

[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');

Разделите caplet колебания с помощью, задал 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.

Разделите caplet колебания от дна с помощью Переключенной Черной Модели.

[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.

Разделите caplet колебания от дна с помощью модели 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)

Уровень забастовки дна в виде разделенной запятой пары, состоящей из '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 = Установите правило о, подразумевая, что платежный день всегда является прошлым фактическим днем месяца.

Типы данных: логический

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

  • 'actual' — Нерабочие дни эффективно проигнорированы. Потоки наличности, которые падают в нерабочие дни, приняты, чтобы быть распределенными в фактическую дату.

  • 'follow' — Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в следующий рабочий день.

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

  • 'previous' — Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в предыдущий рабочий день.

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

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

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

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

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

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

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

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

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

  • 'next' — Следующая соседняя интерполяция. Интерполированное значение в точке запроса является значением в следующем демонстрационном узле решетки.

  • 'previous' — Предыдущая соседняя интерполяция. Интерполированное значение в точке запроса является значением в предыдущем демонстрационном узле решетки.

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

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

Для получения дополнительной информации о методах интерполяции смотрите interp1.

Примечание

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

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

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

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

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

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

Отметьте, чтобы не использовать первую caplet оплату в дне в виде разделенной запятой пары, состоящей из 'OmitFirstCaplet' и логический скаляр.

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

В общем случае “точечная задержка” является задержкой между датой фиксации и датой вступления в силу подобных LIBOR индексов. "Точечная задержка" определяет, является ли дно запуском пятна или запуском форварда (Corb, 2012). Заглавные буквы считаются запуском пятна, если они обосновываются в “точечной задержке” спустя рабочие дни после даты оценки. Те, которые обосновываются позже, считаются запуском форварда. Первый caplet не использован, если дно является запуском пятна, в то время как это включено, если они - запуск форварда (Такмэн, 2012).

Типы данных: логический

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

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

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

  • 'lognormal' - Подразумеваемый Черный цвет (никакой сдвиг) или Переключенная Черная энергозависимость.

  • 'normal' - Подразумеваемая Нормальная энергозависимость (Bachelier). Если вы задаете 'normal', Shift должен быть нуль.

capvolstrip функционируйте поддерживает три типа энергозависимости.

Значение 'Модели''Переключите' ЗначениеТип энергозависимости
'lognormal'Shift= 0 Черный
'lognormal'Shift> 0 Переключенный черный цвет
'normal'Shift= 0 Нормальный (Bachelier)

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

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

свернуть все

Разделенные caplet колебания, возвращенные как NCapletVols- 1 вектор из десятичных чисел.

Примечание

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

Платежные дни (в числах даты), возвращенный как NCapletVols- 1 вектор из чисел даты, соответствующих CapletVols.

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

Ограничения

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

Больше о

свернуть все

\cap

cap является контрактом, который включает гарантию, которая устанавливает максимальную процентную ставку, которая будет заплачена держателем, на основе в противном случае плавающей процентной ставки.

Выплата для дна:

max(CurrentRateCapRate,0)

Для получения дополнительной информации смотрите Кэпа.

В деньгах

Дно или пол являются в деньгах (ATM), если его забастовка равна прямому уровню подкачки.

Прямой уровень подкачки является фиксированной процентной ставкой подкачки, которая делает приведенную стоимость плавающего участка равной тому из фиксированного участка. В сравнении, caplet или floorlet ATM, если его забастовка равна форвардному курсу (не прямой уровень подкачки). В целом (кроме за один период), форвардный курс не равен прямому уровню подкачки. Так, чтобы быть точными, отдельные caplets в дне ATM имеют немного отличающуюся денежность и являются только приблизительно ATM (Александр, 2003).

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

Ссылки

[1] Александр, C. "Общая корреляция и калибровка логарифмически нормальной модели форвардного курса". Журнал Wilmott, 2003.

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

[3] Gatarek, D., П. Бэкэрт и Р. Мэксимиук. Модель рынка LIBOR на практике. Чичестер, Великобритания: Вайли, 2006.

[4] Такмэн, B. и Serrat, A. Ценные бумаги фиксированного дохода: инструменты для сегодняшних рынков. Хобокен, NJ: Вайли, 2012.

Введенный в R2016a