Понимание моделей дерева процентных ставок

Введение

Financial Instruments Toolbox™ поддерживает следующие деревья процентных ставок:

  • Black-Derman-Toy (BDT)

  • Чёрно-Карасинский (БК)

  • Хит-Джарроу-Мортон (HJM)

  • Корпус-белый (HW)

  • Кокс-Ингерсолл-Росс (CIR)

Модель Хита-Джарроу-Мортона является одной из наиболее широко используемых моделей для ценообразования производных по процентным ставкам. Модель рассматривает данную первоначальную срочную структуру процентных ставок и спецификацию волатильности форвардных ставок для построения дерева, представляющего эволюцию процентных ставок, на основе статистического процесса. Для получения дополнительных объяснений смотрите книгу «Моделирование ценных бумаг с фиксированным доходом и процентных ставок» Роберта А. Джарроу.

Модель Black-Derman-Toy является другой аналитической моделью, обычно используемой для ценообразования производных по процентным ставкам. Модель рассматривает данную исходную структуру процентных ставок нулевой ставки и спецификацию волатильности выражения длинных ставок, чтобы построить дерево, представляющее эволюцию процентных ставок. Для получения дополнительных объяснений смотрите документ «Один фактор Модели процентных ставок и его применение к Опциям казначейских облигаций» Фишера Блэка, Эмануэля Дермана и Уильяма Тоя.

Модель Халла-Уайта включает начальную срочную структуру процентных ставок и структуру срока волатильности для построения триномиального дерева рекомбинации коротких ставок. Получившееся дерево используется для оценки ценных бумаг, зависящих от процентной ставки. Реализация модели Халла-Уайта в программном обеспечении Financial Instruments Toolbox ограничена одним фактором.

Модель Black-Karasinski является однофакторной, логарифмически-нормальной версией модели Hull-White.

Для получения дополнительной информации о моделях Hull-White и Black-Karasinski, смотрите книгу Options, Futures, and Other Derivatives by John C. Hull.

Создание дерева форвардных ставок

Дерево форвардных ставок является основным модулем, представляющей эволюцию процентных ставок в установленный период времени. В этом разделе описывается создание дерева форвардных ставок с помощью Financial Instruments Toolbox.

Примечание

Чтобы избежать ненужного повторения, этот документ использует модели HJM и BDT, чтобы проиллюстрировать создание и использование деревьев процентных ставок. Модели HW и BK аналогичны модели BDT. Там, где существуют определенные различия, они документируются в древовидных структурах HW и BK.

MATLAB® функции, которые создают деревья скорости, hjmtree и bdttree. hjmtree функция создает структуру, HJMTree, содержащая информацию о времени и прямой скорости для густого дерева. bdttree функция создает подобную структуру, BDTTree, для дерева рекомбинирования.

Эта структура является автономным модулем, которая включает дерево скоростей (найдено в FwdTree поле структуры) и спецификации волатильности, скорости и времени, используемые при создании этого дерева.

Эти функции берут три структуры как входные параметры:

Легкий способ визуализировать любые деревья, которые вы создаете, - это treeviewer функция, которая отображает деревья в графическом виде. Смотрите Графическое представление деревьев для получения информации о treeviewer.

Последовательность вызовов

Синтаксис вызова для hjmtree является HJMTree = hjmtree(VolSpec, RateSpec, TimeSpec).

Точно так же синтаксис вызова для bdttree является BDTTree = bdttree(VolSpec, RateSpec, TimeSpec).

Каждая из этих функций требует VolSpec, RateSpec, и TimeSpec входные параметры:

  • VolSpec является структурой, которая задает процесс волатильности прямой скорости. Вы создаете VolSpec использование любой из функций hjmvolspec или bdtvolspec.

    hjmvolspec функция поддерживает спецификацию до трех факторов. Он обрабатывает эти модели для волатильности структуры процентных ставок:

    • Постоянный

    • Постоянный

    • Экспоненциал

    • Вашичек

    • Пропорциональный

    Однофакторная модель принимает, что на структуру процентного термина влияет один источник неопределенности. Включение нескольких факторов позволяет вам задавать различные типы сдвигов в форме и местоположении структуры процентной ставки. Посмотрите hjmvolspec для получения дополнительной информации.

    bdtvolspec функция поддерживает только один коэффициент волатильности. Волатильность остается постоянной между парами узлов на дереве. Вы задаете значения входа волатильности в векторе десятичных значений. Посмотрите bdtvolspec для получения дополнительной информации.

  • RateSpec - спецификация процентной ставки для кривой начальной ставки. Вы создаете эту структуру с функцией intenvset. (См. Моделирование структуры терминов процентной ставки.)

  • TimeSpec - спецификация древовидного временного размещения. Вы создаете эту переменную с функциями hjmtimespec или bdttimespec. Он представляет отображение между временем уровня и датами уровня для ценового предложения. Эта структура косвенно определяет количество уровней в дереве.

