bdtprice

Цены на инструменты от дерева процентной ставки Black-Derman-Toy

Синтаксис

[Price,PriceTree] = bdtprice(BDTTree,InstSet)
[Price,PriceTree] = bdtprice(___,Options)

Описание

пример

[Price,PriceTree] = bdtprice(BDTTree,InstSet) вычисляет цены без арбитражей на инструменты с помощью дерева процентной ставки, созданного с bdttree. Оценены все инструменты, содержавшиеся в переменной финансового инструмента, InstSet.

bdtprice обрабатывает инструментальные типы: 'Bond', 'CashFlow', 'OptBond', 'OptEmBond', 'OptFloat', 'OptEmFloat', 'Fixed', 'Float', 'Cap', 'Floor', 'RangeFloat', 'Swap'. Смотрите instadd, чтобы создать заданные типы.

пример

[Price,PriceTree] = bdtprice(___,Options) добавляет дополнительный входной параметр для Options.

Примеры

свернуть все

Загрузите дерево BDT и инструменты из файла данных deriv.mat, чтобы оценить прописную букву и инструменты связи, содержавшиеся в инструментальном наборе.

load deriv.mat; 
BDTSubSet = instselect(BDTInstSet,'Type', {'Bond', 'Cap'});

instdisp(BDTSubSet)
instdisp(BDTSubSet)
Index Type CouponRate Settle         Maturity       Period Basis EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate Face Name     Quantity
1     Bond 0.1        01-Jan-2000    01-Jan-2003    1      NaN   NaN          NaN       NaN             NaN            NaN       NaN  10% Bond 100     
2     Bond 0.1        01-Jan-2000    01-Jan-2004    2      NaN   NaN          NaN       NaN             NaN            NaN       NaN  10% Bond  50     
 
Index Type Strike Settle         Maturity       CapReset Basis Principal Name    Quantity
3     Cap  0.15   01-Jan-2000    01-Jan-2004    1        NaN   NaN       15% Cap 30      

Оцените связь и прописную букву.

[Price, PriceTree] = bdtprice(BDTTree, BDTSubSet)
Warning: Not all cash flows are aligned with the tree. Result will be approximated. 
> In checktree at 289
  In bdtprice at 85 

Price =

   95.5030
   93.9079
    1.4375


PriceTree = 

    FinObj: 'BDTPriceTree'
     PTree: {[3x1 double]  [3x2 double]  [3x3 double]  [3x4 double]  [3x4 double]}
    AITree: {[3x1 double]  [3x2 double]  [3x3 double]  [3x4 double]  [3x4 double]}
      tObs: [0 1 2 3 4]

Можно использовать функцию treeviewer, чтобы видеть цены на эти три инструмента вдоль ценового дерева.

Оцените следующие мультиступенчатые облигации на предъявителя с помощью следующих данных:

Rates = [0.035; 0.042147; 0.047345; 0.052707];
ValuationDate = 'Jan-1-2010';
StartDates = ValuationDate;
EndDates = {'Jan-1-2011'; 'Jan-1-2012'; 'Jan-1-2013'; 'Jan-1-2014'};
Compounding = 1;

