exponenta event banner

optembndbybdt

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

Описание

пример

[Price,PriceTree] = optembndbybdt(BDTTree,CouponRate,Settle,Maturity,OptSpec,Strike,ExerciseDates) вычисляет цену для облигаций со встроенными опционами из дерева процентных ставок Black-Derman-Toy и возвращает вероятности упражнений в PriceTree.

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

пример

[Price,PriceTree] = optembndbybdt(___,Name,Value) добавляет необязательные аргументы пары имя-значение.

Примеры

свернуть все

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

ZeroRates = [ 0.035;0.04;0.045];
Compounding = 1;
StartDates = ['jan-1-2007';'jan-1-2008';'jan-1-2009'];
EndDates   = ['jan-1-2008';'jan-1-2009';'jan-1-2010'];
ValuationDate = 'jan-1-2007';

Создать RateSpec.

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

Создать VolSpec.

Volatility = 0.10 * ones (3,1);
VolSpec = bdtvolspec(ValuationDate, EndDates, Volatility)
VolSpec = struct with fields:
             FinObj: 'BDTVolSpec'
      ValuationDate: 733043
           VolDates: [3x1 double]
           VolCurve: [3x1 double]
    VolInterpMethod: 'linear'

Создать TimeSpec.

TimeSpec = bdttimespec(ValuationDate, EndDates, Compounding);

Построить BDTTree.

BDTTree = bdttree(VolSpec, RateSpec, TimeSpec)
BDTTree = struct with fields:
      FinObj: 'BDTFwdTree'
     VolSpec: [1x1 struct]
    TimeSpec: [1x1 struct]
    RateSpec: [1x1 struct]
        tObs: [0 1 2]
        dObs: [733043 733408 733774]
        TFwd: {[3x1 double]  [2x1 double]  [2]}
      CFlowT: {[3x1 double]  [2x1 double]  [3]}
     FwdTree: {[1.0350]  [1.0406 1.0495]  [1.0447 1.0546 1.0667]}

Для расчета цены американской облигационной облигации, которая выплачивает годовой купон в размере 5,25%, имеет срок погашения в Jan-1-2010 и может быть вызвана по Jan-1-2008 и 01-Jan-2010.

BondSettlement = 'jan-1-2007';
BondMaturity   = 'jan-1-2010'; 
CouponRate = 0.0525;
Period = 1;
OptSpec = 'call'; 
Strike = [100];  
ExerciseDates = {'jan-1-2008' '01-Jan-2010'}; 
AmericanOpt = 1;

PriceCallBond = optembndbybdt(BDTTree, CouponRate, BondSettlement, BondMaturity,...
OptSpec, Strike, ExerciseDates, 'Period', 1,'AmericanOp', 1)
PriceCallBond = 101.4750

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

ZeroRates = [ 0.025;0.03;0.045];
Compounding = 1;
StartDates = ['jan-1-2007';'jan-1-2008';'jan-1-2009'];
EndDates   = ['jan-1-2008';'jan-1-2009';'jan-1-2010'];
ValuationDate = 'jan-1-2007';

Создать RateSpec.

RateSpec = intenvset('Rates', ZeroRates, 'StartDates', ValuationDate, 'EndDates', ...
EndDates, 'Compounding', Compounding, 'ValuationDate', ValuationDate);

Создайте дерево BDT со следующими данными.

Volatility = 0.10 * ones (3,1);
VolSpec = bdtvolspec(ValuationDate, EndDates, Volatility)
VolSpec = struct with fields:
             FinObj: 'BDTVolSpec'
      ValuationDate: 733043
           VolDates: [3x1 double]
           VolCurve: [3x1 double]
    VolInterpMethod: 'linear'

