optembndbycir

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

Описание

пример

[Price,PriceTree] = optembndbycir(CIRTree,CouponRate,Settle,Maturity,OptSpec,Strike,ExerciseDates) вычисляет цену для облигаций со встроенными опциями из процентного дерева Кокса-Ингерсолла-Росса (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]}

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

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-by- 1 десятичный годовой темп или NINST-by- 1 массив ячеек, где каждый элемент является NumDates-by- 2 массив ячеек. Первый столбец NumDates-by- 2 массив ячеек является датами, и второй столбец связан скоростями. Дата указывает на последний день действия ставки купона.

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

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

Примечание

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

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

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

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

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

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

Опции цены значения, заданные как NINST-by- 1 или NINST-by- NSTRIKES в зависимости от типа опции:

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

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

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

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

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

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

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

  • Для американской опции используйте NINST-by- 2 вектор контуров дат упражнения. Опция может быть использована в любую дату между или включая пару дат в этой строке. Если только один не - NaN указана дата, или если ExerciseDates является NINST-by- 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-by- 1 положительные целочисленные флаги со значениями:

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

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

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

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

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

Базис отсчета дней, заданный как разделенная разделенными запятой парами, состоящая из 'Basis' и a NINST-by- 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-by- 1 вектор. Это правило применяется только тогда, когда Maturity - дата окончания месяца для месяца, имеющего 30 или менее дней.

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

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

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

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

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

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

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

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

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

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

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

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

Если вы не задаете StartDate, дата начала вступления в силу является Settle дата.

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

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

Примечание

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

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

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

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

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

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

Подробнее о

свернуть все

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

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

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

Ступенчатая купонная облигация с функциями Callable и Puttable

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

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

Облигация тонущего фонда с опцией Call Embedded

Облигация тонущего фонда - купонная облигация с обеспечением тонущего фонда.

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

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

Амортизация вызываемой или приемной связи

Амортизация callable или puttable облигаций работает в соответствии с запланированным Face.

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

Ссылки

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

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

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

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

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

Введенный в R2018a