Инструмент ценового свопа из дерева процентных ставок Heath-Jarrow-Morton
В этом примере показано, как оценить процентный своп с фиксированным этапом получения и плавающим платежным законом. Платежи производятся один раз в год, и условная основная сумма составляет 100 долларов США. Остальные аргументы имеют следующие значения:
Купонная ставка для фиксированной трассы: 0,06 (6%)
Спред для плавающей трассы: 20 базисных точек
Дата взаиморасчета: 01 января 2000 г.
Дата погашения свопа: 01 января 2003 г.
На основе приведенной выше информации задайте требуемые аргументы и создайте LegRate, LegType, и LegReset матрицы:
Settle = '01-Jan-2000'; Maturity = '01-Jan-2003'; Basis = 0; Principal = 100; LegRate = [0.06 20]; % [CouponRate Spread] LegType = [1 0]; % [Fixed Float] LegReset = [1 1]; % Payments once per year
Оценить своп с помощью HJMTree включено в MAT-файл deriv.mat. HJMTree структура содержит информацию о времени и форвардной ставке, необходимую для оценки инструмента.
load deriv.mat;
Использовать swapbyhjm для вычисления цены свопа.
[Price, PriceTree, CFTree] = swapbyhjm(HJMTree, LegRate,... Settle, Maturity, LegReset, Basis, Principal, LegType)
Price =
3.6923
PriceTree =
FinObj: 'HJMPriceTree'
tObs: [0 1 2 3 4]
PBush: {1x5 cell}
CFTree =
FinObj: 'HJMCFTree'
tObs: [0 1 2 3 4]
CFBush: {[0] [1x1x2 double] [1x2x2 double] ... [1x8 double]}Использовать treeviewer исследовать CFTree графически и увидеть денежные потоки от свопа как по восходящей, так и по нисходящей веткам. Положительный денежный поток указывает на приток (доход - платежи > 0), а отрицательный денежный поток - на отток (доход - платежи < 0).
treeviewer(CFTree)

