floorvolstrip

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

Синтаксис

[FloorletVols,FloorletPaymentDates,FloorStrikes] = floorvolstrip(ZeroCurve,FloorSettle,FloorMaturity,FloorVolatility)
[FloorletVols,FloorletPaymentDates,FloorStrikes] = floorvolstrip(___,Name,Value)

Описание

пример

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

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

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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, чтобы вручную задать весь сброс floorlet и платежные дни. Например, некоторые интервалы даты могут быть ежеквартально, в то время как другие могут быть полугодовыми. Все даты должны быть позже, чем FloorSettle и не могут быть позже, чем последняя дата FloorMaturity. Даты настроены согласно входным параметрам Holidays и BusDayConvention.

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

Ограничения

При начальной загрузке floorlet колебаний от этажей ATM функциональные повторные использования floorlet колебания разделяются от более коротких этажей зрелости на более длинных этажах зрелости, не настраивая для различия в забастовке. floorvolstrip следует за упрощенным подходом, описанным в 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