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

https://hub.exponenta.ru/
 

Financial Derivatives Toolbox

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

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

Процентная ставка vs. фактор дисконтирования

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

Таким образом, существует прямое соответствие между процентной ставкой, применимой на определенном периоде времени и соответствующим фактором дисконтирования. Функция disc2rate преобразует ставку дисконтирования для определенного периода времени в процентную ставку. Напротив, функция rate2disc выполняет противоположную функцию, она конвертирует процентную ставку, применимую для определенного периода времени в соответствующую ставку дисконтирования.

Вычисление фактора дисконтирования из процентной ставки

В качестве примера, рассмотрим нижеприведенные годовые процентные ставки для облигации с нулевым купоном.

Исходные данные представлены в таблице.

С По Процентная ставка
15 февраля 2000 15 августа 2000 0.05
15 февраля 2000 15 февраля 2001 0.056
15 февраля 2000 15 августа 2001 0.06
15 февраля 2000 15 февраля 2002 0.065
15 февраля 2000 15 августа 2002 0.075

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

Disc = rate2disc (Compounding, Rates, EndDates, StartDates,
ValuationDate)

где:

  • Параметр Compounding представляет собой частоту, с которой процентная ставка накапливается, когда приводится к периоду в один год. Для данного примера, предположим, что это значение равно 2. (Начисление процентов осуществляется один в полгода).
  • Rates представляет собой вектор годовых процентных ставок, определяющий процентные ставки, применимые к каждому временному интервалу.
  • EndDates представляет собой вектор дат, определяющий конец каждого временного интервала для каждой процентной ставки.
  • StartDates представляет собой вектор дат, определяющий начало каждого временного интервала для каждой процентной ставки.
  • ValuationDate представляет собой дату наблюдения, для которой вычисляется фактор дисконтирования. В этом примере 15 февраля 2000 года рассматривается как начальная дата для всех интервалов процентной ставки.

Определяем переменные в MATLAB.

StartDates = ['15-Feb-2000'];
EndDates = ['15-Aug-2000'; '15-Feb-2001'; '15-Aug-2001';...
'15-Feb-2002'; '15-Aug-2002'];
Compounding = 2;
ValuationDate = ['15-Feb-2000'];
Rates = [0.05; 0.056; 0.06; 0.065; 0.075];

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

Disc = rate2disc (Compounding, Rates, EndDates, StartDates,...
ValuationDate)

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

С По Процентная ставка Ставка дисконтирования
15 февраля 2000 15 августа 2000 0.05 0.9756
15 февраля 2000 15 февраля 2001 0.056 0.9463
15 февраля 2000 15 августа 2001 0.06 0.9151
15 февраля 2000 15 февраля 2002 0.065 0.8799
15 февраля 2000 15 августа 2002 0.075 0.8319

Временной фактор: обязательный выходной аргумент

Функция rate2disc в обязательном порядке возвращает два дополнительных выходных аргумента: EndTimes и StartTimes. Эти вектора представляют собой временные интервалы начала и конца в интервале периода дисконтирования. Размер этих единиц определяется значением входной переменной Compounding.

Для проверки выходного аргумента - временного фактора, найдем соответствующие значения в предыдущем примере.

[Disc, EndTimes, StartTimes] = rate2disc(Compounding, Rates,...
EndDates, StartDates, ValuationDate);

Для наилучшего представления, переупорядочим эти два вектора в один массив с помощью команды MATLAB тогда получим:

Ввиду того, что дата оценивания эквивалентна начальной дате для всех периодов, вектор StartTimes эквивалентен нулю. Также ввиду того, что значение параметра Compounding равно 2, процентные ставки накапливаются в пол года, что устанавливает количество периодов дисконтирования в шесть месяцев. Вектор EndDates представляет собой даты, разделенные интервалами в шесть месяцев, начиная от даты оценивания. Это определяет тот факт, почему вектор EndTimes представляет собой увеличивающиеся числа от 1 до 5.

