bkprice

Цены на инструменты из дерева процентных ставок Black-Karasinski

Описание

пример

[Price,PriceTree] = bkprice(BKTree,InstSet) вычисляет бесплатные арбитражные цены на инструменты с помощью дерева процентных ставок, созданного с bktree. Все инструменты, содержащиеся в переменной финансового инструмента, InstSet, оценены.

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

пример

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

Примеры

свернуть все

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

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

instdisp(BKSubSet)
Index Type CouponRate Settle         Maturity       Period Basis EndMonthRule IssueDate FirstCouponDate LastCouponDate StartDate Face Name    Quantity
1     Bond 0.03       01-Jan-2004    01-Jan-2007    1      0     1            NaN       NaN             NaN            NaN       100  3% bond 20      
2     Bond 0.03       01-Jan-2004    01-Jan-2008    1      0     1            NaN       NaN             NaN            NaN       100  3% bond 15      
 
Index Type Strike Settle         Maturity       CapReset Basis Principal Name   Quantity
3     Cap  0.04   01-Jan-2004    01-Jan-2008    1        0     100       4% Cap 10      
 
[Price, PriceTree] = bkprice(BKTree, BKSubSet)
Price = 3×1

   98.1096
   95.6734
    2.2706

PriceTree = struct with fields:
     FinObj: 'BKPriceTree'
      PTree: {1x5 cell}
     AITree: {1x5 cell}
       tObs: [0 1 2 3 4]
    Connect: {[2]  [2 3 4]  [2 2 3 4 4]}
      Probs: {[3x1 double]  [3x3 double]  [3x5 double]}

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

Оценить следующие многоступенчатые купонные облигации используя следующие данные:

% The data for the interest rate term structure is as follows:
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}};

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 
 

Создайте BKTree со следующими данными:

VolDates = ['1-Jan-2011'; '1-Jan-2012'; '1-Jan-2013'; '1-Jan-2014'];
VolCurve = 0.01;
AlphaDates = '01-01-2014';
AlphaCurve = 0.1;

BKVolSpec = bkvolspec(RS.ValuationDate, VolDates, VolCurve,... 
AlphaDates, AlphaCurve);
BKTimeSpec = bktimespec(RS.ValuationDate, VolDates, Compounding);
BKT = bktree(BKVolSpec, RS, BKTimeSpec);

Рассчитать цену ступенчатых купонных облигаций.

PBK = bkprice(BKT, ISet)
PBK = 4×1

  100.6763
  100.7368
  100.9266
  101.0115

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

% The data for the interest rate term structure is as follows:
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 
 

Создайте BKTree со следующими данными:

VolDates = ['1-Jan-2011'; '1-Jan-2012'; '1-Jan-2013'; '1-Jan-2014'];
VolCurve = 0.01;
AlphaDates = '01-01-2014';
AlphaCurve = 0.1;

BKVolSpec = bkvolspec(RS.ValuationDate, VolDates, VolCurve,... 
AlphaDates, AlphaCurve);
BKTimeSpec = bktimespec(RS.ValuationDate, VolDates, Compounding);
BKT = bktree(BKVolSpec, RS, BKTimeSpec);

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

PBK = bkprice(BKT, ISet)
PBK = 6×1

  100.6729
  100.6763
  100.6763
  100.7368
  100.9266
  101.0115

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

% The data for the interest rate term structure is as follows:
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     
 

Создайте BKTree со следующими данными:

VolDates = ['1-Jan-2012'; '1-Jan-2013'; '1-Jan-2014';'1-Jan-2015'];
VolCurve = 0.01;
AlphaDates = '01-01-2015';
AlphaCurve = 0.1;

BKVS = bkvolspec(RS.ValuationDate, VolDates, VolCurve,... 
AlphaDates, AlphaCurve);
BKTS = bktimespec(RS.ValuationDate, VolDates, Compounding);
BKT = bktree(BKVS, RS, BKTS);

Оцените портфель.

Price = bkprice(BKT, InstSet)
Price = 3×1

  105.5147
  101.4805
  105.5147

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

свернуть все

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

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

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

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

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

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

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

свернуть все

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

Связанными однотипными функциями ценообразования являются:

  • bondbybk - Цена облигации с черно-карасинского дерева.

  • capbybk - Цена прописной буквы с черно-карасинского дерева.

  • cfbybk - Цена произвольного набора денежных потоков из черно-карасинского дерева.

  • fixedbybk - Цена фиксированного тарифа из дерева Black-Karasinski.

  • floatbybk - Цена купюры с плавающей ставкой с черно-карасинского дерева.

  • floorbybk - Цена этажа с черно-карасинского дерева.

  • optbndbybk - Цена опциона облигации с черно-карасинского дерева.

  • optembndbybk - Цена облигации со встроенной опцией с помощью черно-карасинского дерева.

  • optfloatbybk - Цена купюры с плавающей ставкой с опцией из дерева Black-Karasinski.

  • optemfloatbybk - Цена купюры с плавающей ставкой с встроенной опцией из дерева Black-Karasinski.

  • rangefloatbybk - Ценовая область значений плавающей ноты из черно-карасинского дерева.

  • swapbybk - Цена своп с черно-карасинского дерева.

  • swaptionbybk - Цена свопциона с черно-карасинского дерева.

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

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

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

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

  • PriceTree.Connect содержит векторы связности. Каждый элемент массива ячеек описывает, как узлы на этом уровне соединяются с следующим. Для заданного уровня дерева существуют NumNodes элементы в векторе, и они содержат индекс узла на следующем уровне, с которым соединяется средняя ветвь. Вычитание 1 из этого значения указывает, где соединяется восходящая ветвь, и добавление 1 указывает, где соединяется нисходящая ветвь.

  • PriceTree.Probs содержит массивы вероятностей. Каждый элемент массива ячеек содержит вероятности перехода вверх, посередине и вниз для каждого узла уровня.

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