exponenta event banner

optembndbycir

Ценовые облигации со встроенными опционами по дереву процентных ставок Cox-Ingersoll-Ross

Описание

пример

[Price,PriceTree] = optembndbycir(CIRTree,CouponRate,Settle,Maturity,OptSpec,Strike,ExerciseDates) вычисляет цену для облигаций со встроенными опционами из дерева процентных ставок Cox-Ingersoll-Ross (CIR) и возвращает вероятности исполнения в PriceTree.

optembndbycir вычисляет цены ванильных облигаций со встроенными опционами, ступенчатых купонных облигаций со встроенными опционами, амортизирующих облигаций со встроенными опционами и тонущих облигаций фонда со встроенным опционом колл с использованием модели CIR++ с подходом Навалька-Беляева (NB). Дополнительные сведения см. в разделе Дополнительные сведения.

пример

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

Примеры

свернуть все

Создать RateSpec с использованием intenvset функция.

Rates = [0.025; 0.032; 0.037; 0.042]; 
Dates = {'Jan-1-2017'; 'Jan-1-2018'; 'Jan-1-2019'; 'Jan-1-2020'; 'Jan-1-2021'}; 
ValuationDate = 'Jan-1-2017'; 
EndDates = Dates(2:end)'; 
Compounding = 1; 
RateSpec = intenvset('ValuationDate', ValuationDate, 'StartDates', ValuationDate, 'EndDates',EndDates,'Rates', Rates, 'Compounding', Compounding); 

Создать CIR дерево.

NumPeriods = length(EndDates); 
Alpha = 0.03; 
Theta = 0.02;  
Sigma = 0.1;
Maturity = '01-Jan-2018'; 
CIRTimeSpec = cirtimespec(ValuationDate, Maturity, NumPeriods); 
CIRVolSpec = cirvolspec(Sigma, Alpha, Theta); 
CIRT = cirtree(CIRVolSpec, RateSpec, CIRTimeSpec)
CIRT = struct with fields:
      FinObj: 'CIRFwdTree'
     VolSpec: [1x1 struct]
    TimeSpec: [1x1 struct]
    RateSpec: [1x1 struct]
        tObs: [0 0.2500 0.5000 0.7500]
        dObs: [736696 736787 736878 736969]
     FwdTree: {[1.0062]  [1.0090 1.0062 1.0039]  [1x5 double]  [1x7 double]}
     Connect: {[3x1 double]  [3x3 double]  [3x5 double]}
       Probs: {[3x1 double]  [3x3 double]  [3x5 double]}

Определите соединение с помощью встроенного дополнительного инструмента.

BondSettlement = 'Jan-1-2017';
BondMaturity   = 'Jan-1-2020'; 
CouponRate = 0.035;
Period = 1;
OptSpec = 'put'; 
Strike = 100;  
ExerciseDates = {'Jan-1-2018' '01-Jan-2019'}; 

Цена облигации.

[Price,PriceTree] = optembndbycir(CIRT,CouponRate,BondSettlement,BondMaturity,OptSpec,...
Strike,ExerciseDates,'AmericanOpt',1,'Period',1)
Price = 103.3099
PriceTree = struct with fields:
                FinObj: 'CIRPriceTree'
                  tObs: [0 0.2500 0.5000 0.7500 1]
                 PTree: {1x5 cell}
              ProbTree: {1x5 cell}
                ExTree: {[0]  [0 0 0]  [0 0 0 0 0]  [0 0 0 0 0 0 0]  [1 1 1 0 0 0 0]}
            ExProbTree: {[0]  [0 0 0]  [0 0 0 0 0]  [0 0 0 0 0 0 0]  [1x7 double]}
    ExProbsByTreeLevel: [0 0 0 0 0.3089]
               Connect: {[3x1 double]  [3x3 double]  [3x5 double]}

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

Rates = [0.025; 0.027; 0.028; 0.03]; 
Dates = {'Jan-1-2017'; 'Jan-1-2018'; 'Jan-1-2019'; 'Jan-1-2020'; 'Jan-1-2021'}; 
ValuationDate = 'Jan-1-2017'; 
EndDates = Dates(2:end)'; 
Compounding = 1; 

Создать RateSpec.

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

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

NumPeriods = length(EndDates); 
Alpha = 0.03; 
Theta = 0.02;  
Sigma = 0.1;
Maturity = '01-Jan-2018'; 
CIRTimeSpec = cirtimespec(ValuationDate, Maturity, NumPeriods); 
CIRVolSpec = cirvolspec(Sigma, Alpha, Theta); 
CIRT = cirtree(CIRVolSpec, RateSpec, CIRTimeSpec);

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

Settle = '01-Jan-2017';
Maturity = {'01-Jan-2018';'01-Jan-2020'};
CouponRate = {{'01-Jan-2019' .0325;'01-Jan-2020' .0375}};  
OptSpec='call';
Strike= [100;110];
ExerciseDates= {'01-Jan-2018';'01-Jan-2020'};

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

[Price, PriceTree]= optembndbycir(CIRT, CouponRate,  Settle, Maturity, OptSpec, Strike,...
ExerciseDates, 'Period', 1,'AmericanOpt',1)
Price = 2×1

   98.1718
  102.6458

