MATLAB è Simulink íà ðóññêîì

https://hub.exponenta.ru/
 

Financial Derivatives Toolbox

Financial Toolbox: разбор демонстрационных примеров

  В оглавление \ К предыдущему разделу

Примеры создания деревьев

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

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

Используем примеры создания спецификации времени c использованием модели HJM, представленные выше и дополнительные команды MATLAB:

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

После выполнения вышеприведенных команд MATLAB получим следующий результат:

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

Используем выше вычисленные значения для переменных VolSpec, RateSpec и TimeSpec в качестве входных данных для функции bdttree для построения BDT дерева. Для упрощения примера соберем все вместе команды для наглядности:

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)

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

Volatility = [.2; .19; .18; .17];
BDTVolSpec = bdtvolspec (ValuationDate, EndDates, Volatility)

BDTTree = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec)

После выполнения вышеприведенных команд MATLAB получим следующий результат:

Анализ деревьев

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

Рассмотрим пример, использующий процентные ставки и данные портфеля МАТ-файле derive.mat, поставляемого вместе с Financial Derivatives Toolbox.

Загружаем данные в рабочую область MATLAB, для чего выполняем следующую команду:

load deriv.mat

Отображаем список переменных, загруженных из МАТ-файла с помощью команды:

whos

После выполнения вышеприведенных команд MATLAB получим следующий результат:

Структура дерева HJM

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

HJMTree

После выполнения этой команд MATLAB получим следующий результат:

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

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

Для получения форвардных процентных ставок выполним команду MATLAB:

HJMTree.FwdTree{1}

После выполнения этой команд MATLAB получим следующий результат:

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

Рассмотрим более подробно структуру RateSpec, используемую в построении этого дерева, для того чтобы увидеть, где являются действительными эти значения. Упорядочим значения в один массив с помощью команды MATLAB:

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

После выполнения этой команд MATLAB получим следующий результат:

Если пользователю необходимо найти соответствующий инверсный дисконт процентной ставки в третьем столбце, то необходимо использовать значения для первой вершины дерева. Можно преобразовать процентные ставки в инверсный дисконт, используя функцию rate2disc. Выполним команды MATLAB:

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

Получим следующий результат:

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

Выполним команду MATLAB:

HJMTree.VolSpec

Результат выполнения представлен ниже:

Проверим процентные ставки вершины, соответствующие движению up по дереву.

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

Результат выполнения команды:

Теперь проверим процентные ставки вершины, соответствующие движению down по дереву.

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

Результат выполнения команды:

Третья вершина. Третья вершина представляет собой второй момент наблюдения, tObs = 2. Эта вершина содержит общее число состояний равное четырем, первые два состояния представляют собой движение up по дереву, и другие два состояния представляют собой движение down по дереву.

Проверим процентные ставки вершин, соответствующих состояниям up.

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

Получим следующий результат:

Теперь проверим процентные ставки вершин, соответствующих состояниям down.

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

Результат выполнения представлен ниже:

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

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

Результат выполнения команды MATLAB для специфицированной вершины представлен ниже:

Функция bushpath возвращает спотовые процентные ставки для всех вершин, входящих в путь, специфицированный входными аргументами, первая из которых соответствует корневой вершине, последняя целевой вершине.

Для той же самой целевой вершины можно получить результат, применяя прямую индексацию:

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

Результат выполнения команды MATLAB только для одной специфицированной вершины представлен ниже:

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

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

Структура дерева BDT

Проверим теперь некоторые детали контента структуры BDTTree.

Выполним команду MATLAB:

BDTTree

Полученный результат представлен ниже:

Структура FwdTree содержит действительные процентные ставки, полученные на основе дерева.

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

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

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

Результат ее выполнения представлен ниже:

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

Для второй вершины:

BDTTree.FwdTree{2}

Результат для второй вершины

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

Замечание. Соглашением, связанным с представлением данных, является отображение цен, связанных с движениями по дугам up и down, так, что когда отображаются процентные ставки, то эти процентные ставки падают при движении вверх по дуге и увеличиваются при движении вниз по дуге. Для третьей вершины: BDTTree.FwdTree{3} Результат для третьей вершины

Третья вершина представляет собой второй момент наблюдения, определяемый значением параметра tObs = 2. Эта вершина содержит в целом три состояния, одно представляет собой дугу, связанную с движением up (1.0976), вторая, связанная с движением unchanged (1.1377) и третья представляет собой движение по дуге down (1.1942).

Для четвертой вершины:

BDTTree.FwdTree{4}

Результат для четвертой вершины

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

Спецификация изолированных вершин. Функция treepath, выделяет изолированную вершину путем спецификации пути до этой вершины вектором дуг, определяющим достижение этой вершины (в векторе эта вершина является конечной). В качестве примера рассмотрим вершину достижимую от корневой вершины, с последующими движениями по дуге up, далее по дуге down, и снова down. Исходя из начальных условий, можно сделать вывод о том, что дерево имеет только 2 дуги для каждой вершины, дуге с движением up соответствует 1, а дуге с движением down соответствует значение 2. Таким образом, вектор спецификации для изолированной вершины будет иметь вид [1 2 2].

Выполним команду:

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

Результат представлен ниже:

Функция treepath возвращает краткосрочные ставки для всех вершин, связанных с вектором спецификации пути, являющимся входным аргументом. Причем, первый элемент вектора спецификации соответствует корневой вершине, а последний соответствует конечной вершине.

  В оглавление \ К предыдущему разделу

 

Поиск по сайту:


Система Orphus