TimeSpec = bdttimespec(ValuationDate, EndDates, Compounding);
BDTTree = bdttree(VolSpec, RateSpec, TimeSpec)
BDTTree = struct with fields:
      FinObj: 'BDTFwdTree'
     VolSpec: [1x1 struct]
    TimeSpec: [1x1 struct]
    RateSpec: [1x1 struct]
        tObs: [0 1 2]
        dObs: [733043 733408 733774]
        TFwd: {[3x1 double]  [2x1 double]  [2]}
      CFlowT: {[3x1 double]  [2x1 double]  [3]}
     FwdTree: {[1.0250]  [1.0315 1.0385]  [1.0614 1.0750 1.0917]}

Определите инструменты вызываемых облигаций.

Settle = '01-Jan-2007';
Maturity = {'01-Jan-2008';'01-Jan-2010'};
CouponRate = {{'01-Jan-2008' .0425;'01-Jan-2010' .0450}};  
OptSpec='call';
Strike= [86;90];
ExerciseDates= {'01-Jan-2008';'01-Jan-2010'};

Цена инструментов.

[Price, PriceTree]= optembndbybdt(BDTTree, CouponRate,  Settle, Maturity, OptSpec, Strike,...
ExerciseDates, 'Period', 1,'AmericanOp', 1)
Price = 2×1

    86
    90

PriceTree = struct with fields:
                FinObj: 'BDTPriceTree'
                  tObs: [0 1 2 3]
                 PTree: {1x4 cell}
              ProbTree: {[1]  [0.5000 0.5000]  [0.2500 0.5000 0.2500]  [1x3 double]}
                ExTree: {1x4 cell}
            ExProbTree: {1x4 cell}
    ExProbsByTreeLevel: [2x4 double]

Осмотрите выходные данные PriceTree.ExTree. PriceTree.ExTree содержит массивы индикаторов упражнений. Каждый элемент массива ячеек является массивом, содержащим 1где используется опцион и 0Там, где его нет.

PriceTree.ExTree{4} 
ans = 2×3

     0     0     0
     1     1     1

Отсутствует упражнение для инструмента 1, и инструмент 2 выполняется во всех узлах.

PriceTree.ExTree{3} 
ans = 2×3

     0     0     0
     0     0     0

Отсутствует упражнение для инструмента 1 или инструмента 2.

PriceTree.ExTree{2} 
ans = 2×2

     1     1
     1     0

Во всех узлах выполняется упражнение на инструмент 1, а в некоторых узлах - упражнение на инструмент 2.

Следующий просмотр вероятности достижения каждого узла из корневого узла с помощью PriceTree.ProbTree.

PriceTree.ProbTree{2}
ans = 1×2

    0.5000    0.5000

PriceTree.ProbTree{3}
ans = 1×3

    0.2500    0.5000    0.2500

PriceTree.ProbTree{4}
ans = 1×3

    0.2500    0.5000    0.2500

Затем просмотрите вероятности упражнений с помощью PriceTree.ExProbTree. PriceTree.ExProbTree содержит вероятности упражнений. Каждый элемент в массиве ячеек представляет собой массив, содержащий 0 элементов, где нет упражнений, или вероятность достижения узла, где упражнение происходит.

PriceTree.ExProbTree{4}
ans = 2×3

         0         0         0
    0.2500    0.5000    0.2500

PriceTree.ExProbTree{3}
ans = 2×3

     0     0     0
     0     0     0

PriceTree.ExProbTree{2}
ans = 2×2

    0.5000    0.5000
    0.5000         0

Просмотр вероятностей упражнений на каждом уровне дерева с помощью PriceTree.ExProbsByTreeLevel. PriceTree.ExProbsByTreeLevel - массив с каждой строкой, имеющей вероятность упражнения для данной опции в каждое время наблюдения дерева.

PriceTree.ExProbsByTreeLevel
ans = 2×4

    1.0000    1.0000         0         0
    1.0000    0.5000         0    1.0000

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

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);

% Instrument
Settle = '01-Jan-2010';
Maturity = {'01-Jan-2013';'01-Jan-2014'};
CouponRate = {{'01-Jan-2012' .0425;'01-Jan-2014' .0750}};  
OptSpec='call';
Strike=100;
ExerciseDates='01-Jan-2012';  %Callable in two years

