exponenta event banner

capbyblk

Ценовые ограничения с использованием модели ценообразования опционов черного цвета

Описание

пример

[CapPrice,Caplets] = capbyblk(RateSpec,Strike,Settle,Maturity,Volatility) ценовые ограничения с использованием модели ценообразования опционов «Черный». capbyblk вычисляет цены на ванильные шапки и амортизирующие шапки.

пример

[CapPrice,Caplets] = capbyblk(___,Name,Value) добавляет необязательные аргументы пары имя-значение.

Примеры

свернуть все

Рассмотрим инвестора, который заключает контракт, ограничивающий процентную ставку по кредиту на сумму 100 000 долларов США по ставке 8% ежеквартально в течение 3 месяцев, начиная с 1 января 2009 года. Предполагая, что на 1 января 2008 года нулевая ставка составляет 6,9394%, а волатильность - 20%, используйте эти данные для расчета предельной цены. Сначала рассчитайте RateSpec:

ValuationDate = 'Jan-01-2008';
EndDates ='April-01-2010';
Rates = 0.069394;
Compounding = -1; 
Basis = 1;

RateSpec = intenvset('ValuationDate', ValuationDate, ...
'StartDates', ValuationDate,'EndDates', EndDates, ...
'Rates', Rates,'Compounding', Compounding,'Basis', Basis)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: -1
             Disc: 0.8554
            Rates: 0.0694
         EndTimes: 2.2500
       StartTimes: 0
         EndDates: 734229
       StartDates: 733408
    ValuationDate: 733408
            Basis: 1
     EndMonthRule: 1

Рассчитайте цену верхнего предела.

Settle = 'Jan-01-2009'; % cap starts in a year
Maturity = 'April-01-2009';
Volatility = 0.20;
CapRate = 0.08;
CapReset = 4;
Principal=100000;

CapPrice = capbyblk(RateSpec,  CapRate, Settle, Maturity, Volatility,...
'Reset',CapReset,'ValuationDate',ValuationDate,'Principal', Principal,...
'Basis', Basis)
CapPrice = 51.6125

Определите ставки OIS и Libor.

Settle = datenum('15-Mar-2013');
CurveDates = daysadd(Settle,360*[1/12 2/12 3/12 6/12 1 2 3 4 5 7 10],1);
OISRates = [.0018 .0019 .0021 .0023 .0031 .006  .011 .017 .021 .026 .03]';
LiborRates = [.0045 .0047 .005 .0055 .0075 .0109  .0162 .0216 .0262 .0309 .0348]';

Создание связанного RateSpec для кривых OIS и Libor.

OISCurve = intenvset('Rates',OISRates,'StartDate',Settle,'EndDates',CurveDates,'Compounding',2,'Basis',1);
LiborCurve = intenvset('Rates',LiborRates,'StartDate',Settle,'EndDates',CurveDates,'Compounding',2,'Basis',1);

Определите КИПиА.

Maturity = {'15-Mar-2018';'15-Mar-2020'};
Strike = [0.04;0.05];
BlackVol = 0.2;

Цена предельных инструментов с использованием терминологической структуры OISCurve как для дисконтирования денежных потоков, так и для создания будущих форвардных ставок.

[Price, Caplets] = capbyblk(OISCurve, Strike, Settle, Maturity, BlackVol)
Price = 2×1

    0.7472
    0.9890

Caplets = 2×7

         0    0.0000    0.0033    0.2996    0.4443       NaN       NaN
         0    0.0000    0.0003    0.1134    0.2112    0.2292    0.4349

Цена предельных инструментов с использованием терминологической структуры LiborCurve генерировать будущие форвардные ставки. Структура терминов OISCurve используется для дисконтирования денежных потоков.

[PriceLC, CapletsLC] = capbyblk(OISCurve, Strike, Settle, Maturity, BlackVol,'ProjectionCurve',LiborCurve)
PriceLC = 2×1

    1.3293
    1.6329

CapletsLC = 2×7

         0    0.0000    0.0337    0.4250    0.8706       NaN       NaN
         0    0.0000    0.0052    0.1767    0.4849    0.3663    0.5998

Определите RateSpec.

