floorvolstrip

Полосковые волатильности от плоских полов

Описание

пример

[FloorletVols,FloorletPaymentDates,FloorStrikes] = floorvolstrip(ZeroCurve,FloorSettle,FloorMaturity,FloorVolatility) полоски полоски летучести от плоских полов с помощью метода bootstrapping. Функция интерполирует волатильности прописной буквы на каждую дату оплаты половицы перед снятием волатильности полки.

пример

[FloorletVols,FloorletPaymentDates,FloorStrikes] = floorvolstrip(___,Name,Value) задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.

Примеры

свернуть все

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

ValuationDate = datenum('10-Aug-2015');
ZeroRates = [0.12 0.24 0.40 0.73 1.09 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: 736186 (10-Aug-2015)
	  Compounding: 2
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [6x1 double]
			 Data: [6x1 double]

Определите данные о волатильности пола банкомата.

FloorSettle = datenum('12-Aug-2015');
FloorMaturity = datenum({'12-Aug-2016';'14-Aug-2017';'13-Aug-2018';...
    '12-Aug-2019',;'12-Aug-2020'});
FloorVolatility = [0.31;0.39;0.43;0.42;0.40];

Полосковые полы с полов банкоматов.

[FloorletVols, FloorletPaymentDates, ATMFloorStrikes] = floorvolstrip(ZeroCurve,...
    FloorSettle, FloorMaturity, FloorVolatility);

PaymentDates = cellstr(datestr(FloorletPaymentDates));
format;
table(PaymentDates, FloorletVols, ATMFloorStrikes)
ans=9×3 table
     PaymentDates      FloorletVols    ATMFloorStrikes
    _______________    ____________    _______________

    {'12-Aug-2016'}         0.31          0.0056551   
    {'13-Feb-2017'}       0.3646          0.0073508   
    {'14-Aug-2017'}      0.41948          0.0090028   
    {'12-Feb-2018'}      0.43152           0.010827   
    {'13-Aug-2018'}      0.46351           0.012617   
    {'12-Feb-2019'}      0.40407           0.013862   
    {'12-Aug-2019'}      0.39863           0.015105   
    {'12-Feb-2020'}       0.3674           0.016369   
    {'12-Aug-2020'}      0.35371            0.01762   

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

ValuationDate = datenum('10-Jun-2015');
ZeroRates = [0.02 0.10 0.28 0.75 1.15 1.80]/100;
CurveDates = datemnth(ValuationDate, [0.25 0.5 1 2 3 5]*12);
ZeroCurve = IRDataCurve('Zero',ValuationDate,CurveDates,ZeroRates)
ZeroCurve = 
			 Type: Zero
		   Settle: 736125 (10-Jun-2015)
	  Compounding: 2
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [6x1 double]
			 Data: [6x1 double]

Задайте данные о волатильности пола.

FloorSettle = datenum('12-Jun-2015');
FloorMaturity = datenum({'13-Jun-2016';'12-Jun-2017';'12-Jun-2018';...
    '12-Jun-2019';'12-Jun-2020'});
FloorVolatility = [0.41;0.43;0.43;0.41;0.38];
FloorStrike = 0.015;

Полоска полы летучие с полов с таким же ударом.

[FloorletVols, FloorletPaymentDates, FloorStrikes] = floorvolstrip(ZeroCurve, ...
    FloorSettle, FloorMaturity, FloorVolatility, 'Strike', FloorStrike);

PaymentDates = cellstr(datestr(FloorletPaymentDates));
format;
table(PaymentDates, FloorletVols, FloorStrikes)
ans=9×3 table
     PaymentDates      FloorletVols    FloorStrikes
    _______________    ____________    ____________

    {'13-Jun-2016'}         0.41          0.015    
    {'12-Dec-2016'}         0.42          0.015    
    {'12-Jun-2017'}      0.43433          0.015    
    {'12-Dec-2017'}      0.43001          0.015    
    {'12-Jun-2018'}         0.43          0.015    
    {'12-Dec-2018'}      0.39173          0.015    
    {'12-Jun-2019'}      0.37244          0.015    
    {'12-Dec-2019'}      0.32056          0.015    
    {'12-Jun-2020'}      0.28308          0.015    

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

ValuationDate = datenum('19-May-2015');
ZeroRates = [0.02 0.07 0.23 0.63 1.01 1.60]/100;
CurveDates = datemnth(ValuationDate, [0.25 0.5 1 2 3 5]*12);
ZeroCurve = IRDataCurve('Zero',ValuationDate,CurveDates,ZeroRates)
ZeroCurve = 
			 Type: Zero
		   Settle: 736103 (19-May-2015)
	  Compounding: 2
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [6x1 double]
			 Data: [6x1 double]

Задайте данные о волатильности пола.

FloorSettle = datenum('19-May-2015');
FloorMaturity = datenum({'19-May-2016';'19-May-2017';'21-May-2018'; ...
    '20-May-2019';'19-May-2020'});
FloorVolatility = [0.39;0.42;0.43;0.42;0.40];
FloorStrike = 0.010;

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

FloorletDates = [cfdates(FloorSettle, '19-May-2016', 4)...
     cfdates('19-May-2016', '19-May-2020', 2)]'; 
FloorletDates(~isbusday(FloorletDates)) = ...
    busdate(FloorletDates(~isbusday(FloorletDates)), 'modifiedfollow');

Полосковые летучести с использованием заданных FloorletDates.

[FloorletVols, FloorletPaymentDates, FloorStrikes] = floorvolstrip(ZeroCurve, ...
    FloorSettle, FloorMaturity, FloorVolatility, 'Strike', FloorStrike, ...
    'FloorletDates', FloorletDates);

PaymentDates = cellstr(datestr(FloorletPaymentDates));
format;
table(PaymentDates, FloorletVols, FloorStrikes)
ans=11×3 table
     PaymentDates      FloorletVols    FloorStrikes
    _______________    ____________    ____________

    {'19-Nov-2015'}         0.39           0.01    
    {'19-Feb-2016'}         0.39           0.01    
    {'19-May-2016'}         0.39           0.01    
    {'21-Nov-2016'}       0.4058           0.01    
    {'19-May-2017'}       0.4307           0.01    
    {'20-Nov-2017'}      0.43317           0.01    
    {'21-May-2018'}      0.44309           0.01    
    {'19-Nov-2018'}      0.40831           0.01    
    {'20-May-2019'}      0.39831           0.01    
    {'19-Nov-2019'}       0.3524           0.01    
    {'19-May-2020'}      0.32765           0.01    

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

ValuationDate = datenum('3-May-2016');
ZeroRates = [-0.31 -0.21 -0.15 -0.10 0.009 0.19]/100;
CurveDates = datemnth(ValuationDate, [0.25 0.5 1 2 3 5]*12);
ZeroCurve = IRDataCurve('Zero',ValuationDate,CurveDates,ZeroRates)
ZeroCurve = 
			 Type: Zero
		   Settle: 736453 (03-May-2016)
	  Compounding: 2
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [6x1 double]
			 Data: [6x1 double]

Задайте данные о волатильности пола (Сдвинутый Черный).

FloorSettle = datenum('3-May-2016');
FloorMaturity = datenum({'3-May-2017';'3-May-2018';'3-May-2019'; ...
    '4-May-2020';'3-May-2021'});
FloorVolatility = [0.42;0.45;0.43;0.40;0.36]; % Shifted Black volatilities
Shift = 0.01; % 1 percent shift.
FloorStrike = -0.001; % -0.1 percent strike.

Отделите floorlet колебания от этажей, используя Перемещенную Черную Модель.

[FloorletVols, FloorletPaymentDates, FloorStrikes] = floorvolstrip(ZeroCurve, ...
FloorSettle,FloorMaturity,FloorVolatility,'Strike',FloorStrike,'Shift',Shift);

PaymentDates = string(datestr(FloorletPaymentDates));
format;
table(PaymentDates,FloorletVols,FloorStrikes)
ans=9×3 table
    PaymentDates     FloorletVols    FloorStrikes
    _____________    ____________    ____________

    "03-May-2017"         0.42          -0.001   
    "03-Nov-2017"      0.44575          -0.001   
    "03-May-2018"      0.47092          -0.001   
    "05-Nov-2018"      0.41911          -0.001   
    "03-May-2019"      0.40197          -0.001   
    "04-Nov-2019"      0.36262          -0.001   
    "04-May-2020"      0.33615          -0.001   
    "03-Nov-2020"      0.27453          -0.001   
    "03-May-2021"      0.23045          -0.001   

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

ValuationDate = datenum('1-May-2018');
ZeroRates = [-0.31 -0.27 -0.18 -0.05 0.015 0.22]/100;
CurveDates = datemnth(ValuationDate, [0.25 0.5 1 2 3 5]*12);
ZeroCurve = IRDataCurve('Zero',ValuationDate,CurveDates,ZeroRates)
ZeroCurve = 
			 Type: Zero
		   Settle: 737181 (01-May-2018)
	  Compounding: 2
			Basis: 0 (actual/actual)
	 InterpMethod: linear
			Dates: [6x1 double]
			 Data: [6x1 double]

Задайте нормальные данные по волатильности пола.

FloorSettle = datenum('1-May-2018');
FloorMaturity = datenum({'1-May-2019';'1-May-2020';'3-May-2021'; ...
    '2-May-2022';'1-May-2023'});
FloorVolatility = [0.0065;0.0067;0.0064;0.0058;0.0055]; % Normal volatilities
FloorStrike = -0.005; % -0.5 percent strike.

Полосковые волатильности полов с этажей с помощью модели Normal (Bachelier).

[FloorletVols, FloorletPaymentDates, FloorStrikes] = floorvolstrip(ZeroCurve, ...
    FloorSettle,FloorMaturity,FloorVolatility,'Strike',FloorStrike,'Model','normal');

PaymentDates = string(datestr(FloorletPaymentDates));
format;
table(PaymentDates,FloorletVols,FloorStrikes)
ans=9×3 table
    PaymentDates     FloorletVols    FloorStrikes
    _____________    ____________    ____________

    "01-May-2019"        0.0065         -0.005   
    "01-Nov-2019"     0.0066644         -0.005   
    "01-May-2020"     0.0068354         -0.005   
    "02-Nov-2020"      0.006266         -0.005   
    "03-May-2021"     0.0060101         -0.005   
    "01-Nov-2021"      0.004942         -0.005   
    "02-May-2022"     0.0042668         -0.005   
    "01-Nov-2022"     0.0047986         -0.005   
    "01-May-2023"     0.0044738         -0.005   

Входные параметры

свернуть все

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

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

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

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

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

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

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

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

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

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

Пример: [FloorletVols,FloorletPaymentDates,FloorStrikes] = floorvolstrip(ZeroCurve,FloorSettle,FloorMaturity,FloorVolatility,'Strike',.2)

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

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

Даты сброса и оплаты Floorlet, заданные как разделенная разделенными запятой парами, состоящая из 'FloorletDates' и NFloorletDates-by- 1 вектор с последовательными номерами дат или массив ячеек с векторами символов дат.

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

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

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

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

Примечание

Если вы задаете FloorletDatesфункция игнорирует вход для Reset.

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

Флаг правила конца месяца для генерации дат floorlet, заданный как разделенная разделенными запятой парами, состоящая из '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

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

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

В целом «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 floorvolstrip функция поддерживает три типа волатильности.

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

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

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

свернуть все

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

Примечание

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

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

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

Ограничения

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

Подробнее о

свернуть все

Пол

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

Выплата за этаж:

max(FloorRateCurrentRate,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