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

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

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

Settle должно быть раньше Maturity.

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

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

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

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

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

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

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

Типы данных: 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Флаг для корректировки денежных потоков на основе фактического количества дней периода, заданный как разделенная разделенными запятой парами, состоящая из 'AdjustCashFlowsBasis' и a NINST-by- 1 вектор логических единиц со значениями 0 (false) или 1 Правда.

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

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

  • actual - Нерабочие дни фактически игнорируются. Денежные потоки, которые приходятся на нерабочие дни, считаются распределенными на фактическую дату.

  • follow - Денежные потоки, которые приходятся на нерабочий день, принимаются распределенными на следующий рабочий день.

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

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

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

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

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

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

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

свернуть все

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

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

Суммы денежного потока, возвращенные как NINST- by- NUMCFS матрица денежных потоков по каждой облигации.

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

Подробнее о

свернуть все

Ваниля Бонд

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

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

Ступенчатая купонная облигация

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

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

Облигация с графиком амортизации

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

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