exponenta event banner

Ценообразование портфеля с использованием модели Black-Derman-Toy

В этом примере показано, как Toolbox™ финансовых инструментов используется для создания дерева Black-Derman-Toy (BDT) и оценки портфеля инструментов с использованием модели BDT.

Создание структуры условий процентной ставки

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

From To Rate

01 Jan 2005 01 Jan 2006 0.0275

01 Jan 2005 01 Jan 2007 0.0312

01 Jan 2005 01 Jan 2008 0.0363

01 Jan 2005 01 Jan 2009 0.0415

01 Jan 2005 01 Jan 2010 0.0458

StartDates = ['01 Jan 2005'];
          
EndDates =   ['01 Jan 2006';
              '01 Jan 2007'; 
              '01 Jan 2008';
              '01 Jan 2009';
              '01 Jan 2010'];
          
ValuationDate = ['01 Jan 2005'];
Rates = [0.0275; 0.0312; 0.0363; 0.0415; 0.0458];
Compounding = 1;

RateSpec = intenvset('Compounding',Compounding,'StartDates', StartDates,...
                     'EndDates', EndDates, 'Rates', Rates,'ValuationDate', ValuationDate)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 1
             Disc: [5x1 double]
            Rates: [5x1 double]
         EndTimes: [5x1 double]
       StartTimes: [5x1 double]
         EndDates: [5x1 double]
       StartDates: 732313
    ValuationDate: 732313
            Basis: 0
     EndMonthRule: 1

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

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

Volatility = [0.005; 0.0055; 0.006; 0.0065; 0.007];
BDTVolSpec = bdtvolspec(ValuationDate, EndDates, Volatility)
BDTVolSpec = struct with fields:
             FinObj: 'BDTVolSpec'
      ValuationDate: 732313
           VolDates: [5x1 double]
           VolCurve: [5x1 double]
    VolInterpMethod: 'linear'

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

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

Maturity = EndDates;
BDTTimeSpec = bdttimespec(ValuationDate, Maturity, Compounding)
BDTTimeSpec = struct with fields:
           FinObj: 'BDTTimeSpec'
    ValuationDate: 732313
         Maturity: [5x1 double]
      Compounding: 1
            Basis: 0
     EndMonthRule: 1

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

Для создания дерева BDT используйте ранее вычисленные значения для RateSpec, VolSpec и TimeSpec.

BDTTree = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec)
BDTTree = struct with fields:
      FinObj: 'BDTFwdTree'
     VolSpec: [1x1 struct]
    TimeSpec: [1x1 struct]
    RateSpec: [1x1 struct]
        tObs: [0 1 2 3 4]
        dObs: [732313 732678 733043 733408 733774]
        TFwd: {[5x1 double]  [4x1 double]  [3x1 double]  [2x1 double]  [4]}
      CFlowT: {[5x1 double]  [4x1 double]  [3x1 double]  [2x1 double]  [5]}
     FwdTree: {1x5 cell}

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

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

BDTTreeR = cvtree(BDTTree);

Посмотрите на верхнюю ветвь и нижнюю ветвь дерева:

%Rate at root node:
RateRoot      = treepath(BDTTreeR.RateTree, [0]) 
RateRoot = 0.0275
%Rates along upper branch:
RatePathUp    = treepath(BDTTreeR.RateTree, [1 1 1 1]) 
RatePathUp = 5×1

    0.0275
    0.0347
    0.0460
    0.0560
    0.0612

%Rates along lower branch:
RatePathDown = treepath(BDTTreeR.RateTree, [2 2 2 2])
RatePathDown = 5×1

    0.0275
    0.0351
    0.0472
    0.0585
    0.0653

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

treeviewer(BDTTreeR)

Figure Tree Viewer contains 2 axes and other objects of type uicontrol. Axes 1 contains 35 objects of type line. Axes 2 is empty.

Создание портфеля инструментов

Создайте портфель, состоящий из двух облигационных инструментов и опциона на 5% облигацию.

% Bonds
CouponRate = [0.04;0.05]; 
Settle = '01 Jan 2005'; 
Maturity = ['01 Jan 2009';'01 Jan 2010'];
Period = 1;

% Option
OptSpec = {'call'};
Strike = 98;
ExerciseDates = ['01 Jan 2010'];
AmericanOpt = 1;

InstSet = instadd('Bond',CouponRate, Settle,  Maturity, Period);
InstSet = instadd(InstSet,'OptBond', 2, OptSpec, Strike, ExerciseDates, AmericanOpt);

Проверьте набор приборов, содержащихся в переменной InstSet.

instdisp(InstSet)
Index Type CouponRate Settle         Maturity       Period Basis EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate Face
1     Bond 0.04       01-Jan-2005    01-Jan-2009    1      0     1            NaN       NaN             NaN            NaN       100 
2     Bond 0.05       01-Jan-2005    01-Jan-2010    1      0     1            NaN       NaN             NaN            NaN       100 
 
Index Type    UnderInd OptSpec Strike ExerciseDates  AmericanOpt
3     OptBond 2        call    98     01-Jan-2010    1          
 

Цена портфеля с использованием дерева BDT

Рассчитайте цену каждого инструмента в наборе инструментов.

Price = bdtprice(BDTTree, InstSet)
Price = 3×1

   99.6374
  102.2460
    4.2460

Цены в векторе выпуска Price соответствуют ценам в нулевое время наблюдения (tOb = 0), которое определяется как Дата оценки дерева процентных ставок.

В векторе Price первый элемент 99.6374 представляет цену первого инструмента (4% Bond); второй элемент, 102.2460, представляет цену второго инструмента (5% Облигации), а 4.2460 - цену Опциона.

См. также

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

Связанные примеры

Подробнее