exponenta event banner

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

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

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

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

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

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

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

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

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

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

Соглашения о рабочих днях, указанные как пара, разделенная запятыми, состоящая из '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