Инструмент ценового свопа из дерева процентных ставок Black-Derman-Toy
Цена процентного свопа с фиксированной приемной ножкой и плавающей оплатой. Платежи производятся один раз в год, а условная основная сумма составляет $100. Значения для остальных аргументов:
Ставка купона для фиксированной стойки: 0.15 (15%)
Спред для плавающей ноги: 10 базисных точек
Дата урегулирования свопа: 01 января 2000 г.
Дата погашения свопа: 01 января 2003 г.
На основе приведенной выше информации установите необходимые аргументы и создайте LegRate
, LegType
, и LegReset
матрицы:
Settle = '01-Jan-2000'; Maturity = '01-Jan-2003'; Basis = 0; Principal = 100; LegRate = [0.15 10]; % [CouponRate Spread] LegType = [1 0]; % [Fixed Float] LegReset = [1 1]; % Payments once per year
Оцените своп с помощью BDTTree
входит в состав MAT-файла deriv.mat
. BDTTree
содержит информацию о времени и форвардной ставке, необходимую для оценки инструмента.
load deriv.mat;
Использование swapbybdt
для вычисления цены свопа.
Price = swapbybdt(BDTTree, LegRate, Settle, Maturity,... LegReset, Basis, Principal, LegType)
Price = 7.4222
Используя предыдущие данные, вычислите ставку свопа, ставку купона для фиксированного участка, так что цена свопа в момент = 0 равна нулю.
LegRate = [NaN 20]; [Price, PriceTree, CFTree, SwapRate] = swapbybdt(BDTTree,... LegRate, Settle, Maturity, LegReset, Basis, Principal, LegType)
Price = -1.4211e-14
PriceTree = struct with fields:
FinObj: 'BDTPriceTree'
tObs: [0 1 2 3 4]
PTree: {1x5 cell}
CFTree = struct with fields:
FinObj: 'BDTCFTree'
tObs: [0 1 2 3 4]
CFTree: {[NaN] [NaN NaN] [NaN NaN NaN] [NaN NaN NaN NaN] [NaN NaN NaN NaN]}
SwapRate = 0.1205
Оцените амортизационный своп с помощью Principal
входной параметр для определения графика амортизации.
Создайте RateSpec
.
Rates = 0.035; ValuationDate = '1-Jan-2011'; StartDates = ValuationDate; EndDates = '1-Jan-2017'; Compounding = 1; RateSpec = intenvset('ValuationDate', ValuationDate,'StartDates', StartDates,... 'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: 1
Disc: 0.8135
Rates: 0.0350
EndTimes: 6
StartTimes: 0
EndDates: 736696
StartDates: 734504
ValuationDate: 734504
Basis: 0
EndMonthRule: 1
Создайте инструмент свопа с помощью следующих данных:
Settle ='1-Jan-2011'; Maturity = '1-Jan-2017'; Period = 1; LegRate = [0.04 10];
Определите график амортизации свопов.
Principal ={{'1-Jan-2013' 100;'1-Jan-2014' 80;'1-Jan-2015' 60;'1-Jan-2016' 40; '1-Jan-2017' 20}};
Создайте дерево BDT и предположите, что волатильность составляет 10%.
MatDates = {'1-Jan-2012'; '1-Jan-2013';'1-Jan-2014';'1-Jan-2015';'1-Jan-2016';'1-Jan-2017'}; BDTTimeSpec = bdttimespec(ValuationDate, MatDates); Volatility = 0.10; BDTVolSpec = bdtvolspec(ValuationDate, MatDates, Volatility*ones(1,length(MatDates))'); BDTT = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec);
Вычислите цену амортизирующего свопа.
Price = swapbybdt(BDTT, LegRate, Settle, Maturity, 'Principal' , Principal)
Price = 1.4574
Оцените форвардный своп с помощью StartDate
входной параметр для определения будущей начальной даты свопа.
Создайте RateSpec
.
Rates = 0.0325; ValuationDate = '1-Jan-2012'; StartDates = ValuationDate; EndDates = '1-Jan-2018'; Compounding = 1; RateSpec = intenvset('ValuationDate', ValuationDate,'StartDates', StartDates,... 'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding)
RateSpec = struct with fields:
FinObj: 'RateSpec'
Compounding: 1
Disc: 0.8254
Rates: 0.0325
EndTimes: 6
StartTimes: 0
EndDates: 737061
StartDates: 734869
ValuationDate: 734869
Basis: 0
EndMonthRule: 1
Построение дерева с волатильностью 10%.
MatDates = {'1-Jan-2013'; '1-Jan-2014';'1-Jan-2015';'1-Jan-2016';'1-Jan-2017';'1-Jan-2018'}; BDTTimeSpec = bdttimespec(ValuationDate, MatDates); Volatility = 0.10; BDTVolSpec = bdtvolspec(ValuationDate, MatDates, Volatility*ones(1,length(MatDates))'); BDTT = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec);
Рассчитать цену форвардного свопа, который начинается через два года (1 января 2014 г.) и созревает через три года со ставкой форвардного свопа 3,85%.
Settle ='1-Jan-2012'; Maturity = '1-Jan-2017'; StartDate = '1-Jan-2014'; LegRate = [0.0385 10]; Price = swapbybdt(BDTT, LegRate, Settle, Maturity, 'StartDate', StartDate)
Price = 1.3203
Используя предыдущие данные, вычислите ставку форвардного свопа, ставку купона для фиксированного участка, так что цена форвардного свопа в момент = 0 равна нулю.
LegRate = [NaN 10];
[Price, ~,~, SwapRate] = swapbybdt(BDTT, LegRate, Settle, Maturity, 'StartDate', StartDate)
Price = -4.5191e-12
SwapRate = 0.0335
BDTTree
- Структура процентной ставкиДревовидная структура процентной ставки, созданная bdttree
Типы данных: struct
LegRate
- Скорость ногСкорость ног, заданная как NINST
-by- 2
матрица с каждой строкой, заданной как одна из следующих:
[CouponRate Spread]
(с фиксированной запятой)
[Spread CouponRate]
(с фиксированной запятой)
[CouponRate CouponRate]
(фиксировано-фиксированное)
[Spread Spread]
(с плавающей запятой)
CouponRate
- десятичный годовой темп. Spread
количество базисных точек по скорости ссылки. Первый столбец представляет приемную ветвь, а второй столбец представляет платежную ветвь.
Типы данных: double
Settle
- Дата расчетаДата расчета, заданная в виде скаляра или NINST
-by- 1
вектор серийных номеров дат или векторов символов дат.
The Settle
дата для каждого свопа устанавливается в ValuationDate
дерева BDT. Аргумент swap Settle
игнорируется.
Типы данных: char
| double
Maturity
- Дата погашенияДата зрелости, заданная как NINST
-by- 1
вектор серийных номеров дат или векторов символов дат, представляющих дату погашения для каждого свопа.
Типы данных: char
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
[Price,PriceTree,CFTree,SwapRate] = swapbybdt(BDTTree,LegRate,Settle,Maturity,LegReset,Basis,Principal,LegType)
'LegReset'
- Частота сброса в год для каждого свопа[1 1]
(по умолчанию) | векторЧастота сброса в год для каждого свопа, заданная как разделенная разделенными запятой парами, состоящая из 'LegReset'
и a NINST
-by- 2
вектор.
Типы данных: double
'Basis'
- базис подсчета дней, представляющая базис для каждого этапа0
(фактический/фактический) (по умолчанию) | целое число от 0
на 13
Базис отсчета дней, представляющий базис для каждой ветви, заданный как разделенная разделенными запятой парами, состоящая из 'Basis'
и a NINST
-by- 1
массив (или NINST
-by- 2
если Basis
отличается для каждой ноги).
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
'Principal'
- Условные суммы основной суммы или графики основного значения100
(по умолчанию) | вектор или массив ячеекУсловные суммы основной суммы или расписания основного значения, заданные как разделенная разделенными запятой парами, состоящая из 'Principal'
и вектор или массив ячеек.
Principal
принимает NINST
-by- 1
вектор или NINST
-by- 1
массив ячеек (или NINST
-by- 2
если Principal
отличается для каждой ветви) от условных сумм основной суммы или графиков основного значения. Для расписаний каждый элемент массива ячеек является NumDates
-by- 2
массив, где первый столбец является датами, а второй - его сопоставленным условным основным значением. Дата указывает на последний день действия основного значения.
Типы данных: cell
| double
'LegType'
- Тип ножки[1 0]
для каждого инструмента (по умолчанию) | матрица со значениями [1 1]
(фиксированно-фиксированное), [1 0]
(с фиксированной запятой), [0 1]
(с фиксированной запятой), или [0 0]
(с плавающей запятой)Тип ножки, заданный как разделенная разделенными запятой парами, состоящая из 'LegType'
и a NINST
-by- 2
матрица со значениями [1 1]
(фиксированно-фиксированное), [1 0]
(с фиксированной запятой), [0 1]
(с фиксированной запятой), или [0 0]
(с плавающей запятой). Каждая строка представляет инструмент. Каждый столбец указывает, является ли соответствующая стойка фиксированной (1
) или плавающий (0
). Эта матрица определяет интерпретацию значений, введенных в LegRate
. LegType
позволяет [1 1]
(фиксированно-фиксированное), [1 0]
(с фиксированной запятой), [0 1]
(с фиксированной запятой), или [0 0]
(с плавающей запятой) свопы
Типы данных: double
'Options'
- Структура деривативных опционов ценообразованияСтруктура опций ценообразования производных, заданная как разделенная разделенными запятой парами, состоящая из 'Options'
и структуру, полученную при использовании derivset
.
Типы данных: struct
'EndMonthRule'
- Флаг правила конца месяца для генерации дат при Maturity
является датой конца месяца для месяца, имеющего 30 или менее дней1
(в действии) (по умолчанию) | неотрицательное целое число [0,1]
Флаг правила конца месяца для генерации дат при Maturity
- дата конца месяца для месяца, имеющего 30 или менее дней, заданная как разделенная разделенными запятой парами, состоящая из 'EndMonthRule'
и неотрицательное целое число [0
, 1
] использование NINST
-by- 1
(или NINST
-by- 2
если EndMonthRule
отличается для каждой ноги).
0
= Игнорировать правило, означающее, что дата платежа всегда является одним и тем же числовым днем месяца.
1
= Установите правило, означающее, что дата платежа всегда является последним фактическим днем месяца.
Типы данных: logical
'AdjustCashFlowsBasis'
- Флаг для корректировки денежных потоков на основе фактического количества дней периодаfalse
(по умолчанию) | значение 0
(false) или 1
ПравдаФлаг для корректировки денежных потоков на основе фактического количества дней периода, заданный как разделенная разделенными запятой парами, состоящая из 'AdjustCashFlowsBasis'
и a NINST
-by- 1
(или NINST
-by- 2
если AdjustCashFlowsBasis
отличается для каждой ветви) логики со значениями 0
(false) или 1
Правда.
Типы данных: logical
'BusinessDayConvention'
- Договоры о рабочих дняхactual
(по умолчанию) | вектор символов | массив ячеек из векторов символовСоглашения о рабочих днях, заданные как разделенная разделенными запятой парами, состоящая из 'BusinessDayConvention'
и вектор символов или N
-by- 1
(или NINST
-by- 2
если BusinessDayConvention
отличается для каждой ветви) массив ячеек из векторов символов соглашений о рабочих днях. Выбор для соглашения о рабочих днях определяет режим обработки нерабочих дней. Нерабочие дни определяются как выходные дни плюс любая другая дата, когда предприятия не открыты (например, установленные законом праздничные дни). Значения:
actual
- Нерабочие дни фактически игнорируются. Денежные потоки, которые приходятся на нерабочие дни, считаются распределенными на фактическую дату.
follow
- Денежные потоки, которые приходятся на нерабочий день, принимаются распределенными на следующий рабочий день.
modifiedfollow
- Денежные потоки, которые приходятся на нерабочий день, принимаются распределенными на следующий рабочий день. Однако если следующий рабочий день находится в другом месяце, то вместо этого принимается предыдущий рабочий день.
previous
- Денежные потоки, которые приходятся на нерабочий день, принимаются распределенными в предыдущий рабочий день.
modifiedprevious
- Денежные потоки, которые приходятся на нерабочий день, принимаются распределенными в предыдущий рабочий день. Однако, если предыдущий рабочий день находится в другом месяце, вместо этого принимается следующий рабочий день.
Типы данных: char
| cell
'Holidays'
- Праздничные дни, используемые в рабочих дняхholidays.m
(по умолчанию) | MATLAB® номера датПраздничные дни, используемые в вычислении рабочих дней, заданные как разделенная разделенными запятой парами, состоящая из 'Holidays'
и номера дат MATLAB с использованием NHolidays
-by- 1
вектор.
Типы данных: double
'StartDate'
- Обмен датой фактически начинаетсяSettle
дата (по умолчанию) | серийный номер даты | вектор символовОбмен датой фактически начинается, задается как разделенная разделенными запятой парами, состоящая из 'StartDate'
и a NINST
-by- 1
вектор дат с использованием серийного номера даты или вектора символов.
Используйте этот аргумент для ценовых форвардных свопов, то есть свопов, которые начинаются в будущую дату
Типы данных: char
| double
Price
- Ожидаемые цены свопа на момент 0Ожидаемые цены свопа в момент 0, возвращенные как NINST
-by- 1
вектор.
PriceTree
- Древовидная структура цен на приборыДревовидная структура цен на приборы, возвращаемая как структура MATLAB деревьев, содержащая векторы цен на сваптирующие приборы и вектор времени наблюдения для каждого узла. Внутри PriceTree
:
PriceTree.PTree
содержит чистые цены.
PriceTree.tObs
содержит время наблюдения.
CFTree
- Обмен денежными потокамиСвоп денежных потоков, возвращаемый как древовидная структура с вектором своп денежных потоков в каждом узле. Эта структура содержит только NaN
s, поскольку с биномиальными рекомбинантными деревьями денежные потоки не могут быть точно вычислены в каждом узле дерева.
SwapRate
- Ставки, применимые к фиксированной стойкеТарифы, применимые к фиксированной стойке, возвращенные как NINST
-by- 1
вектор скоростей, применимых к фиксированной ветви, так что значения свопов "равны нулю в момент 0. Эта ставка используется при вычислении цен свопов, когда ставка задана для фиксированного участка в LegRate
является NaN
. The SwapRate
выход заполнен NaN
для тех инструментов, в которых CouponRate
не установлено в NaN
.
При амортизации свопа условный принципал периодически уменьшается, потому что он привязан к базовому финансовому инструменту со снижающимся (амортизирующим) основным балансом, таким как ипотека.
Соглашение о заключении соглашения об обмене процентными ставками на фиксированную дату в будущем.
bdttree
| capbybdt
| cfbybdt
| floorbybdt
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.