swapbyhjm

Инструмент ценового свопа из процентного дерева Heath-Jarrow-Morton

Описание

пример

[Price,PriceTree,CFTree,SwapRate] = swapbyhjm(HJMTree,LegRate,Settle,Maturity) цена своп инструмент из дерева процентных ставок Heath-Jarrow-Morton. swapbyhjm вычисляет цены ванильных свопов, амортизации свопов и форвардных свопов.

пример

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

Примеры

свернуть все

Этот пример показывает, как оценить процентный своп с фиксированной приемной стойкой и плавающей оплатой лег. платежи производятся один раз в год, а условная основная сумма составляет $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. The 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

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

Скорость ног, заданная как NINST-by- 2 матрица с каждой строкой, заданной как одна из следующих:

  • [CouponRate Spread] (с фиксированной запятой)

  • [Spread CouponRate] (с фиксированной запятой)

  • [CouponRate CouponRate] (фиксировано-фиксированное)

  • [Spread Spread] (с плавающей запятой)

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

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

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

The Settle дата для каждого свопа устанавливается в ValuationDate дерева HJM. Аргумент swap Settle игнорируется.

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

Дата зрелости, заданная как NINST-by- 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' и a NINST-by- 2 вектор.

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

Базис отсчета дней, представляющий базис для каждой ветви, заданный как разделенная разделенными запятой парами, состоящая из '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' и вектор или массив ячеек.

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

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

Тип ножки, заданный как разделенная разделенными запятой парами, состоящая из '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' и структуру, полученную при использовании derivset.

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

Флаг правила конца месяца для генерации дат при Maturity - дата конца месяца для месяца, имеющего 30 или менее дней, заданная как разделенная разделенными запятой парами, состоящая из 'EndMonthRule' и неотрицательное целое число [0, 1] использование NINST-by- 1 (или NINST-by- 2 если EndMonthRule отличается для каждой ноги).

  • 0 = Игнорировать правило, означающее, что дата платежа всегда является одним и тем же числовым днем месяца.

  • 1 = Установите правило, означающее, что дата платежа всегда является последним фактическим днем месяца.

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

Флаг для корректировки денежных потоков на основе фактического количества дней периода, заданный как разделенная разделенными запятой парами, состоящая из 'AdjustCashFlowsBasis' и a NINST-by- 1 (или NINST-by- 2 если AdjustCashFlowsBasis отличается для каждой ветви) логики со значениями 0 (false) или 1 Правда.

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

Соглашения о рабочих днях, заданные как разделенная разделенными запятой парами, состоящая из 'BusinessDayConvention' и вектор символов или N-by- 1 (или NINST-by- 2 если BusinessDayConvention различается для каждой ветви) массив ячеек из векторов символов соглашений о рабочих днях. Выбор для соглашения о рабочих днях определяет режим обработки нерабочих дней. Нерабочие дни определяются как выходные дни плюс любая другая дата, когда предприятия не открыты (например, установленные законом праздничные дни). Значения:

  • actual - Нерабочие дни фактически игнорируются. Денежные потоки, которые приходятся на нерабочие дни, считаются распределенными на фактическую дату.

  • follow - Денежные потоки, которые приходятся на нерабочий день, принимаются распределенными на следующий рабочий день.

  • modifiedfollow - Денежные потоки, которые приходятся на нерабочий день, принимаются распределенными на следующий рабочий день. Однако если следующий рабочий день находится в другом месяце, то вместо этого принимается предыдущий рабочий день.

  • previous - Денежные потоки, которые приходятся на нерабочий день, принимаются распределенными в предыдущий рабочий день.

  • modifiedprevious - Денежные потоки, которые приходятся на нерабочий день, принимаются распределенными в предыдущий рабочий день. Однако, если предыдущий рабочий день находится в другом месяце, вместо этого принимается следующий рабочий день.

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

Праздничные дни, используемые в вычислении рабочих дней, заданные как разделенная разделенными запятой парами, состоящая из 'Holidays' и номера дат MATLAB с использованием NHolidays-by- 1 вектор.

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

Обмен датой фактически начинается, задается как разделенная разделенными запятой парами, состоящая из 'StartDate' и a NINST-by- 1 вектор дат с использованием серийного номера даты или вектора символов.

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

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

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

свернуть все

Ожидаемые цены свопа в момент 0, возвращенные как NINST-by- 1 вектор.

Древовидная структура цен на приборы, возвращаемая как структура MATLAB деревьев, содержащая векторы цен на сваптирующие приборы и вектор времени наблюдения для каждого узла. Внутри PriceTree:

  • PriceTree.tObs содержит время наблюдения.

  • PriceTree.PBush содержит чистые цены.

Своп денежных потоков, возвращаемый как древовидная структура с вектором своп денежных потоков в каждом узле. Эта структура содержит только NaNs, поскольку с биномиальными рекомбинантными деревьями денежные потоки не могут быть точно вычислены в каждом узле дерева.

Тарифы, применимые к фиксированной стойке, возвращенные как NINST-by- 1 вектор скоростей, применимых к фиксированной ветви, так что значения свопов "равны нулю в момент 0. Эта ставка используется при вычислении цен свопов, когда ставка задана для фиксированного участка в LegRate является NaN. The SwapRate выход заполнен NaN для тех инструментов, в которых CouponRate не установлено в NaN.

Подробнее о

свернуть все

Амортизация свопа

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

Прямая замена

Соглашение о заключении соглашения об обмене процентными ставками на фиксированную дату в будущем.

Представлено до R2006a