Определение модели волатильности (VolSpec)

Поскольку HJM поддерживает многофакторные (до 3) модели волатильности, в то время как BDT (также, BK и HW) поддерживает только один коэффициент волатильности, hjmvolspec и bdtvolspec функции требуют различных входов и генерируют несколько другие выходы. Для примеров смотрите Создание модели волатильности HJM. Для примеров BDT смотрите Создание модели волатильности BDT.

Создание модели волатильности HJM

Функция hjmvolspec генерирует структуру VolSpec, который определяет процесс волатильности σ(t,T) используется при создании передовых деревьев. В этом контексте T капитала представляет время запуска прямой скорости, а t представляет время наблюдения. Процесс волатильности может быть построен из комбинации факторов, последовательно заданных в вызове функции, которая создает его. Каждая спецификация фактора начинается с вектора символов, задающего имя фактора, за которым следуют соответствующие параметры.

Пример спецификации волатильности HJM.  Рассмотрим пример, который использует один коэффициент, в частности, коэффициент константы-сигмы. Спецификация постоянного фактора требует только один параметр, значение σ. В этом случае значение соответствует 0,10.

HJMVolSpec = hjmvolspec('Constant', 0.10)
HJMVolSpec = 

      FinObj: 'HJMVolSpec'
FactorModels: {'Constant'}
  FactorArgs: {{1x1 cell}}
  SigmaShift: 0
  NumFactors: 1
   NumBranch: 2
     PBranch: [0.5000 0.5000]
 Fact2Branch: [-1 1]

The NumFactors поле VolSpec структура, VolSpec.NumFactors = 1, показывает, что количество факторов, используемых для генерации VolSpec был один. The FactorModels поле указывает, что это Constant коэффициент и NumBranches поле указывает количество ветвей. Как следствие, каждый узел получившегося дерева имеет две ветви, одна идет вверх, а другая идет вниз.

Рассмотрим теперь процесс двухфакторной волатильности, полученный из пропорционального фактора и экспоненциального фактора.

% Exponential factor
Sigma_0 = 0.1;
Lambda = 1;
% Proportional factor
CurveProp = [0.11765; 0.08825; 0.06865];
CurveTerm = [   1   ;    2   ;    3   ];
% Build VolSpec
HJMVolSpec = hjmvolspec('Proportional', CurveProp, CurveTerm,...
1e6,'Exponential', Sigma_0, Lambda)
HJMVolSpec = 

      FinObj: 'HJMVolSpec'
FactorModels: {'Proportional'  'Exponential'}
  FactorArgs: {{1x3 cell}  {1x2 cell}}
  SigmaShift: 0
  NumFactors: 2
   NumBranch: 3
     PBranch: [0.2500 0.2500 0.5000]
 Fact2Branch: [2x3 double]

Этот выход показывает, что спецификация волатильности была сгенерирована с использованием двух факторов. Дерево имеет по три ветви на узел. Каждая ветвь имеет вероятности 0,25, 0,25 и 0,5, идущие сверху вниз.

Создание модели волатильности BDT

Функция bdtvolspec генерирует структуру VolSpec, который задает процесс волатильности. Функция требует трех входных параметров:

  • Дата оценки ValuationDate

  • Даты окончания волатильности выражения VolDates

  • Значения волатильности выражения VolCurve

Необязательный четвертый аргумент InterpMethod, задающий метод интерполяции, может быть включен.

Синтаксис, используемый для вызова bdtvolspec является:

BDTVolSpec = bdtvolspec(ValuationDate, VolDates, VolCurve,... InterpMethod)

где:

  • ValuationDate - первая дата наблюдения в дереве.

  • VolDates является вектором дат, представляющих даты окончания волатильности выражения.

  • VolCurve является вектором значений волатильности выражения.

  • InterpMethod - используемый метод интерполяции. Значение по умолчанию является linear.