Rates = [0.0358; 0.0421; 0.0473; 0.0527; 0.0543];
ValuationDate = '15-Nov-2011';
StartDates = ValuationDate;
EndDates = {'15-Nov-2012';'15-Nov-2013';'15-Nov-2014' ;'15-Nov-2015';'15-Nov-2016'};
Compounding = 1;
RateSpec = intenvset('ValuationDate', ValuationDate,'StartDates', StartDates,...
             'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 1
             Disc: [5x1 double]
            Rates: [5x1 double]
         EndTimes: [5x1 double]
       StartTimes: [5x1 double]
         EndDates: [5x1 double]
       StartDates: 734822
    ValuationDate: 734822
            Basis: 0
     EndMonthRule: 1

Определите КИПиА.

Settle ='15-Nov-2011';
Maturity = '15-Nov-2015';
Strike = [0.03;0.035];
Reset = 1;
Principal ={{'15-Nov-2012' 100;'15-Nov-2013' 70;'15-Nov-2014' 40;'15-Nov-2015' 10}};

Цена амортизирующих ограничений.

Volatility = 0.10;  
Price = capbyblk (RateSpec, Strike, Settle, Maturity, Volatility,...
'Reset', Reset,'Principal', Principal)
Price = 2×1

    3.0339
    2.0141

Создать RateSpec.

ValuationDate = 'Mar-01-2016';
EndDates = {'Mar-01-2017';'Mar-01-2018';'Mar-01-2019';'Mar-01-2020';'Mar-01-2021'};
Rates = [-0.21; -0.12; 0.01; 0.10; 0.20]/100;
Compounding = 1;
Basis = 1;

RateSpec = intenvset('ValuationDate',ValuationDate,'StartDates',ValuationDate, ...
'EndDates',EndDates,'Rates',Rates,'Compounding',Compounding,'Basis',Basis)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 1
             Disc: [5x1 double]
            Rates: [5x1 double]
         EndTimes: [5x1 double]
       StartTimes: [5x1 double]
         EndDates: [5x1 double]
       StartDates: 736390
    ValuationDate: 736390
            Basis: 1
     EndMonthRule: 1

Оцените ограничение отрицательным ударом с помощью модели Shaded Black.

Settle = 'Jun-01-2016'; % Cap starts in 3 months.
Maturity = 'Sep-01-2016';
ShiftedBlackVolatility = 0.31;
CapRate = -0.003;  % -0.3 percent strike.
CapReset = 4;
Principal = 100000;
Shift = 0.01; % 1 percent shift.

CapPrice = capbyblk(RateSpec,CapRate,Settle,Maturity,ShiftedBlackVolatility,...
'Reset',CapReset,'ValuationDate',ValuationDate,'Principal',Principal,...
'Basis',Basis,'Shift',Shift)
CapPrice = 26.0733

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

свернуть все

Структура срока действия процентной ставки (в годовом исчислении и с постоянным усложнением), определяемая RateSpec получено из intenvset. Для получения информации о спецификации процентной ставки см. intenvset.

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

Ставка, по которой осуществляется ограничение, указанная как NINSTоколо-1 вектор десятичных значений.

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

Дата расчета для верхнего предела, указанная как порядковый номер даты или вектор символов даты.

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

Дата погашения для верхнего предела, указанная как порядковый номер даты или вектор символов даты.

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

Значения волатильности, указанные как NINSTоколо-1 вектор числовых значений.

Volatility вход не предназначен для волатильных поверхностей или кубов. При указании матрицы для Volatility вход, capbyblk внутренне преобразует его в вектор. capbyblk предполагает, что волатильность, указанная в Volatility входные данные представляют собой плоские волатильности, которые применяются одинаково к каждой из каплет.

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

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

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

Пример: [CapPrice,Caplets] = capbyblk(RateSpec,Strike,Settle,Maturity,Volatility,'Reset',CapReset,'Principal',100000,'Basis',7)

Сброс периодичности платежей в год, указанный как NINSTоколо-1 вектор.

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

Условная основная сумма, указанная как NINSTоколо-1 вектор или NINSTоколо-1 массив ячеек. Когда Principal является NINSTоколо-1 массив ячеек, каждый элемент является NumDatesоколо-2 массив ячеек, где первый столбец - даты, а второй столбец - связанная основная сумма. Дата указывает последний день, когда действительным является основное значение.

Использовать Principal для передачи графика расчета цены для амортизирующего предела.

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

База подсчета дней, представляющая базу, используемую при ежегодной оценке входной форвардной ставки, указанной как NINSTоколо-1 вектор целых чисел.

  • 0 = факт/факт

  • 1 = 30/360 (SIA)

  • 2 = фактически/360

  • 3 = факт/365

  • 4 = 30/360 (PSA)

  • 5 = 30/360 (ISDA)

  • 6 = 30/360 (европейский)

  • 7 = факт/365 (японский)

  • 8 = факт/факт (ICMA)

  • 9 = факт/360 (ICMA)

  • 10 = факт/365 (ICMA)

  • 11 = 30/360E (ICMA)

  • 12 = факт/365 (ISDA)

  • 13 = BUS/252

Дополнительные сведения см. в разделе Базис.

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

Кривая ставок, используемая при формировании будущих форвардных ставок. Эта структура должна быть создана с помощью intenvset. Используйте этот дополнительный ввод, если прямая кривая отличается от кривой скидки.

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

Сдвиг десятичных разрядов для сдвинутой модели черного, заданной скаляром или NINSTоколо-1 вектор сдвигов скорости в положительных десятичных разрядах. Установите для этого параметра положительное смещение скорости в десятичных разрядах, чтобы добавить положительное смещение к прямой скорости и страйк, что эффективно устанавливает отрицательную нижнюю границу для прямой скорости. Например, Shift из 0.01 равно 1% сдвигу.

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

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

свернуть все

Ожидаемая цена ограничения, возвращенная как NINSTоколо-1 вектор.

Caplets, возвращенный как NINSTоколо-NCF массив кэплетов, дополненных NaNs.

Подробнее

свернуть все

Кепка

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

Выплата за ограничение составляет:

max (CurrentRate CapRate, 0)

Дополнительные сведения см. в разделе Кепка.

Сдвинутый черный

Модель Shilded Black по существу такая же, как модель Black, за исключением того, что она моделирует движения (F + Shift) в качестве базового актива, а не F (что является форвардной ставкой в случае caplets).

Эта модель допускает отрицательные скорости с фиксированной отрицательной нижней границей, определяемой величиной сдвига; то есть нулевая нижняя граница модели Блэка была сдвинута.

Алгоритмы

свернуть все

Черная модель

dF = Black Fdwcall = e γ T [FN (d1) KN (d2)] пут = e γ T [KN (d2) FN (d1 ) ] d1 = ln (FK) + (σB22) T

Где F - прямое значение, а K - удар.

Сдвинутая черная модель

dF =σShifted_Black (F+Shift) dwcall=e−γT [(F+Shift) N (ds1) (K+Shift) N (ds2)] put=e−γT [(K+Shift) N (−ds2) (F+Shift) N (−ds1)] ds1=ln    (F+ShiftK+Shift) + (σsB22) TσsBT, ds2=ds1−σsBTσsB =σShifted_Black

Где F + Shift - прямое значение, а K + Shift - страйк для сдвинутой версии.

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