PriceTree = struct with fields:
                FinObj: 'CIRPriceTree'
                  tObs: [0 0.2500 0.5000 0.7500 1]
                 PTree: {1x5 cell}
              ProbTree: {1x5 cell}
                ExTree: {1x5 cell}
            ExProbTree: {1x5 cell}
    ExProbsByTreeLevel: [2x5 double]
               Connect: {[3x1 double]  [3x3 double]  [3x5 double]}

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

PriceTree.ExTree{4} 
ans = 2×7

     0     0     0     0     0     0     0
     0     0     0     0     0     0     0

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

PriceTree.ExTree{3} 
ans = 2×5

     0     0     0     0     0
     0     0     0     0     0

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

PriceTree.ExTree{2} 
ans = 2×3

     0     0     0
     0     0     0

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

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

PriceTree.ProbTree{2}
ans = 1×3

    0.2794    0.3750    0.3456

PriceTree.ProbTree{3}
ans = 1×5

    0.0786    0.2095    0.3318    0.2592    0.1209

PriceTree.ProbTree{4}
ans = 1×7

    0.0222    0.0885    0.1982    0.2678    0.2442    0.1360    0.0432

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

PriceTree.ExProbTree{4}
ans = 2×7

     0     0     0     0     0     0     0
     0     0     0     0     0     0     0

PriceTree.ExProbTree{3}
ans = 2×5

     0     0     0     0     0
     0     0     0     0     0

PriceTree.ExProbTree{2}
ans = 2×3

     0     0     0
     0     0     0

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

PriceTree.ExProbsByTreeLevel
ans = 2×5

     0     0     0     0     0
     0     0     0     0     0

Создать RateSpec с использованием intenvset функция.

Rates = [0.025; 0.032; 0.037; 0.042]; 
Dates = {'Jan-1-2017'; 'Jan-1-2018'; 'Jan-1-2019'; 'Jan-1-2020'; 'Jan-1-2021'}; 
ValuationDate = 'Jan-1-2017'; 
EndDates = Dates(2:end)'; 
Compounding = 1; 
RateSpec = intenvset('ValuationDate', ValuationDate, 'StartDates', ValuationDate, 'EndDates',EndDates,'Rates', Rates, 'Compounding', Compounding); 

Создать CIR дерево.

NumPeriods = length(EndDates); 
Alpha = 0.03; 
Theta = 0.02;  
Sigma = 0.1;
Maturity = '01-Jan-2018'; 
CIRTimeSpec = cirtimespec(ValuationDate, Maturity, NumPeriods); 
CIRVolSpec = cirvolspec(Sigma, Alpha, Theta); 
CIRT = cirtree(CIRVolSpec, RateSpec, CIRTimeSpec)
CIRT = struct with fields:
      FinObj: 'CIRFwdTree'
     VolSpec: [1x1 struct]
    TimeSpec: [1x1 struct]
    RateSpec: [1x1 struct]
        tObs: [0 0.2500 0.5000 0.7500]
        dObs: [736696 736787 736878 736969]
     FwdTree: {[1.0062]  [1.0090 1.0062 1.0039]  [1x5 double]  [1x7 double]}
     Connect: {[3x1 double]  [3x3 double]  [3x5 double]}
       Probs: {[3x1 double]  [3x3 double]  [3x5 double]}

Определите соединение с помощью встроенного дополнительного инструмента.

BondSettlement = 'Jan-1-2017';
BondMaturity   = 'Jan-1-2020'; 
CouponRate = 0.035;
Period = 1;
OptSpec = 'put'; 
Strike = 100;  
ExerciseDates = {'Jan-1-2018' '01-Jan-2019'}; 

Цена облигации.

[Price,PriceTree] = optembndbycir(CIRT,CouponRate,BondSettlement,BondMaturity,OptSpec,...
Strike,ExerciseDates,'AmericanOpt',1,'Period',1)
Price = 103.3099
PriceTree = struct with fields:
                FinObj: 'CIRPriceTree'
                  tObs: [0 0.2500 0.5000 0.7500 1]
                 PTree: {1x5 cell}
              ProbTree: {1x5 cell}
                ExTree: {[0]  [0 0 0]  [0 0 0 0 0]  [0 0 0 0 0 0 0]  [1 1 1 0 0 0 0]}
            ExProbTree: {[0]  [0 0 0]  [0 0 0 0 0]  [0 0 0 0 0 0 0]  [1x7 double]}
    ExProbsByTreeLevel: [0 0 0 0 0.3089]
               Connect: {[3x1 double]  [3x3 double]  [3x5 double]}

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

свернуть все

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример: [Price,PriceTree] = optembndbycir(BDTTree,CouponRate,Settle,Maturity,OptSpec,Strike,ExerciseDates,'Period',1,'AmericanOpt',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 вектор с использованием серийных номеров дат, векторов символов даты, строковых массивов или массивов datetime.

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

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

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

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

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

Подробнее

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

[1] Кокс, J., Ингерсолл, J. и С. Росс. «Теория терминологической структуры процентных ставок». Эконометрика. Том 53, 1985.

[2] Бриго, Д. и Ф. Меркурио. Модели процентных ставок - теория и практика. Springer Finance, 2006.

[3] Хирса, А. Вычислительные методы в финансах. КПР Пресс, 2012.

[4] Навалька, С., Сото, Г. и Н. Белиаева. Динамическое моделирование структуры терминов. Уайли, 2007.

[5] Нельсон, Д. и К. Рамасвами. «Простые биномиальные процессы как диффузионные приближения в финансовых моделях». Обзор финансовых исследований. Том 3. 1990, стр 393–430.

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