% Build the tree
% Assume the volatility to be 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 row corresponds to the price of the callable bond with maturity 
% of three years. The second row corresponds to the price of the callable bond
% with maturity of four years.
PBDT=  optembndbybdt(BDTT, CouponRate, Settle, Maturity ,OptSpec, Strike,...
ExerciseDates, 'Period', 1)
PBDT = 2×1

  100.0945
  100.0297

Корпорация выпускает трехлетнюю облигацию с обязательством тонущего фонда, требующим от компании растратить 1/3 номинальной стоимости после первого года и 1/3 после второго года. У компании есть возможность купить облигации на рынке или назвать их по $98. Следующие данные описывают подробные данные, необходимые для расчета цены облигации тонущего фонда:

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

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

% Build the BDT tree
% Assume the volatility to be 10%
Sigma = 0.1;  
BDTTimeSpec = bdttimespec(ValuationDate, EndDates);
BDTVolSpec = bdtvolspec(ValuationDate, EndDates, Sigma*ones(1, length(EndDates))');
BDTT = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec);

% Instrument
% The bond has a coupon rate of 9%, a period of one year and matures in
% 1-Jan-2014. Face decreases 1/3 after the first year and 1/3 after the 
% second year.
CouponRate = 0.09;
Settle = 'Jan-1-2011';
Maturity =  'Jan-1-2014';
Period = 1;
Face = { ...        
            {'Jan-1-2012'  100; ...
             'Jan-1-2013'   66.6666; ...
             'Jan-1-2014'   33.3333};
        };

% Option provision
OptSpec = 'call'; 
Strike = [98 98];
ExerciseDates ={'Jan-1-2012', 'Jan-1-2013'};

% Price of non-sinking fund bond. 
PNSF = bondbybdt(BDTT, CouponRate, Settle, Maturity, Period)
PNSF = 97.5131

Цена облигации с опционным провизором.

PriceSF = optembndbybdt(BDTT, CouponRate, Settle, Maturity,...
OptSpec, Strike, ExerciseDates,'Period', Period, 'Face', Face)
PriceSF = 96.8364

В этом примере показано, как оценить амортизирующую вызываемую связь и ванильную вызываемую связь с использованием модели решетки BDT.

Создать RateSpec.

Rates = [0.025;0.028;0.030;0.031];
ValuationDate = 'Jan-1-2018';
StartDates = ValuationDate;
EndDates = {'Jan-1-2019'; 'Jan-1-2020'; 'Jan-1-2021'; 'Jan-1-2022'};
Compounding = 1;
RateSpec = intenvset('ValuationDate', ValuationDate, 'StartDates',...
StartDates, 'EndDates', EndDates, 'Rates', Rates, 'Compounding', Compounding);

Построить дерево BDT и предположить волатильность 5%.

