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
поле структуры) и спецификации волатильности, скорости и времени, используемые при создании этого дерева.
Эти функции берут три структуры как входные параметры:
Модель волатильности VolSpec
. (См. «Определение модели волатильности» (VolSpec).)
Структура процентной ставки RateSpec
. (См. раздел «Определение структуры терминов процентных ставок» (RateSpec).)
Древовидное временное размещение TimeSpec
. (См. раздел «Определение временной структуры» (TimeSpec).)
Легкий способ визуализировать любые деревья, которые вы создаете, - это 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
. Он представляет отображение между временем уровня и датами уровня для ценового предложения. Эта структура косвенно определяет количество уровней в дереве.
Поскольку HJM поддерживает многофакторные (до 3) модели волатильности, в то время как BDT (также, BK и HW) поддерживает только один коэффициент волатильности, hjmvolspec
и bdtvolspec
функции требуют различных входов и генерируют несколько другие выходы. Для примеров смотрите Создание модели волатильности HJM. Для примеров BDT смотрите Создание модели волатильности BDT.
Функция hjmvolspec
генерирует структуру VolSpec
, который определяет процесс волатильности используется при создании передовых деревьев. В этом контексте 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, идущие сверху вниз.
Функция 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
является структурой процентного термина, которая определяет исходную спецификацию форвардной ставки, из которой получают древовидные ставки. Моделирование структуры процентных ставок объясняет, как создать эти структуры с помощью функции 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.
% 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]}
Теперь используйте ранее вычисленные значения для 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
Теперь можно детально изучить содержимое 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, таким как деревья форвардных ставок или деревья цен.
Теперь можно детально изучить содержимое 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 аналогичны древовидной структуре 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
На этом уровне происходит нестандартное ответвление. Это может быть легко распознано, потому что средняя ветвь двух узлов соединяется с одним и тем же узлом на следующем уровне.
Чтобы визуализировать это, рассмотрите следующий рисунок дерева.
Здесь становится очевидным, что существует нестандартное ответвление на третьем уровне дерева, на верхнем и нижнем узлах. Первый и второй узлы соединяются с одним и тем же трио узлов на следующем уровне. Подобное ответвление происходит в нижнем и следующем узлах дерева.
bdtprice
| bdtsens
| bdttimespec
| bdttree
| bdtvolspec
| bkprice
| bksens
| bktimespec
| bktree
| bkvolspec
| bondbybdt
| bondbybk
| bondbyhjm
| bondbyhw
| bondbyzero
| capbybdt
| capbybk
| capbyblk
| capbyhjm
| capbyhw
| cfbybdt
| cfbybk
| cfbyhjm
| cfbyhw
| cfbyzero
| fixedbybdt
| fixedbybk
| fixedbyhjm
| fixedbyhw
| fixedbyzero
| floatbybdt
| floatbybk
| floatbyhjm
| floatbyhw
| floatbyzero
| floatdiscmargin
| floatmargin
| floorbybdt
| floorbybk
| floorbyblk
| floorbyhjm
| floorbyhw
| hjmprice
| hjmsens
| hjmtimespec
| hjmtree
| hjmvolspec
| hwcalbycap
| hwcalbyfloor
| hwprice
| hwsens
| hwtimespec
| hwtree
| hwvolspec
| instbond
| instcap
| instcf
| instfixed
| instfloat
| instfloor
| instoptbnd
| instoptembnd
| instoptemfloat
| instoptfloat
| instrangefloat
| instswap
| instswaption
| intenvprice
| intenvsens
| intenvset
| mmktbybdt
| mmktbyhjm
| oasbybdt
| oasbybk
| oasbyhjm
| oasbyhw
| optbndbybdt
| optbndbybk
| optbndbyhjm
| optbndbyhw
| optembndbybdt
| optembndbybk
| optembndbyhjm
| optembndbyhw
| optemfloatbybdt
| optemfloatbybk
| optemfloatbyhjm
| optemfloatbyhw
| optfloatbybdt
| optfloatbybk
| optfloatbyhjm
| optfloatbyhw
| rangefloatbybdt
| rangefloatbybk
| rangefloatbyhjm
| rangefloatbyhw
| swapbybdt
| swapbybk
| swapbyhjm
| swapbyhw
| swapbyzero
| swaptionbybdt
| swaptionbybk
| swaptionbyblk
| swaptionbyhjm
| swaptionbyhw