floorbyblk

Ценовые полы с использованием модели Black option pricing

Описание

пример

[FloorPrice,Floorlets] = floorbyblk(RateSpec,Strike,Settle,Maturity,Volatility) ценовые полы с использованием модели ценообразования опция. floorbyblk вычисляет цены на ванильные полы и амортизирующие полы.

пример

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

Примеры

свернуть все

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

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

% calculate the RateSpec
RateSpec = intenvset('ValuationDate', ValuationDate, ...
'StartDates', ValuationDate,'EndDates', EndDates, ...
'Rates', Rates,'Compounding', Compounding,'Basis', Basis);

Settle = 'Jan-01-2009'; % floor starts in a year
Maturity = 'April-01-2009';
Volatility = 0.20;
FloorRate = 0.06;
FloorReset = 4;
Principal=100000;

FloorPrice = floorbyblk(RateSpec, FloorRate, Settle, Maturity, Volatility,...
'Reset',FloorReset,'ValuationDate',ValuationDate,'Principal', Principal,...
'Basis', Basis)
FloorPrice = 37.4864

Определите ставки 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 = [.04;.05];
BlackVol = .2;

Оцените инструменты этажа с помощью термина structure OISCurve как для дисконтирования денежных потоков, так и для формирования будущих форвардных ставок.

[Price, Floorlets] = floorbyblk(OISCurve, Strike, Settle, Maturity, BlackVol)
Price = 2×1

    9.9808
   16.9057

Floorlets = 2×7

    3.6783    3.0706    1.8275    0.7280    0.6764       NaN       NaN
    4.6753    4.0587    2.7921    1.4763    1.3442    1.4130    1.1462

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

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

    8.0524
   14.3184

FloorletsLC = 2×7

    3.2385    2.5338    1.2895    0.5889    0.4017       NaN       NaN
    4.2355    3.5219    2.2286    1.2751    0.9169    1.1698    0.9706

Определите 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.05;
Reset = 2;
Principal ={{'15-Nov-2012' 100;'15-Nov-2013' 70;'15-Nov-2014' 40;'15-Nov-2015' 10}};

Цена амортизирующего пола.

Volatility = 0.20;
Price = floorbyblk(RateSpec, Strike, Settle, Maturity, Volatility,...
'Reset',Reset,'Principal', Principal)
Price = 1.9315

Создайте 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

Оценить пол отрицательным ударом можно используя модель Shitted Black.

Settle = 'Jun-01-2016'; % Floor starts in 3 months.
Maturity = 'Sep-01-2016';
ShiftedBlackVolatility = 0.31;
FloorRate = -0.001;  % -0.1 percent strike.
FloorReset = 4;
Principal = 100000;
Shift = 0.01; % 1 percent shift.

FloorPrice = floorbyblk(RateSpec,FloorRate,Settle,Maturity,ShiftedBlackVolatility,...
'Reset',FloorReset,'ValuationDate',ValuationDate,'Principal',Principal,...
'Basis',Basis,'Shift',Shift)
FloorPrice = 31.2099

Входные параметры

свернуть все

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

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

Тариф, по которому проводится занятие на этаже, задается как NINST-by- 1 вектор десятичных значений.

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

Дата расчета для этажа, заданная как серийный номер даты или вектор символов даты.

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

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

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

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

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

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

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

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

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

Сброс частоты оплаты в год, задается как NINST-by- 1 вектор.

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

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

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

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

Базис отсчета дней, представляющий базис, используемый при аннуализации входной форвардной скорости, заданный как NINST-by- 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

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

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

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

свернуть все

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

Floorlets, возвращается как NINST-by- NCF массив половиц, заполненных NaNс.

Подробнее о

свернуть все

Пол

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

Выплата за этаж:

max(FloorRateCurrentRate,0)

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

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

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

Алгоритмы

свернуть все

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

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