Ценовые полы с использованием модели 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
Strike
- Тариф, по которому осуществляется этажТариф, по которому проводится занятие на этаже, задается как NINST
-by- 1
вектор десятичных значений.
Типы данных: double
Settle
- Дата расчета за этажДата расчета для этажа, заданная как серийный номер даты или вектор символов даты.
Типы данных: double
| char
Maturity
- Дата зрелости для этажаДата погашения для этажа, заданная как серийный номер даты или вектор символов даты.
Типы данных: double
| char
Volatility
- Значения волатильностиЗначения волатильности, заданные как 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)
'Reset'
- Сброс частотной оплаты в год 1
(по умолчанию) | числоСброс частоты оплаты в год, задается как NINST
-by- 1
вектор.
Типы данных: double
'Principal'
- Условная основная сумма100
(по умолчанию) | числоУсловная основная сумма, заданная как NINST
-by- 1
условных основных сумм, или NINST
-by- 1
массив ячеек. Когда Principal
является NINST
-by- 1
массив ячеек, каждый элемент является NumDates
-by- 2
массив ячеек, где первый столбец является датами, а второй - связанным основным объемом. Дата указывает на последний день действия основного значения.
Использование Principal
для прохождения расписания, чтобы вычислить цену для амортизирующего пола.
Типы данных: double
| cell
'Basis'
- Основа прибора для подсчета дней0
(фактический/фактический) (по умолчанию) | целое число от 0
на 13
Базис отсчета дней, представляющий базис, используемый при аннуализации входной форвардной скорости, заданный как 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
'ProjectionCurve'
- Кривая скорости, используемая при генерации будущих форвардных ставокProjectionCurve
не задан, тогда RateSpec
используется как для дисконтирования денежных потоков, так и для прогнозирования будущих форвардных ставок (по умолчанию) | структуреКривая скорости, которая будет использоваться при генерации будущих форвардных ставок. Эта структура должна быть создана с помощью intenvset
. Используйте этот необязательный вход, если прямая кривая отличается от кривой скидки.
Типы данных: struct
'Shift'
- Сдвиг десятичных чисел для сдвинутой модели Black0
(без сдвига) (по умолчанию) | положительным десятичным числомСдвиг десятичных чисел для сдвинутой модели Black, заданный с помощью скаляра или NINST
-by- 1
вектор сдвигов скорости в положительных десятичных числах. Установите этот параметр положительный сдвиг скорости в десятичных числах, чтобы добавить положительный сдвиг к скорости передачи и удару, что фактически устанавливает отрицательную нижнюю границу для скорости передачи. Для примера, a Shift
от 0.01
равен 1% сдвигу.
Типы данных: double
FloorPrice
- Ожидаемая цена этажаОжидаемая цена этажа, возвращенная за NINST
-by- 1
вектор.
Floorlets
- ПолыFloorlets, возвращается как NINST
-by- NCF
массив половиц, заполненных NaN
с.
floor является договором, который включает гарантию, устанавливающую минимальную процентную ставку, которая должна быть получена держателем, на основе плавающей процентной ставки в противном случае.
Выплата за этаж:
Модель Shifted Black по существу совпадает с моделью черных, за исключением того, что она моделирует движения (F + Shift) в качестве базового актива, вместо F (что является форвардной ставкой в случае флорлет).
Эта модель позволяет отрицательные скорости с фиксированной отрицательной нижней границей, заданной величиной сдвига; то есть нулевая нижняя граница модели Блэка была сдвинута.
Где F - переднее значение, а K - удар.
Где F + Shift - прямое значение, а K + Shift - удар для сдвинутой версии.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.