bondbyzero

Ценовая связь от набора кривых нулевой ширины

Описание

пример

[Price,DirtyPrice,CFlowAmounts,CFlowDates] = bondbyzero(RateSpec,CouponRate,Settle,Maturity) оценивает связь от набора кривых нулевой ширины. bondbyzero вычисляет цены связей ванили, продвинулся связи амортизации и облигации на предъявителя.

пример

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

Примеры

свернуть все

Оцените 4%-ю связь с помощью кривой нулевой ширины.

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

load deriv.mat; 
CouponRate = 0.04;
Settle = '01-Jan-2000';
Maturity = '01-Jan-2004';
Price = bondbyzero(ZeroRateSpec, CouponRate, Settle, Maturity)
Price = 97.5334

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

Задайте данные для структуры термина процентной ставки.

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;

Создайте RateSpec.

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

Создайте ступенчатый инструмент связи.

Settle = '01-Jan-2010';
Maturity = {'01-Jan-2011';'01-Jan-2012';'01-Jan-2013';'01-Jan-2014'};
CouponRate = {{'01-Jan-2012' .0425;'01-Jan-2014' .0750}};
Period = 1;

Вычислите цену ступенчатых облигаций на предъявителя.

PZero= bondbyzero(RS, CouponRate, Settle, Maturity ,Period)
PZero = 4×1

  100.7246
  100.0945
  101.5900
  102.0820

Оцените связь с расписанием амортизации с помощью Face входной параметр, чтобы задать расписание.

Задайте данные для структуры термина процентной ставки.

Rates = 0.065;
ValuationDate = '1-Jan-2011';
StartDates = ValuationDate;
EndDates=  '1-Jan-2017';
Compounding = 1;

Создайте RateSpec.

RateSpec = intenvset('ValuationDate', ValuationDate,'StartDates', StartDates,...
'EndDates', EndDates,'Rates', Rates, 'Compounding', Compounding)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 1
             Disc: 0.6853
            Rates: 0.0650
         EndTimes: 6
       StartTimes: 0
         EndDates: 736696
       StartDates: 734504
    ValuationDate: 734504
            Basis: 0
     EndMonthRule: 1

Создайте и оцените инструмент связи амортизации. Связь имеет купонную ставку 7%, период одного года, и назревает 1 января 2017.

CouponRate = 0.07;
Settle ='1-Jan-2011';
Maturity = '1-Jan-2017';
Period = 1;
Face = {{'1-Jan-2015' 100;'1-Jan-2016' 90;'1-Jan-2017' 80}};
Price = bondbyzero(RateSpec, CouponRate, Settle, Maturity, 'Period',...
Period, 'Face', Face)
Price = 102.3155

Сравните результаты с ценой связи ванили.

PriceVanilla = bondbyzero(RateSpec, CouponRate, Settle, Maturity,Period)
PriceVanilla = 102.4205

Цена и амортизация и связи ванили.

Face = {{'1-Jan-2015' 100;'1-Jan-2016' 90;'1-Jan-2017' 80};
         100};
PriceBonds = bondbyzero(RateSpec, CouponRate, Settle, Maturity, 'Period',...
               Period, 'Face', Face)
PriceBonds = 2×1

  102.3155
  102.4205

Когда облигация сначала выпущена, она может быть оценена с bondbyzero в тот день путем установки Settle дата к дате выпуска. Позже, если связь должна быть продана когда-нибудь между датой выпуска и датой погашения, ее новая цена может быть вычислена путем обновления Settle дата, а также RateSpec входной параметр.

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

Используйте следующую информацию о Связи.

IssueDate = datenum('20-May-2014');
CouponRate = 0.01;
Maturity = datenum('20-May-2019');

Определите цену облигаций 20 мая 2014.