Sigma = 0.05;  
BDTTimeSpec = bdttimespec(ValuationDate, EndDates);
BDTVolSpec = bdtvolspec(ValuationDate, EndDates, Sigma*ones(1, length(EndDates))');
BDTT = bdttree(BDTVolSpec, RateSpec, BDTTimeSpec);

Определите вызываемую связь.

CouponRate = 0.05;
Settle = 'Jan-1-2018';
Maturity =  'Jan-1-2021';
Period = 1;
    
    Face = { 
                 {'Jan-1-2019'  100; 
                  'Jan-1-2020'   70; ...
                   'Jan-1-2021'   50};
                 };
 
OptSpec = 'call'; 
Strike = [97 95 93];
ExerciseDates ={'Jan-1-2019' 'Jan-1-2020' 'Jan-1-2021'};

Цена вызываемой амортизирующей облигации с использованием дерева BDT.

BondType = 'amortizing';
Pcallbonds = optembndbybdt(BDTT, CouponRate, Settle, Maturity, OptSpec, Strike, ExerciseDates, 'Period', Period,'Face',Face,'BondType', BondType)
Pcallbonds = 99.5122

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

свернуть все

Древовидная структура процентных ставок, определенная с помощью bdttree.

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

Ставка купонного вознаграждения по облигациям, указанная как NINSTоколо-1 десятичная годовая ставка или NINSTоколо-1 массив ячеек, где каждый элемент является NumDatesоколо-2 массив ячеек. Первый столбец NumDatesоколо-2 массив ячеек - даты, а второй столбец - связанные скорости. Дата указывает последний день, когда действительна ставка купона.

Типы данных: double | cell

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

Примечание

Settle для каждой облигации устанавливается дата ValuationDate дерева BDT. Аргумент облигации Settle игнорируется.

Типы данных: double | char

Дата погашения, указанная как NINSTоколо-1 вектор серийных номеров дат или векторы символов дат.

Типы данных: double | char

Определение опции, указанной как NINSTоколо-1 клеточный массив символьных векторов.

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

Цена страйка опциона, указанная как NINSTоколо-1 или NINSTоколо-NSTRIKES в зависимости от типа опции:

  • Европейский вариант - NINSTоколо-1 вектор значений цены страйка.

  • Вариант на Бермудских островах - NINST по количеству ударов (NSTRIKES) матрица значений цены страйка. Каждая строка является расписанием для одного варианта. Если параметр имеет менее NSTRIKES возможности упражнений, конец строки дополнен NaNs.

  • Американский вариант - NINSTоколо-1 вектор значений цены страйка для каждого варианта.

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

Даты исполнения опциона, указанные как NINSTоколо-1, NINSTоколо-2, или NINSTоколо-NSTRIKES использование серийных номеров дат или векторов символов дат в зависимости от типа опции:

  • Для европейского варианта используйте NINSTоколо-1 вектор дат. Для европейского варианта есть только один ExerciseDates на дату истечения срока действия опциона.

  • Для варианта на Бермудских островах используйте NINSTоколо-NSTRIKES вектор дат.

  • Для американского варианта используйте NINSTоколо-2 вектор границ даты упражнения. Опцион может быть реализован на любую дату между или включая пару дат в этой строке. Если только один не -NaN дата указана, или если ExerciseDates является NINSTоколо-1 вектор, вариант может быть реализован между ValuationDate дерева акций и отдельного списка ExerciseDates.

Типы данных: double | char

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: Price = optembndbybdt(BDTTree,CouponRate,Settle,Maturity,OptSpec,Strike,ExerciseDates,'Period',1,'AmericanOp',1)

Тип опции, указанный как разделенная запятыми пара, состоящая из 'AmericanOpt' и NINSTоколо-1 положительные целочисленные флаги со значениями:

  • 0 - Европейский/Бермудские острова

  • 1 - американский

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

Купоны в год, указанные как пара, разделенная запятыми, состоящая из 'Period' и NINSTоколо-1 вектор.

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

Базисное число дней, указанное как пара, разделенная запятыми, состоящая из 'Basis' и NINSTоколо-1 вектор целых чисел.

  • 0 = факт/факт

  • 1 = 30/360 (SIA)

  • 2 = фактически/360

  • 3 = факт/365

  • 4 = 30/360 (PSA)

  • 5 = 30/360 (ISDA)

  • 6 = 30/360 (европейский)

  • 7 = факт/365 (японский)

  • 8 = факт/факт (ICMA)

  • 9 = факт/360 (ICMA)

  • 10 = факт/365 (ICMA)

  • 11 = 30/360E (ICMA)

  • 12 = факт/365 (ISDA)

  • 13 = BUS/252

Дополнительные сведения см. в разделе Базис.

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

Флаг правила конца месяца, заданный как пара, разделенная запятыми, состоящая из 'EndMonthRule' и неотрицательное целое число с использованием NINSTоколо-1 вектор. Это правило применяется только в том случае, если Maturity - дата окончания месяца, имеющая 30 или менее дней.

  • 0 = Игнорировать правило, означающее, что дата выплаты бонусного купона всегда совпадает с числовым днем месяца.

  • 1 = Установить правило, означающее, что дата выплаты бонусного купона всегда является последним фактическим днем месяца.

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

Дата выпуска облигаций, указанная как пара, разделенная запятыми, состоящая из 'IssueDate' и NINSTоколо-1 вектор с использованием серийных номеров дат или векторов символов даты.

Типы данных: double | char

Неправильная дата первого купона, указанная как пара, разделенная запятыми, состоящая из 'FirstCouponDate' и NINSTоколо-1 вектор с использованием векторов даты или символов даты.

Когда FirstCouponDate и LastCouponDate оба указаны, FirstCouponDate имеет приоритет при определении структуры купонных выплат. Если не указать FirstCouponDateдаты оплаты денежного потока определяются из других входных данных.

Типы данных: double | char

Неправильная дата последнего купона, указанная как пара, разделенная запятыми, состоящая из 'LastCouponDate' и NINSTоколо-1 вектор с использованием серийных номеров дат или векторов символов даты.

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

Типы данных: char | double

Форвардная дата начала выплат (дата, с которой рассматривается денежный поток облигации), указанная как пара, разделенная запятыми, состоящая из 'StartDate' и NINSTоколо-1 вектор с использованием серийных номеров дат или векторов символов даты.

Если не указать StartDate, дата начала действия - Settle дата.

Типы данных: char | double

Номинал или номинальная стоимость, указанная как пара, разделенная запятыми, состоящая из 'Face' и NINSTоколо-1 вектор или NINSTоколо-1 массив ячеек, где каждый элемент является NumDatesоколо-2 массив ячеек, где первый столбец является датами, а второй столбец - связанным номиналом. Дата указывает последний день, когда номинал является действительным.

Примечание

Приборы без Face график рассматриваются как ванильные или ступенчатые купонные облигации со встроенными опциями.

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

Тип нижележащей связи, определяемый как разделенная запятыми пара, состоящая из 'BondType' и NINSTоколо-1 клеточный массив символьных векторов или строковый массив, определяющий, является ли андерлаинг ванильной связью, амортизирующей облигацией или вызываемой фондовой облигацией. Поддерживаются следующие типы:

  • 'vanilla'- стандартная вызываемая или устанавливаемая связь со скаляром Face стоимость и один купон или ступенчатые купоны.

  • 'callablesinking' является облигацией с графиком Face значения и предоставление вызова тонущего фонда с одним или ступенчатыми купонами.

  • 'amortizing' - амортизирующая вызываемая или путаемая связь с расписанием Face значения с одинарными или ступенчатыми купонами.

Типы данных: char | string

Опционы ценообразования деривативов, указанные как пара, разделенная запятыми, состоящая из 'Options' и структура, которая создается с помощью derivset.

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

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

свернуть все

Ожидаемая цена встроенного варианта в момент времени 0, возвращено как NINSTоколо-1 матрица.

Структура, содержащая деревья векторов цен приборов, вектор времени наблюдения для каждого узла и вероятности упражнений. Значения:

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

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

  • PriceTree.ExTree содержит массивы индикаторов упражнений. Каждый элемент массива ячеек является массивом, содержащим 1где используется опцион и 0Там, где его нет.

  • PriceTree.ProbTree содержит вероятность достижения каждого узла из корневого узла.

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

  • PriceTree.ExProbsByTreeLevel - массив с каждой строкой, имеющей вероятность упражнения для данной опции в каждое время наблюдения дерева.

Подробнее

свернуть все

Ванильная связь со встроенной опцией

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

Эмитент облигации осуществляет периодические выплаты процентов до погашения облигации. При погашении эмитент выплачивает держателю облигации сумму основного долга (номинальную стоимость) и последний платеж по процентам. Ванильная облигация со встроенным опционом - это то, где опционный контракт имеет основной актив ванильной облигации.

Ступенчатая купонная связь с функциями Callable и Puttable

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

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

Фондовая облигация с встроенным опционом Call

Фондовая облигация - это купонная облигация с фондовым обеспечением.

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

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

Амортизирующая вызываемая или путабельная облигация

Амортизирующие вызываемые или путаемые облигации работают по расписанию Face.

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

Представлен в R2008a