Пример спецификации волатильности БДТ.  Рассмотрим следующий пример:

ValuationDate = datenum('01-01-2000');
EndDates = datenum(['01-01-2001'; '01-01-2002'; '01-01-2003'; 
'01-01-2004'; '01-01-2005']);
Volatility = [.2; .19; .18; .17; .16];

Использовать bdtvolspec чтобы создать спецификацию волатильности. Поскольку метод интерполяции явным образом не задан, функция использует linear по умолчанию.

BDTVolSpec = bdtvolspec(ValuationDate, EndDates, Volatility)
BDTVolSpec = 
             FinObj: 'BDTVolSpec'
      ValuationDate: 730486
           VolDates: [5x1 double]
           VolCurve: [5x1 double]
    VolInterpMethod: 'linear'

Определение структуры терминов процентной ставки (RateSpec)

Структура RateSpec является структурой процентного термина, которая определяет исходную спецификацию форвардной ставки, из которой получают древовидные ставки. Моделирование структуры процентных ставок объясняет, как создать эти структуры с помощью функции intenvset, учитывая процентные ставки, начальную и конечную даты для каждой ставки и сложное значение.

Пример создания спецификаций скорости

Рассмотрим следующий пример:

Compounding = 1;
Rates = [0.02; 0.02; 0.02; 0.02];
StartDates = ['01-Jan-2000';   
              '01-Jan-2001';  
              '01-Jan-2002';  
              '01-Jan-2003'];
EndDates =   ['01-Jan-2001'; 
              '01-Jan-2002';  
              '01-Jan-2003'; 
              '01-Jan-2004'];
ValuationDate = '01-Jan-2000';

RateSpec = intenvset('Compounding',1,'Rates', Rates,... 
'StartDates', StartDates, 'EndDates', EndDates,... 
'ValuationDate', ValuationDate)
RateSpec = 

        FinObj: 'RateSpec'
   Compounding: 1
          Disc: [4x1 double]
         Rates: [4x1 double]
      EndTimes: [4x1 double]
    StartTimes: [4x1 double]
      EndDates: [4x1 double]
    StartDates: [4x1 double]
 ValuationDate: 730486
         Basis: 0
  EndMonthRule: 1

Используйте функцию datedisp для изучения дат, определенных в переменной RateSpec. Для примера:

datedisp(RateSpec.ValuationDate)
01-Jan-2000

Определение временной структуры (TimeSpec)

Структура TimeSpec определяет структуру времени для дерева процентных ставок. Эта структура определяет отображение между временем наблюдения на каждом уровне дерева и соответствующими датами.

TimeSpec создается с использованием либо hjmtimespec или bdttimespec функция. Эти функции требуют трёх входных параметров:

  • Дата оценки ValuationDate

  • Дата погашения Maturity

  • Скорость компаундирования Compounding

Для примера синтаксис, используемый для вызова hjmtimespec является

TimeSpec = hjmtimespec(ValuationDate, Maturity, Compounding)

где:

  • ValuationDate - первая дата наблюдения в дереве.

  • Maturity является вектором дат, представляющих даты денежного потока дерева. Любые денежные потоки инструментов с этими сроками приходятся на узлы дерева.

  • Compounding - частота, с которой скорости суммируются в годовом исчислении.

Создание спецификации времени

Вызов функций создания спецификаций времени с теми же данными, которые используются для создания структуры процентных ставок, RateSpec создает структуру, которая задает временное размещение для дерева.

Пример спецификации времени HJM.  Рассмотрим следующий пример:

Maturity = EndDates;
HJMTimeSpec = hjmtimespec(ValuationDate, Maturity, Compounding)
HJMTimeSpec = 

       FinObj: 'HJMTimeSpec'
ValuationDate: 730486
     Maturity: [4x1 double]
  Compounding: 1
        Basis: 0
 EndMonthRule: 1

Сроки, заданные при построении TimeSpec не обязательно совпадать с EndDates интервалов скоростей в RateSpec. Начиная с TimeSpec определяет отображение дерева на дату времени, скорости в RateSpec интерполируются, чтобы получить начальные ставки со сроками, равными значениям в TimeSpec.

Создание спецификации времени BDT.  Рассмотрим следующий пример:

