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

Задайте уровни LIBOR и OIS.

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

Оцените дно с отрицательной забастовкой с помощью модели Shifted 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 вход является плоскими колебаниями, которые применяются одинаково к каждому из caplets.

Типы данных: 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 cellArray. Когда Principal NINST- 1 массив ячеек, каждым элементом является NumDates- 2 массив ячеек, где первый столбец является датами и вторым столбцом, является сопоставленной основной суммой. Дата указывает в последний день, что основное значение допустимо.

Используйте Principal передать расписание, чтобы вычислить цену за дно амортизации.

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

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

  •  0 = фактический/фактический

  •  1 = 30/360 (СИА)

  •  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 = ШИНА/252

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

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

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

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

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

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

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

свернуть все

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

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

Больше о

свернуть все

\cap

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

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

max (CurrentRateCapRate,0)

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

Переключенный черный цвет

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

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

Алгоритмы

свернуть все

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

dF=σBlackFdwcall=eγT[FN(d1)KN(d2)]put=eγT[KN(d2)FN(d1)]d1=ln(FK)+(σB22)TσBT,   d2=d1σBTσB=σBlack

Где 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