В этом примере вы продали своп (получить фиксированную ставку и оплатить плавающую ставку). В момент времени t = 3, если процентные ставки снижаются, ваш денежный поток является положительным ($2,63), что означает, что вы получаете эту сумму. Но если процентные ставки растут, ваш денежный поток отрицательный (- $1,58), что означает, что вы должны эту сумму.
treeviewer диаграммы дерева цен следуют условию, согласно которому возрастающие цены появляются на верхней ветви дерева, и, таким образом, понижающиеся цены появляются на нижней ветви. И наоборот, для отображения процентных ставок снижающиеся процентные ставки появляются в верхней ветви (цены растут) и возрастающие процентные ставки в нижней ветви (цены падают).
Используя предыдущие данные, вычислите ставку свопа, которая является ставкой купона для фиксированной трассы, так что цена свопа в момент времени = 0 равна нулю.
LegRate = [NaN 20]; [Price, PriceTree, CFTree, SwapRate] = swapbyhjm(HJMTree,... LegRate, Settle, Maturity, LegReset, Basis, Principal, LegType)
Price =
0
PriceTree =
FinObj: 'HJMPriceTree'
tObs: [0 1 2 3 4]
PBush:{[0] [1x1x2 double] [1x2x2 double] ... [1x8 double]}
CFTree =
FinObj: 'HJMCFTree'
tObs: [0 1 2 3 4]
CFBush:{[0] [1x1x2 double] [1x2x2 double] ... [1x8 double]}
SwapRate =
0.0466
Цена амортизирующего свопа с использованием 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}};Создайте дерево HJM, используя следующие данные:
MatDates = {'1-Jan-2012'; '1-Jan-2013';'1-Jan-2014';'1-Jan-2015';'1-Jan-2016';'1-Jan-2017'};
HJMTimeSpec = hjmtimespec(RateSpec.ValuationDate, MatDates);
Volatility = [.10; .08; .06; .04];
CurveTerm = [ 1; 2; 3; 4];
HJMVolSpec = hjmvolspec('Proportional', Volatility, CurveTerm, 1e6);
HJMT = hjmtree(HJMVolSpec,RateSpec,HJMTimeSpec);Вычислите цену амортизирующего свопа.
Price = swapbyhjm(HJMT, LegRate, Settle, Maturity, 'Principal', Principal)Price = 1.4574
Цена форвардного свопа с использованием StartDate входной аргумент для определения будущей даты начала свопа.
Создать RateSpec.
Rates = 0.0374; 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.8023
Rates: 0.0374
EndTimes: 6
StartTimes: 0
EndDates: 737061
StartDates: 734869
ValuationDate: 734869
Basis: 0
EndMonthRule: 1
Построение дерева HJM.
MatDates = {'1-Jan-2013'; '1-Jan-2014';'1-Jan-2015';'1-Jan-2016';'1-Jan-2017';'1-Jan-2018'};
HJMTimeSpec = hjmtimespec(RateSpec.ValuationDate, MatDates);
Volatility = [.10; .08; .06; .04];
CurveTerm = [ 1; 2; 3; 4];
HJMVolSpec = hjmvolspec('Proportional', Volatility, CurveTerm, 1e6);
HJMT = hjmtree(HJMVolSpec,RateSpec,HJMTimeSpec);Рассчитайте цену форвардного свопа, который начинается через год (1 января 2013 г.) и созревает через четыре года со ставкой форвардного свопа 4,25%.
Settle ='1-Jan-2012'; Maturity = '1-Jan-2017'; StartDate = '1-Jan-2013'; LegRate = [0.0425 10]; Price = swapbyhjm(HJMT, LegRate, Settle, Maturity, 'StartDate', StartDate)
Price = 1.4434
Используя предыдущие данные, вычислите ставку прямого свопа, ставку купона для фиксированной трассы, так что цена прямого свопа в момент времени = 0 равна нулю.
LegRate = [NaN 10];
[Price, ~,~, SwapRate] = swapbyhjm(HJMT, LegRate, Settle, Maturity, 'StartDate', StartDate)Price = 0
SwapRate = 0.0384
HJMTree - Структура процентных ставокДревовидная структура процентных ставок, созданная hjmtree
Типы данных: struct
LegRate - Скорость движения ногСкорость ноги, указанная как NINSTоколо-2 с каждой строкой, определенной как одна из следующих:
[CouponRate Spread] (фиксированный поплавок)
[Spread CouponRate] (поплавковый)
[CouponRate CouponRate] (фиксированный-фиксированный)
[Spread Spread] (поплавок-поплавок)
CouponRate - десятичная годовая ставка. Spread - количество базисных пунктов над эталонной скоростью. Первый столбец представляет принимающую ветвь, а второй столбец - платящую ветвь.
Типы данных: double
Settle - Дата расчетаДата расчета, указанная как скаляр или NINSTоколо-1 вектор серийных номеров дат или векторы символов дат.
Settle для каждого свопа устанавливается дата ValuationDate дерева HJM. Аргумент подкачки Settle игнорируется.
Типы данных: char | double
Maturity - Дата погашенияДата погашения, указанная как NINSTоколо-1 вектор серийных номеров дат или векторы символов дат, представляющие дату погашения для каждого свопа.
Типы данных: char | double
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
[Price,PriceTree,CFTree,SwapRate] = swapbyhjm(HJMTree,LegRate,Settle,Maturity,LegReset,Basis,Principal,LegType)'LegReset' - Частота сброса в год для каждого свопа[1 1] (по умолчанию) | векторЧастота сброса в год для каждого свопа, указанная как пара, разделенная запятыми, состоящая из 'LegReset' и NINSTоколо-2 вектор.
Типы данных: double
'Basis' - Основа подсчета дней, представляющая основу для каждого этапа0 (факт/факт) (по умолчанию) | целое число от 0 кому 13Базисный номер дня, представляющий базис для каждой ветви, определяемый как пара, разделенная запятыми, состоящая из 'Basis' и NINSTоколо-1 массив (или NINSTоколо-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около-1 вектор или NINSTоколо-1 массив ячеек (или NINSTоколо-2 если Principal отличается для каждой ветви) условных сумм основной суммы или графиков основной стоимости. Для расписаний каждый элемент массива ячеек является NumDatesоколо-2 массив, где первый столбец - даты, а второй столбец - связанное с ним условное основное значение. Дата указывает последний день, когда действительным является основное значение.
Типы данных: cell | double
'LegType' - Тип ноги[1 0] для каждого прибора (по умолчанию) | матрица со значениями [1 1] (фиксированный-фиксированный), [1 0] (фиксированный поплавок), [0 1] (поплавковый), или [0 0] (поплавок-поплавок)Тип ножки, указанный как разделенная запятыми пара, состоящая из 'LegType' и NINSTоколо-2 матрица со значениями [1 1] (фиксированный-фиксированный), [1 0] (фиксированный поплавок), [0 1] (поплавковый), или [0 0] (поплавок-поплавок). Каждая строка представляет инструмент. Каждый столбец указывает, является ли соответствующая ветвь фиксированной (1) или плавающий (0). Эта матрица определяет интерпретацию значений, введенных в LegRate. LegType позволяет [1 1] (фиксированный-фиксированный), [1 0] (фиксированный поплавок), [0 1] (поплавковый), или [0 0] (float-float) свопы
Типы данных: double
'Options' - Структура опционов на деривативыСтруктура опционов ценообразования деривативов, указанная как пара, разделенная запятыми, состоящая из 'Options' и структура, полученная при использовании derivset.
Типы данных: struct
'EndMonthRule' - флаг правила конца месяца для генерации дат, когда Maturity - дата окончания месяца, имеющего 30 или менее дней1 (в действии) (по умолчанию) | неотрицательное целое число [0,1]Флаг правила конца месяца для генерации дат при Maturity - дата окончания месяца, имеющая 30 или менее дней, указанная как пара, разделенная запятыми, состоящая из 'EndMonthRule' и неотрицательное целое число [0, 1] с использованием NINSTоколо-1 (или NINSTоколо-2 если EndMonthRule отличается для каждой ветви).
0 = Игнорировать правило, означающее, что дата платежа всегда совпадает с числовым днем месяца.
1 = Установите правило, означающее, что дата платежа всегда является последним фактическим днем месяца.
Типы данных: logical
'AdjustCashFlowsBasis' - Флажок для корректировки денежных потоков на основе фактического подсчета дней периодаfalse (по умолчанию) | значение 0 (false) или 1 ПравдаФлажок для корректировки денежных потоков на основе фактического количества дней периода, указанного как пара, разделенная запятыми, состоящая из 'AdjustCashFlowsBasis' и NINSTоколо-1 (или NINSTоколо-2 если AdjustCashFlowsBasis отличается для каждой ветви) логики со значениями 0 (false) или 1 Правда.
Типы данных: logical
'BusinessDayConvention' - Соглашения по рабочим днямactual
(по умолчанию) | символьный вектор | массив ячеек символьных векторовСоглашения о рабочих днях, указанные как пара, разделенная запятыми, состоящая из 'BusinessDayConvention' и вектор символа или Nоколо-1 (или NINSTоколо-2 если BusinessDayConvention отличается для каждого участка) массив ячеек символьных векторов соглашений о рабочих днях. Выбор соглашения о рабочих днях определяет, как обрабатываются нерабочие дни. Нерабочие дни определяются как выходные дни плюс любая другая дата, когда предприятия не открыты (например, официальные праздники). Значения:
actual - Нерабочие дни фактически игнорируются. Предполагается, что денежные потоки, приходящиеся на нерабочие дни, распределяются на фактическую дату.
follow - Денежные потоки, приходящиеся на нерабочий день, предполагается распределить на следующий рабочий день.
modifiedfollow - Денежные потоки, приходящиеся на нерабочий день, предполагается распределить на следующий рабочий день. Однако если следующий рабочий день находится в другом месяце, вместо него используется предыдущий рабочий день.
previous - Денежные потоки, приходящиеся на нерабочий день, предполагается распределить в предыдущий рабочий день.
modifiedprevious - Денежные потоки, приходящиеся на нерабочий день, предполагается распределить в предыдущий рабочий день. Однако если предыдущий рабочий день находится в другом месяце, вместо него принимается следующий рабочий день.
Типы данных: char | cell
'Holidays' - Праздники, используемые в вычислительных рабочих дняхholidays.m (по умолчанию) | Номера дат MATLAB ®Праздники, используемые в вычислительных рабочих днях, указанные как пара, разделенная запятыми, состоящая из 'Holidays' и номера дат MATLAB с использованием NHolidaysоколо-1 вектор.
Типы данных: double
'StartDate' - Дата фактического начала свопаSettle дата (по умолчанию) | серийный номер даты | символьный векторДата фактического начала свопа, указанная как пара, разделенная запятыми, состоящая из 'StartDate' и NINSTоколо-1 вектор дат с использованием серийного номера даты или символьного вектора.
Используйте этот аргумент для ценовых свопов, то есть свопов, которые начинаются в будущем
Типы данных: char | double
Price - Ожидаемые цены свопа в момент времени 0Ожидаемые цены свопа в момент времени 0, возвращенные как NINSTоколо-1 вектор.
PriceTree - Древовидная структура цен на инструментыДревовидная структура цен инструментов, возвращаемая как структура MATLAB деревьев, содержащих векторы цен инструментов свопциона и вектор времени наблюдения для каждого узла. В PriceTree:
PriceTree.tObs содержит время наблюдения.
PriceTree.PBush содержит чистые цены.
CFTree - Обменять денежные потокиДенежные потоки свопа, возвращаемые в виде древовидной структуры с вектором денежных потоков свопа в каждом узле. Эта структура содержит только NaNs, поскольку при биномиальной рекомбинации деревьев денежные потоки не могут быть точно вычислены в каждом узле дерева.
SwapRate - Ставки, применимые к фиксированной ветвиСтавки, применимые к фиксированной ветви, возвращаемые как NINSTоколо-1 вектор ставок, применимых к фиксированной ветви, так что значения свопов равны нулю в момент времени 0. Эта ставка используется при расчете цен свопов, когда ставка указана для фиксированной трассы в LegRate является NaN. SwapRate вывод дополнен NaN для тех документов, в которых CouponRate не имеет значение NaN.
В амортизирующем свопе условная основная сумма периодически уменьшается, поскольку она привязана к базовому финансовому инструменту с уменьшающимся (амортизирующим) основным балансом, таким как ипотека.
Соглашение о заключении соглашения о процентном свопе на фиксированную дату в будущем.
capbyhjm | cfbyhjm | floorbyhjm | hjmtree | treeviewer
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.