Maturity = EndDates;
BDTTimeSpec = bdttimespec(ValuationDate, Maturity, Compounding)
BDTTimeSpec = 

           FinObj: 'BDTTimeSpec'
    ValuationDate: 730486
         Maturity: [4x1 double]
      Compounding: 1
            Basis: 0
     EndMonthRule: 1

Создание деревьев

Используйте VolSpec, RateSpec, и TimeSpec Вы ранее создали в качестве входов функции, используемые для создания деревьев HJM и BDT.

Создание дерева HJM

% Reset the volatility factor to the Constant case
HJMVolSpec = hjmvolspec('Constant', 0.10);

HJMTree = hjmtree(HJMVolSpec, RateSpec, HJMTimeSpec)
HJMTree = 

  FinObj: 'HJMFwdTree'
 VolSpec: [1x1 struct]
TimeSpec: [1x1 struct]
RateSpec: [1x1 struct]
    tObs: [0 1 2 3]
    TFwd: {[4x1 double] [3x1 double] [2x1 double] [3]}
  CFlowT: {[4x1 double] [3x1 double] [2x1 double] [4]}
 FwdTree:{[4x1 double][3x1x2 double][2x2x2 double][1x4x2 double]}

Создание дерева BDT

Теперь используйте ранее вычисленные значения для VolSpec, RateSpec, и TimeSpec как вход в функцию bdttree для создания дерева BDT.

BDTTree = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec)
BDTTree = 

  FinObj: 'BDTFwdTree'
 VolSpec: [1x1 struct]
TimeSpec: [1x1 struct]
RateSpec: [1x1 struct]
    tObs: [0 1.00 2.00 3.00]
    TFwd: {[4x1 double]  [3x1 double]  [2x1 double]  [3.00]}
  CFlowT: {[4x1 double]  [3x1 double]  [2x1 double]  [4.00]}
 FwdTree: {[1.02] [1.02 1.02] [1.01 1.02 1.03] [1.01 1.02 1.02 1.03]}

Исследование деревьев

При работе с моделями Financial Instruments Toolbox использует деревья для представления форвардных ставок, цен и так далее. На самом высоком уровне эти деревья имеют обернутые вокруг них конструкции. Структуры инкапсулируют информацию, необходимую для полной интерпретации информации, содержащейся в дереве.

Рассмотрим этот пример, который использует данные процентной ставки и портфеля в MAT-файле deriv.mat включено в тулбокс.

Загрузите данные в рабочее пространство MATLAB.

load deriv.mat

Отображение списка переменных, загруженных из MAT-файла.

whos
 Name              Size            Bytes  Class     Attributes

  BDTInstSet        1x1             15956  struct              
  BDTTree           1x1              5138  struct              
  BKInstSet         1x1             15946  struct              
  BKTree            1x1              5904  struct              
  CRRInstSet        1x1             12434  struct              
  CRRTree           1x1              5058  struct              
  EQPInstSet        1x1             12434  struct              
  EQPTree           1x1              5058  struct              
  HJMInstSet        1x1             15948  struct              
  HJMTree           1x1              5838  struct              
  HWInstSet         1x1             15946  struct              
  HWTree            1x1              5904  struct              
  ITTInstSet        1x1             12438  struct              
  ITTTree           1x1              8862  struct              
  ZeroInstSet       1x1             10282  struct              
  ZeroRateSpec      1x1              1580  struct         

Древовидная структура HJM

Теперь можно детально изучить содержимое HJMTree структура, содержащаяся в этом файле.

HJMTree
HJMTree = 

  FinObj: 'HJMFwdTree'
 VolSpec: [1x1 struct]
TimeSpec: [1x1 struct]
RateSpec: [1x1 struct]
    tObs: [0 1 2 3]
    TFwd: {[4x1 double]  [3x1 double]  [2x1 double]  [3]}
  CFlowT: {[4x1 double]  [3x1 double]  [2x1 double] [4]}
 FwdTree:{[4x1 double][3x1x2 double][2x2x2 double][1x4x2 double]}

FwdTree содержит фактическое дерево скорости передачи. MATLAB представляет его как массив ячеек с каждым элементом массива ячеек, содержащим древовидный уровень.

Другие поля содержат другую информацию, относящуюся к интерпретации значений в FwdTree. Самые важные из них VolSpec, TimeSpec, и RateSpec, которые содержат информацию о волатильности, временной структуре и структуре скорости, соответственно.

