floorvolstrip

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

Описание

пример

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

пример

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

Задайте данные об энергозависимости пола ATM.

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

Разделите floorlet колебания от этажей ATM.

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

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

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

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

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

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

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

Даты погашения пола, заданные использующие последовательные числа даты или массив ячеек векторов символов даты как NFloor- 1 вектор.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

Примечание

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

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

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

Ограничения

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

Больше о

свернуть все

Пол

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

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

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