Settle1 = datenum('20-May-2014');
ZeroDates1 = datemnth(Settle1,12*[1 2 3 5 7 10 20]');
ZeroRates1 = [0.23 0.63 1.01 1.60 2.01 2.27 2.79]'/100;
RateSpec1 = intenvset('StartDate',Settle1,'EndDates',ZeroDates1,'Rates',ZeroRates1);
[Price1, ~, CFlowAmounts1, CFlowDates1] = bondbyzero(RateSpec1, ...
    CouponRate, Settle1, Maturity, 'IssueDate', IssueDate);
Price1
Price1 = 97.1899

Определите цену облигаций 10 августа 2015.

Settle2 = datenum('10-Aug-2015');
ZeroDates2 = datemnth(Settle2,12*[1 2 3 5 7 10 20]');
ZeroRates2 = [0.40 0.73 1.09 1.62 1.98 2.24 2.58]'/100;
RateSpec2 = intenvset('StartDate',Settle2,'EndDates',ZeroDates2,'Rates',ZeroRates2);
[Price2, ~, CFlowAmounts2, CFlowDates2] = bondbyzero(RateSpec2, ...
    CouponRate, Settle2, Maturity, 'IssueDate', IssueDate);
Price2
Price2 = 98.9384

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

StartDates = '01-April-2016';
EndDates = ['01-April-2017'; '01-April-2018';'01-April-2019';'01-April-2020'];
Rates = [[0.0356;0.041185;0.04489;0.047741],[0.0325;0.0423;0.0437;0.0465]];
RateSpec = intenvset('Rates', Rates, 'StartDates',StartDates,...
'EndDates', EndDates, 'Compounding', 1)
RateSpec = struct with fields:
           FinObj: 'RateSpec'
      Compounding: 1
             Disc: [4x2 double]
            Rates: [4x2 double]
         EndTimes: [4x1 double]
       StartTimes: [4x1 double]
         EndDates: [4x1 double]
       StartDates: 736421
    ValuationDate: 736421
            Basis: 0
     EndMonthRule: 1

Цена три связи с тем же Maturity и различные купоны.

Settle = '01-April-2016';
Maturity = '01-April-2020';
Price = bondbyzero(RateSpec,[0.025;0.028;0.035],Settle,Maturity)
Price = 3×2

   92.0766   92.4888
   93.1680   93.5823
   95.7145   96.1338

Чтобы настроить потоки наличности согласно сумме наращивания, используйте дополнительный входной параметр AdjustCashFlowsBasis при вызове bondbyzero.

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

Rates = 0.065;
ValuationDate = '1-Jan-2011';
StartDates = ValuationDate;
EndDates=  '1-Jan-2017';
Compounding = 1;
RateSpec = intenvset('ValuationDate',ValuationDate,'StartDates',StartDates,...
'EndDates', EndDates,'Rates',Rates,'Compounding',Compounding);
CouponRate = 0.07;
Settle ='1-Jan-2011';
Maturity = '1-Jan-2017';
Period = 1;
Face = {{'1-Jan-2015' 100;'1-Jan-2016' 90;'1-Jan-2017' 80}};

Использование cfamounts и цикл через Basis из 0 к 13, использование дополнительного аргумента AdjustCashFlowsBasis определить поток наличности составляет для начисленных процентов, подлежащих выплате в поселении.

AdjustCashFlowsBasis = true;
CFlowAmounts =  cfamounts(CouponRate,Settle,Maturity,'Period',Period,'Basis',0:13,'AdjustCashFlowsBasis',AdjustCashFlowsBasis)
CFlowAmounts = 14×7

         0    7.0000    7.0000    7.0000    7.0000    7.0000  107.0000
         0    7.0000    7.0000    7.0000    7.0000    7.0000  107.0000
         0    7.0972    7.1167    7.0972    7.0972    7.0972  107.1167
         0    7.0000    7.0192    7.0000    7.0000    7.0000  107.0192
         0    7.0000    7.0000    7.0000    7.0000    7.0000  107.0000
         0    7.0000    7.0000    7.0000    7.0000    7.0000  107.0000
         0    7.0000    7.0000    7.0000    7.0000    7.0000  107.0000
         0    7.0000    7.0000    7.0000    7.0000    7.0000  107.0000
         0    7.0000    7.0000    7.0000    7.0000    7.0000  107.0000
         0    7.0972    7.1167    7.0972    7.0972    7.0972  107.1167
      ⋮

Заметьте, что суммы потока наличности были настроены согласно Basis.

Оцените связь ванили с помощью входного параметра AdjustCashFlowsBasis.

PriceVanilla = bondbyzero(RateSpec,CouponRate,Settle,Maturity,'Period',Period,'Basis',0:13,'AdjustCashFlowsBasis',AdjustCashFlowsBasis)
PriceVanilla = 14×1

  102.4205
  102.4205
  102.9216
  102.4506
  102.4205
  102.4205
  102.4205
  102.4205
  102.4205
  102.9216
      ⋮

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

свернуть все

Структура процентной ставки, заданное использование intenvset создать RateSpec поскольку пересчитанный на год нулевой уровень называет структуру.

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

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

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

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

Settle должен быть ранее, чем Maturity.

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

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

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

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

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

Пример: Price = bondbyzero(RateSpec,CouponRate,Settle,Maturity,'Period',4,'Face',10000)

Купоны в год, заданный как разделенная запятой пара, состоящая из 'Period' и NINST- 1 вектор. Значения для Period 1, 2, 3, 4, 6, и 12.

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

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

  •  0 = фактический/фактический

  •  1 = 30/360 (СИА)

  •  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 = ШИНА/252

Для получения дополнительной информации смотрите Основание.

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

Правило конца месяца отмечает для генерации дат когда Maturity дата конца месяца в течение месяца, имея 30 или меньше дней, заданных как разделенная запятой пара, состоящая из 'EndMonthRule' и неотрицательное целое число [0, 1] использование NINST- 1 вектор.

  • 0 = Проигнорируйте правило, подразумевая, что платежный день всегда является тем же числовым днем месяца.

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

Типы данных: логический

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

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

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

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

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

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

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

Если вы не задаете StartDate, эффективной датой начала является Settle дата.

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

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

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

Производные оценивая опции, заданные как разделенная запятой пара, состоящая из 'Options' и структура, которая создается с derivset.

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

Отметьте, чтобы настроить потоки наличности на основе фактического дневного количества периода, заданного как разделенная запятой пара, состоящая из 'AdjustCashFlowsBasis' и NINST- 1 вектор logicals со значениями 0 (FALSE) или 1 TRUE.

Типы данных: логический

Соглашения рабочего дня, заданные как разделенная запятой пара, состоящая из 'BusinessDayConvention' и вектор символов или N- 1 (или NINST- 2 если BusinessDayConvention отличается для каждого участка), массив ячеек из символьных векторов соглашений рабочего дня. Выбор для соглашения рабочего дня определяет, как обработаны нерабочие дни. Нерабочие дни заданы как выходные плюс любая другая дата, что компании не открыты (например, установленные законом праздники). Значения:

  • actual — Нерабочие дни эффективно проигнорированы. Потоки наличности, которые падают в нерабочие дни, приняты, чтобы быть распределенными в фактическую дату.

  • follow — Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в следующий рабочий день.

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

  • previous — Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в предыдущий рабочий день.

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

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

Праздники используются в вычислении рабочих дней, заданных как разделенная запятой пара, состоящая из 'Holidays' и числа даты MATLAB с помощью NHolidays- 1 вектор.

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

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

свернуть все

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

Грязная цена облигаций (чистый + начисленные проценты), возвращенный как NINST- NUMCURVES матрица. Каждый столбец является результатом одной из кривых нулевой ширины.

Суммы потока наличности, возвращенные как NINST- NUMCFS матрица потоков наличности для каждой связи.

Даты потока наличности, возвращенные как NINST- NUMCFS матрица платежных дней каждой связи.

Больше о

свернуть все

Связь ванили

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

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

Ступенчатая облигация на предъявителя

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

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

Связь с расписанием амортизации

Амортизируемая связь обработана как актив с суммой скидки, амортизируемой к процентным расходам по жизни связи.

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