Первый узел.  Наблюдайте форвардные скорости в FwdTree. Первый узел представляет дату оценки, tObs = 0.

HJMTree.FwdTree{1}
ans =

   1.0356
   1.0468
   1.0523
   1.0563

Примечание

Financial Instruments Toolbox использует обозначение обратной скидки для форвардных ставок в дереве. Обратная скидка представляет собой коэффициент, на который умножается текущее значение актива, чтобы найти его будущее значение. В целом эти форвардные факторы являются взаимными факторами коэффициентов дисконтирования.

Присмотритесь к RateSpec структура, используемая при генерации этого дерева, чтобы увидеть, где берутся эти значения. Расположите значения в одном массиве.

[HJMTree.RateSpec.StartTimes HJMTree.RateSpec.EndTimes... 
HJMTree.RateSpec.Rates]
ans =

         0    1.0000    0.0356
    1.0000    2.0000    0.0468
    2.0000    3.0000    0.0523
    3.0000    4.0000    0.0563

При обнаружении соответствующих обратных скидок процентных ставок в третьем столбце значения указываются в первом узле дерева. Вы можете превратить процентные ставки в обратные скидки с помощью функции rate2disc.

Disc = rate2disc(HJMTree.TimeSpec.Compounding,... 
HJMTree.RateSpec.Rates, HJMTree.RateSpec.EndTimes,... 
HJMTree.RateSpec.StartTimes);
FRates = 1./Disc
FRates =
    1.0356
    1.0468
    1.0523
    1.0563

Второй узел.  Второй узел представляет время наблюдения первой скорости,   tObs = 1. Этот узел отображает два состояния: одно, представляющее ветвь, идущую вверх, и другое, представляющее ветвь, идущую вниз.

Обратите внимание, что HJMTree.VolSpec.NumBranch = 2.

HJMTree.VolSpec
ans = 

          FinObj: 'HJMVolSpec'
    FactorModels: {'Constant'}
      FactorArgs: {{1x1 cell}}
      SigmaShift: 0
      NumFactors: 1
       NumBranch: 2
         PBranch: [0.5000 0.5000]
     Fact2Branch: [-1 1]

Исследуйте скорости узла, соответствующего верхней ветви.

HJMTree.FwdTree{2}(:,:,1)
ans =

    1.0364
    1.0420
    1.0461

Теперь исследуйте соответствующую нисходящую ветвь.

HJMTree.FwdTree{2}(:,:,2)
ans =

    1.0574
    1.0631
    1.0672

Третий узел.  Третий узел представляет время второго наблюдения, tObs = 2. Этот узел содержит в общей сложности четыре состояния, два, представляющие ветви, идущие вверх, и два других, представляющих ветви, идущие вниз. Исследуйте скорости узла, соответствующие состояниям вверх.

HJMTree.FwdTree{3}(:,:,1)
ans =

    1.0317    1.0526
    1.0358    1.0568

Далее рассмотрим соответствующие состояния вниз.

HJMTree.FwdTree{3}(:,:,2)
ans =

    1.0526    1.0738
    1.0568    1.0781

Изоляция определенного узла.  Начиная с третьего уровня, индексация в массиве ячеек дерева становится комплексной, и изоляция определенного узла может оказаться трудной. Функция bushpath изолирует конкретный узел путем определения пути к узлу как вектора ветвей, принятых для достижения этого узла. В качестве примера рассмотрим узел, достигнутый путем запуска с корневого узла, взятия ветви вверх, затем ветви вниз, а затем другой ветви вниз. Учитывая, что дерево имеет только две ветви на узел, ветви, идущие вверх, соответствуют 1, и ветви, идущие вниз, соответствуют 2. Путь вверх-вниз становится вектором [1 2 2].

FRates = bushpath(HJMTree.FwdTree, [1 2 2])
FRates =

    1.0356
    1.0364
    1.0526
    1.0674

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

Изоляция того же узла с помощью прямого индексирования получает

HJMTree.FwdTree{4}(:, 3, 2)
ans =

    1.0674

Как ожидалось, это одно значение соответствует последнему элементу ставок, возвращаемых bushpath.

Можно использовать эти методы с любым типом дерева, сгенерированного с помощью Financial Instruments Toolbox, таким как деревья форвардных ставок или деревья цен.

