exponenta event banner

floorvolstrip

Волатильность половых полос от волатильности плоского пола

Описание

пример

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

пример

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

Волатильность половиц с полов банкоматов.

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

Волатильность полового настила с полов с использованием сдвинутой черной модели.

[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

Общая дата расчета пола, заданная как скалярный серийный номер даты или вектор символов даты. 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

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

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

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

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

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

Примечание

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

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

Флаг правила конца месяца для генерации дат флорлета, указанный как пара, разделенная запятыми, состоящая из 'EndMonthRule' и неотрицательное целое число [0, 1].

  • 0 = Игнорировать правило, означающее, что дата платежа всегда совпадает с числовым днем месяца.

  • 1 = Установите правило, означающее, что дата платежа всегда является последним фактическим днем месяца.

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

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

  • 'actual' - Нерабочие дни фактически игнорируются. Предполагается, что денежные потоки, приходящиеся на нерабочие дни, распределяются на фактическую дату.

  • 'follow' - Денежные потоки, приходящиеся на нерабочий день, предполагается распределить на следующий рабочий день.

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

  • 'previous' - Денежные потоки, приходящиеся на нерабочий день, предполагается распределить в предыдущий рабочий день.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

Примечание

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

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

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

Ограничения

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

Подробнее

свернуть все

Пол

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

Выплата за этаж составляет:

max (FloorRate CurrentRate, 0)

At-The-Money

Колпачок или пол - это деньги (банкомат), если его страйк равен курсу прямого свопа.

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

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

Ссылки

[1] Александр, С. «Общая корреляция и калибровка логнормальной модели прямой скорости». Журнал Уилмотта, 2003.

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

[3] Гатарек, Д., П. Бахерт и Р. Максымюк. Модель рынка LIBOR на практике. Чичестер, Великобритания: Уайли, 2006.

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

Представлен в R2016a