Альтернативный синтаксис (rate2disc)

Функция rate2disc представляет также альтернативный синтаксис, который использует периодические дисконтированные интервалы, вместо дат. Так как взаимоотношение между фактором дисконтирования и процентной ставкой основаны на периоде времени, а не на абсолютных датах, тогда синтаксический формат функции rate2disc позволяет работать непосредственно с периодами времени. В данной модели, дата оценивания соответствует нулю, а вектора StartTimes и EndTimes используются в качестве входных аргументов вместо их эквивалентов в датах, StartDates и EndDates. В этом случае синтаксис для функции rate2disc будет иметь следующий вид:

Disc = rate2disc (Compounding, Rates, EndTimes, StartTimes)

Используя в качестве входных данных вектора StartTimes и EndTimes, вычисленных ранее, можно получить предыдущий результат, связанный с факторами дисконтирования с помощью следующей команды MATLAB:

Disc = rate2disc(Compounding, Rates, EndTimes, StartTimes)

Вычисление процентных ставок на основе ставок дисконтирования

Возможности функции disc2rate является противоположными, по отношению к функции rate2disc. Она находит процентные ставки, применимые относительно множества периодов суммирования, при заданном факторе дисконтирования на этих периодах. Синтаксис для вызова этой функции имеет вид:

Rates = disc2rate (Compounding, Disc, EndDates, StartDates, ValuationDate)

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

Используем ниже приведенную команду MATLAB

Rates = disc2rate (Compounding, Disc, EndDates, StartDates,... ValuationDate)

Получим такой результат:

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

Альтернативный синтаксис функции (disc2rate)

Как и в случае функции rate2disc, функция disc2rate, в обязательном порядке, возвращает вектора StartTimes и EndTimes, представляющие собой начальные и конечные даты, измеренные в единицах периода дисконтирования. Снова, обрабатывая ранее представленные результаты, можно получить те же самые значения.

Для этого используем ниже приведенную команду MATLAB:

[Rates, EndTimes, StartTimes] = disc2rate (Compounding, Disc,...
EndDates, StartDates, ValuationDate);

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

Result = [StartTimes, EndTimes, Rates]	

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

Так же как и в функции rate2disc, взаимоотношение между процентными ставками и факторами дисконтирования, определяется с помощью периодов времени, а не в абсолютных датах. Следовательно, при альтернативном синтаксисе для disc2rate используются периоды времени, а не даты. При этом подразумевается, что дата оценивания соответствует нулю. Синтаксис функции, связанный с периодами времени имеет вид:

Rates = disc2rate (Compounding, Disc, EndTimes, StartTimes);

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

Rates = disc2rate(Compounding, Disc, EndTimes, StartTimes)

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

Преобразование процентной ставки во времени

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

Преобразование спотовой кривой процентных ставок в форвардную кривую

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

[Rates, EndTimes, StartTimes] = ratetimes (Compounding, RefRates,
RefEndDates, RefStartDates, EndDates, StartDates, ValuationDate);

где:

  • Параметр Compounding представляет собой частоту, с которой процентная ставка накапливается, когда приводится к периоду в один год. Фактически этот параметр определяет частоту выплаты процентов. Например, если выплата полугодовая, то значение этого параметра равно 2, при квартальной выплате значение параметра равно 4.
  • RefRates представляет собой вектор первоначально заданных процентных ставок, определяющий процентные ставки, применимые к заданным временным интервалам.
  • RefEndDates представляет собой вектор дат, определяющих конец периода процентной ставки, связанный с RefRates,
  • RefStartDates представляет собой вектор дат, определяющих начало периода процентной ставки, связанной с RefRates,
  • EndDates представляет собой дату экспирации, для которой осуществляется интерполяция процентной ставки,
  • StartDates представляет собой начальную дату, для которой интерполируется процентная ставка,
  • ValuationDate представляет собой дату наблюдения, начиная с которой вычисляются StartTimes и EndTimes. Эта дата устанавливается в 0.

