capvolstrip

Летучесть каплетки полосы от летучести плоской прописной буквы

Описание

пример

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

пример

[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

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

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

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

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

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

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. 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 чтобы вручную указать все даты сброса каплеты и платежа. Для примера некоторые интервалы дат могут быть ежеквартальными, в то время как другие могут быть полугодовыми. Все даты должны быть позже 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-by- 1 вектор номеров дат MATLAB.

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

Кривая скорости для вычисления базовых форвардных скоростей, заданная как разделенная разделенными запятой парами, состоящая из 'ProjectionCurve' и a 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» является задержкой между датой фиксации и датой вступления в силу для LIBOR-подобных индексов. «Spot lag» определяет, является ли прописная буква начальной или прямой (Corb, 2012). Предельные значения считаются спот-стартовыми, если они рассчитываются в течение рабочих дней «spot lag» после даты оценки. Те, которые оседают позже, считаются стартовыми. Первый каплет опускается, если прописные буквы являются точечными, в то время как он включается, если они начинаются вперед (Takman, 2012).

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

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

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

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

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

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

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

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

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

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

свернуть все

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

Примечание

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

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

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

Ограничения

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

Подробнее о

свернуть все

Прописная буква

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

Окупаемость для прописной буквы:

max(CurrentRateCapRate,0)

Для получения дополнительной информации см. Прописную букву.

At-The-Money

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

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

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

Ссылки

[1] Alexander, C. «Common Correlation and Calibrating the Lognormal Forward Rate Model». Wilmott Magazine, 2003.

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

[3] Gatarek, D., P. Bachert, and R. Maksymiuk. Модель рынка LIBOR на практике. Чичестер, Великобритания: Уайли, 2006.

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

Введенный в R2016a