Древовидная структура BDT

Теперь можно детально изучить содержимое BDTTree структура.

BDTTree 
BDTTree = 

      FinObj: 'BDTFwdTree'
     VolSpec: [1x1 struct]
    TimeSpec: [1x1 struct]
    RateSpec: [1x1 struct]
        tObs: [0 1.00 2.00 3.00]
        TFwd: {[4x1 double]  [3x1 double]  [2x1 double]  [3.00]}
      CFlowT: {[4x1 double]  [3x1 double]  [2x1 double]  [4.00]}
     FwdTree: {[1.10]  [1.10 1.14]  [1.10 1.14 1.19]  [1.09 1.12 1.16 1.22]}

FwdTree содержит фактическое дерево скоростей. MATLAB представляет его как массив ячеек с каждым элементом массива ячеек, содержащим древовидный уровень.

Другие поля содержат другую информацию, относящуюся к интерпретации значений в FwdTree. Самые важные из них VolSpec, TimeSpec, и RateSpec, которые содержат информацию о волатильности, временной структуре и структуре скорости, соответственно.

Посмотрите на RateSpec структура, используемая при генерации этого дерева, чтобы увидеть, где берутся эти значения. Расположите значения в одном массиве.

[BDTTree.RateSpec.StartTimes BDTTree.RateSpec.EndTimes... 
BDTTree.RateSpec.Rates]
ans =

         0    1.0000    0.1000
         0    2.0000    0.1100
         0    3.0000    0.1200
         0    4.0000    0.1250

Посмотрите на ставки в FwdTree. Первый узел представляет дату оценки,   tObs = 0. Второй узел представляет   tObs = 1. Исследуйте скорости во втором, третьем и четвертом узлах.

BDTTree.FwdTree{2}  
ans =

      1.0979    1.1432

Второй узел представляет первое время наблюдения,   tObs = 1. Этот узел содержит в общей сложности два состояния, одно представляет ветвь, идущую вверх (1.0979) и другой, представляющий ветвь, идущую вниз (1.1432).

Примечание

Конвенция в этом документе состоит в том, чтобы отображать цены, растущие на верхней ветви. Так, при отображении скоростей скорости падают на верхней ветви и увеличиваются на нижней ветви.

BDTTree.FwdTree{3}
ans =

    1.0976    1.1377    1.1942

Третий узел представляет время второго наблюдения, t   Obs = 2. Этот узел содержит в общей сложности три состояния, одно представляет ветвь, идущую вверх (1.0976), представляющий ветвь посередине (1.1377) и другой, представляющий ветвь, идущую вниз (1.1942).

BDTTree.FwdTree{4}
ans =

    1.0872    1.1183    1.1606    1.2179

Четвертый узел представляет третье время наблюдения,   tObs = 3. Этот узел содержит в общей сложности четыре состояния, одно представляет ветвь, идущую вверх (1.0872), две, представляющие ветви посередине (1.1183 и 1.1606), и другой, представляющий ветвь, идущую вниз (1.2179).

Изоляция определенного узла.  Функция treepath изолирует конкретный узел путем определения пути к узлу как вектора ветвей, принятых для достижения этого узла. В качестве примера рассмотрим узел, достигнутый путем запуска с корневого узла, взятия ветви вверх, затем ветви вниз и, наконец, другой ветви вниз. Учитывая, что дерево имеет только две ветви на узел, ветви, идущие вверх, соответствуют 1, и ветви, идущие вниз, соответствуют 2. Путь вверх-вниз становится вектором   [1 2 2].

FRates = treepath(BDTTree.FwdTree, [1 2 2]) 
FRates =

    1.1000
    1.0979
    1.1377
    1.1606

treepath возвращает короткие скорости для всех узлов, обработанных путем, заданным в входной параметр, первый, соответствующий корневому узлу и последний, соответствующий целевому узлу.

Древовидные структуры HW и BK

Древовидные структуры HW и BK аналогичны древовидной структуре BDT. Это можно увидеть, если изучить выборку дерева аппаратных средств, содержащийся в файле deriv.mat.

