Оценка портфеля Используя модель Black-Derman-Toy

Этот пример иллюстрирует, как Financial Instruments 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

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

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}

Наблюдайте дерево процентной ставки

Визуализируйте эволюцию процентной ставки вдоль дерева путем рассмотрения структуры output 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 отображает структуру дерева уровня на левой панели. Древовидная визуализация на правой панели является пробелом, но путем выбора Diagram и нажатия на узлы можно исследовать уровни вдоль путей.

treeviewer(BDTTreeR)

Создайте инструментальный портфель

Создайте портфель, состоящий из двух инструментов связи и опции на 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 соответствуйте ценам в начальный момент времени наблюдения (tObs = 0), который задан как Дата Оценки дерева процентной ставки.

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

Для просмотра документации необходимо авторизоваться на сайте