Входные аргументы для этой функции могут быть разделены на 2 группы:

  • Первоначальные или ссылочные процентные ставки, включая интервалы времени, для которых они являются действительными,
  • Интервалы времени, для которых новые процентные ставки вычисляются.

В качестве примера рассмотрим исходные данные, представленные в таблице:

С По Процентная ставка
15 февраля 2000 15 августа 2000 0.05
15 февраля 2000 15 февраля 2001 0.056
15 февраля 2000 15 августа 2001 0.06
15 февраля 2000 15 февраля 2002 0.065
15 февраля 2000 15 августа 2002 0.075

Предположим, что дата оценивания равна 15 февраля 2000 года, тогда процентные ставки представляют собой процентные ставки на облигацию с нулевым купоном с экспирацией, определенной во втором столбце вышеприведенной таблицы. Используем функцию ratetimes для вычисления спотовой процентной ставки на начало всех периодов, представленных в таблице. Предположим, что значение параметра компаундирования равно 2. После введения в командную строку MATLAB следующих команд:

% Исходные данные для процентных ставок.
RefStartDates = ['15-Feb-2000'];
RefStartDates = ['15-Feb-2000'];
RefEndDates = ['15-Aug-2000'; '15-Feb-2001'; '15-Aug-2001';...
'15-Feb-2002'; '15-Aug-2002'];
Compounding = 2;
ValuationDate = ['15-Feb-2000'];
RefRates = [0.05; 0.056; 0.06; 0.065; 0.075];

% Новые интервалы времени.
StartDates = ['15-Feb-2000'; '15-Aug-2000'; '15-Feb-2001';...
'15-Aug-2001'; '15-Feb-2002'];
EndDates = ['15-Aug-2000'; '15-Feb-2001'; '15-Aug-2001';...
'15-Feb-2002'; '15-Aug-2002'];

 % Определение новых процентных ставок.
[Rates, EndTimes, StartTimes] = ratetimes(Compounding, ...
RefRates, RefEndDates, RefStartDates, EndDates, StartDates,...
ValuationDate);

Получим требуемый результат, где в отдельном окне представлены значения переменной Rates:

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

С По Процентная ставка
15 февраля 2000 15 августа 2000 0.0500
15 февраля 2000 15 февраля 2001 0.0620
15 февраля 2000 15 августа 2001 0.0680
15 февраля 2000 15 февраля 2002 0.0801
15 февраля 2000 15 августа 2002 0.1155

Альтернативный синтаксис функции (ratetimes)

Дополнительные выходные параметры функции rate2times - StartTimes и EndTimes представляют собой эквивалент векторам StartDates и EndDates. Так же как и с функциями disc2rate и rate2disc, функция ratetimes использует эти временные факторы для интерполяции процентных ставок. Эти временные факторы вычисляются исходя из начальной конечных дат и даты оценивания, которые должны быть введены в качестве входных аргументов. Функция ratetimes может использовать временной фактор непосредственно, при предположении time = 0 в качестве даты оценивания. Функция ratetimes имеет также альтернативный синтаксис, в котором временной фактор используется непосредственно, а дата оценивания устанавливается в 0: time = 0. Альтернативный синтаксис функции имеет вид:

[Rates, EndTimes, StartTimes] = ratetimes (Compounding, RefRates,RefEndTimes, RefStartTimes, EndTimes, StartTimes);

Снова используем альтернативный синтаксис функции ratetimes для нахождения форвардных процентных ставок. В этом случае, необходимо найти временной фактор для кривой, задаваемой исходными данными. Для этого используем функцию date2time.

После введения в командную строку MATLAB

RefEndTimes = date2time (ValuationDate, RefEndDates, Compounding)

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

Этот результат является ожидаемым, для заданных полугодовых дисконтов (как это определяется с помощью значения переменной Compounding равной 2), конечные даты разделены 6 месячными периодами времени, а дата оценивания эквивалентна дате начала первого периода, который равен нулю (time = 0).

