exponenta event banner

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. 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около-2 с каждой строкой, определенной как одна из следующих:

  • [CouponRate Spread] (фиксированный поплавок)

  • [Spread CouponRate] (поплавковый)

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

  • [Spread Spread] (поплавок-поплавок)

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

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

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

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

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

Дата погашения, указанная как 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' и NINSTоколо-2 вектор.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

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

Подробнее

свернуть все

Амортизирующий своп

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

Перемотка вперед

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

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