load deriv.mat;
HWTree
HWTree = 

      FinObj: 'HWFwdTree'
     VolSpec: [1x1 struct]
    TimeSpec: [1x1 struct]
    RateSpec: [1x1 struct]
        tObs: [0 1.00 2.00 3.00]
        dObs: [731947.00 732313.00 732678.00 733043.00]
      CFlowT: {[4x1 double]  [3x1 double]  [2x1 double]  [4.00]}
       Probs: {[3x1 double]  [3x3 double]  [3x5 double]}
     Connect: {[2.00]  [2.00 3.00 4.00]  [2.00 2.00 3.00 4.00 4.00]}
     FwdTree: {[1.03]  [1.05 1.04 1.02]  [1.08 1.07 1.05 1.03 1.01]  [1.09 1.08 1.06 1.04 1.02]

Все поля этой структуры аналогичны их аналогам BDT. В BDT отсутствуют два дополнительных поля: Probs и Connect. The Probs поле представляет вероятности вхождения в каждой ветви каждого узла в дереве. The Connect в поле описывается связь узлов заданного уровня дерева с узлами следующего уровня дерева.

Probs Поле.  В то время как модели BDT и однофакторного HJM имеют равные вероятности для каждой ветви в узле, HW и BK не имеют. Для деревьев HW и BK, Probs поле указывает вероятность того, что конкретная ветвь будет перемещаться от одного узла к другому на следующем уровне.

The Probs поле состоит из массива ячеек с одной камерой на уровень дерева. Каждая камера является 3-by- NUMNODES массив с верхней строкой, представляющей вероятность движения вверх, средней строкой, представляющей вероятность движения посередине, и последней строкой вероятность движения вниз.

В качестве иллюстрации рассмотрим первые два элемента Probs поле структуры, соответствующее первому (корневому) и второму уровням дерева.

HWTree.Probs{1}
0.16666666666667
0.66666666666667
0.16666666666667
HWTree.Probs{2}
0.12361333418768   0.16666666666667   0.21877591615172
0.65761074966060   0.66666666666667   0.65761074966060
0.21877591615172   0.16666666666667   0.12361333418768

Чтение сверху вниз, значения в HWTree.Probs{1} соответствуют вероятностям вверх, посередине и вниз в корневом узле.

HWTree.Probs{2} является 3-by- 3 матрица значений. Первый столбец представляет верхний узел, второй - средний, а последний - нижний. Как и в случае с корневым узлом, первая, вторая и третья строки удерживают значения для вверх, посередине и вниз, отходя от каждого узла.

Как ожидалось, сумма всех вероятностей в любом узле равна 1.

sum(HWTree.Probs{2})
1.0000    1.0000    1.0000

Соедините поле.  Другое поле, которое отличает древовидные структуры HW и BK от древовидной структуры BDT, Connect. В этом поле описывается, как каждый узел на данном уровне соединяется с узлами следующего уровня. Необходимость в этом поле возникает из-за возможности нестандартного ответвления в дереве.

The Connect поле древовидной структуры HW состоит из массива ячеек с одной камерой на уровень дерева.

HWTree.Connect
ans = 

    [2]    [1x3 double]    [1x5 double]

Каждая камера содержит 1-by- NUMNODES вектор. Каждое значение в векторе относится к узлу на соответствующем уровне дерева и представляет индекс узла на следующем уровне дерева, с которым соединяется средняя ветвь узла.

Если вы вычитаете 1 из значений, содержащихся в Connect, вы раскрываете индекс узлов на следующем уровне, с которым соединяется верхняя ветвь. Если вы добавляете 1 к значениям отображается индекс соответствующей нисходящей ветви.

В качестве иллюстрации рассмотрим HWTree.Connect{1}:

HWTree.Connect{1}
ans =

     2

Это указывает, что средняя ветвь корневого узла соединяется со вторым (от верхней части) узлом следующего уровня, как и ожидалось. Если вычесть 1 из этого значения вы получаете 1, что говорит вам, что ветвь вверх переходит к верхнему узлу. Если вы добавляете 1, вы получаете 3, который указывает на последний узел второго уровня дерева.

Теперь рассмотрим уровень 3 в этом примере:

HWTree.Connect{3}
2     2     3     4     4

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

Чтобы визуализировать это, рассмотрите следующий рисунок дерева.

Здесь становится очевидным, что существует нестандартное ответвление на третьем уровне дерева, на верхнем и нижнем узлах. Первый и второй узлы соединяются с одним и тем же трио узлов на следующем уровне. Подобное ответвление происходит в нижнем и следующем узлах дерева.

См. также

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

Похожие примеры

Подробнее о