capvolstrip

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

Синтаксис

[CapletVols,CapletPaymentDates,CapStrikes] = capvolstrip(ZeroCurve,CapSettle,CapMaturity,CapVolatility)
[CapletVols,CapletPaymentDates,CapStrikes] = capvolstrip(___,Name,Value)

Описание

пример

[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-by-1 вектор.

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

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

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

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

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

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

Уровень забастовки прописной буквы, заданный как пара, разделенная запятой, состоящая из 'Strike' и скалярного десятичного значения или NCapletVols-by-1 вектор. Используйте Strike в качестве скаляра, чтобы задать одну забастовку, которая применяется одинаково ко всем заглавным буквам. Или, задайте NCapletVols-by-1 вектор борьбы за прописные буквы.

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

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

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

Если 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-by-1 вектор чисел даты MATLAB.

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

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

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

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

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

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

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

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

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

  • 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-by-1 вектор десятичных чисел.

Примечание

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

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

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

Ограничения

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

Больше о

свернуть все

В деньгах

Прописная буква или пол являются в деньгах (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