Теперь используем альтернативный синтаксис функции ratetimes и вводим в командную строку MATLAB:

[Rates, EndTimes, StartTimes] = ratetimes (Compounding,...
RefRates, RefEndTimes, RefStartTimes, EndTimes, StartTimes);
Times = [StartTimes, EndTimes]

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

Параметры EndTimes и StartTimes, как и ожидалось, имеют те же самые значения, которые использовались в качестве исходных данных для обработки.

Деревья процентной ставки и цены

Деревья процентной ставки и цены могут поддерживаться в текущей версии Financial Derivatives Toolbox или биномиальными (две вершины выходят их одной вершины) или триномиальными (три вершины выходят их одной вершины) деревьями. Обычно, в биномиальных деревьях допускают, что моделируемая процентная ставка может либо возрастать (up) или уменьшаться (down) в каждой вершине. В триномиальных деревьях допускается более сложное движение процентной ставки (или цены). С помощью триномиальных деревьев вводится третье состояние процентной ставки (цены) - unchanged (middle). Поэтому в триномиальных деревьях движение процентной ставки или цены в каждой вершине может представляться, например, такими движениями: up-up-up или unchanged-up-up.

Типы деревьев

Деревья в Financial Derivatives Toolbox могут быть классифицированы на ветвящиеся и рекомбинационные. Ветвящееся дерево представляет собой дерево, в котором количество ветвей возрастает экспоненциально, с увеличением относительно времени наблюдения, причем его ветви никогда не рекомбинируются (ветви растущего дерева не пересекаются между собой). В этом смысле рекомбинационное дерево является противоположностью ветвящемуся дереву. Рекомбинационное дерево имеет ветви, которые рекомбинируют (пересекаются) со временем. Из заданной вершины, следующая вершина достигается либо с помощью движения up-down или с помощью движения down-up.

Ветвящееся и рекомбинационное биномиальное дерево представлены на рисунках.

Ветвящееся дерево:

Рекомбинационное биномиальное дерево:

В текущей версии Financial Derivatives Toolbox с ветвящимися деревьями работает модель HJM. Модель BDT, с другой стороны, работает с рекомбинационными биномиальными деревьями.

Другие две модели процентных ставок, поддерживаемых в Financial Derivatives Toolbox модели HW и BK, работают с рекомбинационными триномиальными деревьями.

Интерпретация движения процентной ставки или цены с применением Financial Derivatives Toolbox

Текущая версия Financial Derivatives Toolbox поставляется с файлом derive.mat, содержащим 4 дерева процентных ставок на основе деревьев:

  • HJMTree - ветвящееся биномиальное дерево
  • BDTTree - рекомбинационное биномиальное дерево,
  • HWTree BKTree - рекомбинационное триномиальное дерево

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

Хеджирование

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

  • Процесс хеджирования рассматривается в разделе "Хеджирование"
  • hedgeopt - функция, используемая для определения оптимального хеджа
  • hedgeslf - функция, которая используется для нахождения самофинансируемого хеджа

Временная структура процентных ставок

Определение. Временная структура процентных ставок представляет собой эволюцию (изменение) процентной ставки во времени.

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

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

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

Перед подробным анализом структуры самого вызова RateSpec, исследуем три функции, которые обеспечивают выполнение ключевых функций с процентными ставками: disc2rate, противоположную функцию rate2disc и ratetimes. Первые две функции представляют собой отображение между ставкой дисконтирования и процентной ставкой. Третья функция ratetimes вычисляет эффект изменение во времени для процентной ставки. В этом разделе, относящемуся к временной структуре процентной ставки, рассмотрим следующие вопросы:

  • Процентная ставка vs. фактор дисконтирования
  • Преобразование процентной ставки во времени
  • Функции для моделирования временной структуры процентной ставки

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

 

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


Система Orphus