% Create RateSpec
RS = intenvset('ValuationDate', ValuationDate, 'StartDates', StartDates,...
'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding);

% Create a portfolio of stepped coupon bonds with different maturities
Settle = '01-Jan-2010';
Maturity = {'01-Jan-2011';'01-Jan-2012';'01-Jan-2013';'01-Jan-2014'};
CouponRate = {{'01-Jan-2011' .042;'01-Jan-2012' .05; '01-Jan-2013' .06; '01-Jan-2014' .07}};

% Display the instrument portfolio 
ISet = instbond(CouponRate, Settle, Maturity, 1);
instdisp(ISet)
Index Type CouponRate Settle         Maturity       Period Basis EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate Face
1     Bond [Cell]     01-Jan-2010    01-Jan-2011    1      0     1            NaN       NaN             NaN            NaN       100 
2     Bond [Cell]     01-Jan-2010    01-Jan-2012    1      0     1            NaN       NaN             NaN            NaN       100 
3     Bond [Cell]     01-Jan-2010    01-Jan-2013    1      0     1            NaN       NaN             NaN            NaN       100 
4     Bond [Cell]     01-Jan-2010    01-Jan-2014    1      0     1            NaN       NaN             NaN            NaN       100 
 

Создайте BDTTree, чтобы оценить ступенчатые облигации на предъявителя. Примите энергозависимость, чтобы быть 10%

Sigma = 0.1; 
BDTTimeSpec = bdttimespec(ValuationDate, EndDates, Compounding);
BDTVolSpec = bdtvolspec(ValuationDate, EndDates, Sigma*ones(1, length(EndDates))');
BDTT = bdttree(BDTVolSpec, RS, BDTTimeSpec);

% Compute the price of the stepped coupon bonds
PBDT = bdtprice(BDTT, ISet)
PBDT = 4×1

  100.6763
  100.7368
  100.9266
  101.0115

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

Rates = [0.035; 0.042147; 0.047345; 0.052707];
ValuationDate = 'Jan-1-2010';
StartDates = ValuationDate;
EndDates = {'Jan-1-2011'; 'Jan-1-2012'; 'Jan-1-2013'; 'Jan-1-2014'};
Compounding = 1;

%Create RateSpec
RS = intenvset('ValuationDate', ValuationDate, 'StartDates', StartDates,...
'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding);

% Create an instrument portfolio of 3 stepped callable bonds and three
% stepped vanilla bonds
Settle = '01-Jan-2010';
Maturity = {'01-Jan-2012';'01-Jan-2013';'01-Jan-2014'};
CouponRate = {{'01-Jan-2011' .042;'01-Jan-2012' .05; '01-Jan-2013' .06; '01-Jan-2014' .07}};
OptSpec='call';
Strike=100;
ExerciseDates='01-Jan-2011'; %Callable in one year

% Bonds with embedded option 
ISet = instoptembnd(CouponRate, Settle, Maturity, OptSpec, Strike,...
ExerciseDates, 'Period', 1);
                    
% Vanilla bonds 
ISet = instbond(ISet, CouponRate, Settle, Maturity, 1);

% Display the instrument portfolio
instdisp(ISet)
Index Type      CouponRate Settle         Maturity       OptSpec Strike ExerciseDates  Period Basis EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate Face AmericanOpt
1     OptEmBond [Cell]     01-Jan-2010    01-Jan-2012    call    100    01-Jan-2011    1      0     1            NaN       NaN             NaN            NaN       100  0          
2     OptEmBond [Cell]     01-Jan-2010    01-Jan-2013    call    100    01-Jan-2011    1      0     1            NaN       NaN             NaN            NaN       100  0          
3     OptEmBond [Cell]     01-Jan-2010    01-Jan-2014    call    100    01-Jan-2011    1      0     1            NaN       NaN             NaN            NaN       100  0          
 
Index Type CouponRate Settle         Maturity       Period Basis EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate Face
4     Bond [Cell]     01-Jan-2010    01-Jan-2012    1      0     1            NaN       NaN             NaN            NaN       100 
5     Bond [Cell]     01-Jan-2010    01-Jan-2013    1      0     1            NaN       NaN             NaN            NaN       100 
6     Bond [Cell]     01-Jan-2010    01-Jan-2014    1      0     1            NaN       NaN             NaN            NaN       100 
 

Создайте BDTTree и оцените инструменты. Сборка дерево Принимает энергозависимость, чтобы быть 10%

Sigma = 0.1;  
BDTTimeSpec = bdttimespec(ValuationDate, EndDates, Compounding);
BDTVolSpec = bdtvolspec(ValuationDate, EndDates, Sigma*ones(1, length(EndDates))');
BDTT = bdttree(BDTVolSpec, RS, BDTTimeSpec);

%The first three rows corresponds to the price of the stepped callable bonds and the
%last three rows corresponds to the price of the stepped vanilla bonds.
PBDT = bdtprice(BDTT, ISet)
PBDT = 6×1

  100.4799
  100.3228
  100.0840
  100.7368
  100.9266
  101.0115

Вычислите цену портфеля с примечаниями области значений и долговым обязательством с плавающей ставкой с помощью следующих данных: данные для структуры термина процентной ставки следующие:

Rates = [0.035; 0.042147; 0.047345; 0.052707];
ValuationDate = 'Jan-1-2011';
StartDates = ValuationDate;
EndDates = {'Jan-1-2012'; 'Jan-1-2013'; 'Jan-1-2014'; 'Jan-1-2015'};
Compounding = 1;

%  Create RateSpec
RS = intenvset('ValuationDate', ValuationDate, 'StartDates', StartDates,...
'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding);
  
% Create an instrument portfolio with two range notes and a floating rate
% note with the following data:
Spread = 200;
Settle = 'Jan-1-2011';
Maturity = 'Jan-1-2014';

% First Range Note:
RateSched(1).Dates = {'Jan-1-2012'; 'Jan-1-2013'  ; 'Jan-1-2014'};
RateSched(1).Rates  = [0.045 0.055; 0.0525  0.0675; 0.06 0.08];

% Second Range Note:
RateSched(2).Dates = {'Jan-1-2012'; 'Jan-1-2013' ; 'Jan-1-2014'};
RateSched(2).Rates  = [0.048 0.059; 0.055  0.068 ; 0.07 0.09];

% Create InstSet
InstSet = instadd('RangeFloat', Spread, Settle, Maturity, RateSched);

% Add a floating-rate note
InstSet = instadd(InstSet, 'Float', Spread, Settle, Maturity);

% Display the portfolio instrument
instdisp(InstSet)
Index Type       Spread Settle         Maturity       RateSched FloatReset Basis Principal EndMonthRule
1     RangeFloat 200    01-Jan-2011    01-Jan-2014    [Struct]  1          0     100       1           
2     RangeFloat 200    01-Jan-2011    01-Jan-2014    [Struct]  1          0     100       1           
 
Index Type  Spread Settle         Maturity       FloatReset Basis Principal EndMonthRule CapRate FloorRate
3     Float 200    01-Jan-2011    01-Jan-2014    1          0     100       1            Inf     -Inf     
 

Создайте BDTTree и оцените инструменты. Сборка дерево Принимает энергозависимость, чтобы быть 10%.

Sigma = 0.1;  
BDTTS = bdttimespec(ValuationDate, EndDates, Compounding);
BDTVS = bdtvolspec(ValuationDate, EndDates, Sigma*ones(1, length(EndDates))');
BDTT = bdttree(BDTVS, RS, BDTTS);

% Price the portfolio 
Price = bdtprice(BDTT, InstSet)
Price = 3×1

  100.2841
   98.0757
  105.5147

Используйте instswap, чтобы создать подкачку плавающую плавающую и оценить подкачку с bdtprice.

RateSpec = intenvset('Rates',.05,'StartDate',today,'EndDate',datemnth(today,60));
IS = instswap([.02 .03],today,datemnth(today,60),[], [], [], [1 1]);
VolSpec = bdtvolspec(today,datemnth(today,[10 60]),[.01 .02]);
TimeSpec = bdttimespec(today,cfdates(today,datemnth(today,60),1));
BDTTree = bdttree(VolSpec,RateSpec,TimeSpec);
bdtprice(BDTTree,IS)
ans = -4.3220

Используйте instswap, чтобы создать несколько подкачек и оценить подкачки с bdtprice.

RateSpec = intenvset('Rates',.05,'StartDate',today,'EndDate',datemnth(today,60));
IS = instswap([.03 .02],today,datemnth(today,60),[], [], [], [1 1]);
IS = instswap(IS,[200 300],today,datemnth(today,60),[], [], [], [0 0]);
IS = instswap(IS,[.08 300],today,datemnth(today,60),[], [], [], [1 0]);
VolSpec = bdtvolspec(today,datemnth(today,[10 60]),[.01 .02]);
TimeSpec = bdttimespec(today,cfdates(today,datemnth(today,60),1));
BDTTree = bdttree(VolSpec,RateSpec,TimeSpec);
bdtprice(BDTTree,IS)
ans =

    4.3220
   -4.3220
   -0.2701

Входные параметры

свернуть все

Древовидная структура процентной ставки, заданная при помощи bdttree.

Типы данных: struct

Переменная Instrument, содержащая набор инструментов NINST, заданное использование instadd. Инструменты категоризированы типом; каждый тип может иметь различные поля данных. Сохраненное поле данных является вектором - строкой или вектором символов для каждого инструмента.

Типы данных: struct

(Необязательно) Производные оценивая структуру опций, созданное использование derivset.

Типы данных: struct

Выходные аргументы

свернуть все

Цена за каждый инструмент во время 0, возвращенный как NINST-by-1 вектор. Цены вычисляются обратным динамическим программированием на дереве процентной ставки. Если инструмент не может быть оценен, NaN возвращен в той записи.

Связанные функции оценки одно типа:

  • bondbybdt — Оцените связь от дерева BDT.

  • capbybdt — Оцените прописную букву от дерева BDT.

  • cfbybdt — Оцените произвольный набор потоков наличности от дерева BDT.

  • fixedbybdt — Оцените примечание с фиксированной процентной ставкой от дерева BDT.

  • floatbybdt — Оцените долговое обязательство с плавающей ставкой от дерева BDT.

  • floorbybdt — Оцените пол от дерева BDT.

  • optbndbybdt — Оцените опцию связи от дерева BDT.

  • optfloatbybdt — Оцените долговое обязательство с плавающей ставкой с опцией от дерева BDT.

  • optemfloatbybdt — Оцените долговое обязательство с плавающей ставкой со встроенной опцией от дерева BDT.

  • optembndbybdt — Оцените связь со встроенной опцией деревом BDT.

  • rangefloatbybdt — Диапазон цен, плавающий примечание с помощью дерева BDT.

  • swapbybdt — Оцените подкачку от дерева BDT.

  • swaptionbybdt — Оцените swaption от дерева BDT.

Древовидная структура цен на инструменты, возвращенных как структура MATLAB® деревьев, содержащих векторы цен на инструменты и начисленных процентов, и вектор времен наблюдения для каждого узла. В PriceTree:

  • PriceTree.PTree содержит чистые цены.

  • PriceTree.AITree содержит начисленные проценты.

  • PriceTree.tObs содержит времена наблюдения.

Представлено до R2006a