prbyzero

Ценовые облигации в портфеле по набору нулевых кривых

Описание

пример

BondPrices = prbyzero(Bonds,Settle,ZeroRates,ZeroDates) вычисляет цены облигаций в портфеле с помощью набора нулевых кривых.

пример

BondPrices = prbyzero(___,Compounding) добавляет необязательный аргумент для Compounding.

Примеры

свернуть все

Этот пример использует функцию zbtprice вычислить нулевую кривую, учитывая портфель купонных облигаций и их цены. Затем он отменяет процесс, используя нулевую кривую в качестве входа в функцию prbyzero для вычисления цен.

Bonds = [datenum('6/1/1998') 0.0475 100 2 0 0; 
         datenum('7/1/2000') 0.06 100 2 0 0; 
         datenum('7/1/2000') 0.09375 100 6 1 0; 
         datenum('6/30/2001') 0.05125 100 1 3 1;
         datenum('4/15/2002') 0.07125 100 4 1 0;
         datenum('1/15/2000') 0.065 100 2 0 0; 
         datenum('9/1/1999') 0.08 100 3 3 0; 
         datenum('4/30/2001') 0.05875 100 2 0 0; 
         datenum('11/15/1999') 0.07125 100 2 0 0; 
         datenum('6/30/2000') 0.07 100 2 3 1; 
         datenum('7/1/2001') 0.0525 100 2 3 0; 
         datenum('4/30/2002') 0.07 100 2 0 0];

Prices = [ 99.375;
           99.875;
          105.75 ;
           96.875;
          103.625;
          101.125;
          103.125;
           99.375;
          101.0  ;
          101.25 ;
           96.375;
          102.75 ];

Settle = datenum('12/18/1997');

Установите полугодовое компаундирование для нулевой кривой на фактической/365 основе.

OutputCompounding = 2;

Выполните функцию zbtprice который возвращает нулевую кривую на дату погашения.

[ZeroRates, ZeroDates] = zbtprice(Bonds, Prices, Settle,...
OutputCompounding)
ZeroRates = 11×1

    0.0616
    0.0609
    0.0658
    0.0590
    0.0647
    0.0655
    0.0606
    0.0601
    0.0642
    0.0621
      ⋮

ZeroDates = 11×1

      729907
      730364
      730439
      730500
      730667
      730668
      730971
      731032
      731033
      731321
      ⋮

Выполните функцию prbyzero.

BondPrices = prbyzero(Bonds, Settle, ZeroRates, ZeroDates)
BondPrices = 12×1

   99.3750
   98.7980
  106.8270
   96.8750
  103.6249
  101.1250
  103.1250
   99.3637
  101.0000
  101.2500
      ⋮

В этом примере zbtprice и prbyzero не обращайте точно друг друга. Многие облигации имеют выходное правило конца месяца (EndMonthRule = 0). Правило тонко влияет на расчет временного фактора. Если вы устанавливаете правило на (EndMonthRule = 1) везде в Bonds матрица, затем prbyzero возвращает исходные цены, за исключением тех случаев, когда две несовместимые цены падают на одну и ту же дату погашения.

Этот пример использует функцию zbtprice вычислить нулевую кривую, учитывая портфель купонных облигаций и их цены. Затем он отменяет процесс, используя нулевую кривую в качестве входа в функцию prbyzero с datetime входы для вычисления цен.

Bonds = [datenum('6/1/1998') 0.0475 100 2 0 0;
         datenum('7/1/2000') 0.06 100 2 0 0;
         datenum('7/1/2000') 0.09375 100 6 1 0;
         datenum('6/30/2001') 0.05125 100 1 3 1;
         datenum('4/15/2002') 0.07125 100 4 1 0;
         datenum('1/15/2000') 0.065 100 2 0 0;
         datenum('9/1/1999') 0.08 100 3 3 0;
         datenum('4/30/2001') 0.05875 100 2 0 0;
         datenum('11/15/1999') 0.07125 100 2 0 0;
         datenum('6/30/2000') 0.07 100 2 3 1;
         datenum('7/1/2001') 0.0525 100 2 3 0;
         datenum('4/30/2002') 0.07 100 2 0 0];

Prices = [ 99.375;
           99.875;
          105.75 ;
           96.875;
          103.625;
          101.125;
          103.125;
           99.375;
          101.0  ;
          101.25 ;
           96.375;
          102.75 ];

Settle = datenum('12/18/1997');
OutputCompounding = 2;

[ZeroRates, ZeroDates] = zbtprice(Bonds, Prices, Settle, OutputCompounding);

dates = datetime(Bonds(:,1),'ConvertFrom','datenum','Locale','en_US');
data = Bonds(:,2:end);
t=[table(dates) array2table(data)];
BondPrices = prbyzero(t, datetime(Settle,'ConvertFrom','datenum','Locale','en_US'),...
ZeroRates, datetime(ZeroDates,'ConvertFrom','datenum','Locale','en_US'))
BondPrices = 12×1

   99.3750
   98.7980
  106.8270
   96.8750
  103.6249
  101.1250
  103.1250
   99.3637
  101.0000
  101.2500
      ⋮

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

свернуть все

Информация о купонной облигации для вычисления цен, заданная в виде 6-столбцовой таблицы или NumBonds-by- 6 матрица информации о связях, где столбцы таблицы или матричные столбцы содержат:

  • Maturity (Требуется) Дата погашения облигации, как серийный номер даты. Использовать datenum для преобразования векторов символов даты в серийные номера дат. Если вход Bonds является таблицей, Maturity даты могут быть серийными номерами дат, векторами символов дат или массивами datetime.

  • CouponRate (Требуется) Десятичное число, указывающее годовую процентную ставку, используемую для определения купонов, подлежащих выплате по облигации.

  • Face (Необязательно) Лицо или номинальное значение облигации. По умолчанию = 100.

  • Period (Необязательно) Купоны в год облигации. Допустимые значения 0, 1, 2 (по умолчанию), 3, 4, 6, и 12.

  • Basis ( Необязательный ) базис отсчета дня облигации. Вектор из целых чисел.

    • 0 = факт/факт (по умолчанию)

    • 1 = 30/360 (SIA)

    • 2 = факт/360

    • 3 = факт/365

    • 4 = 30/360 (BMA)

    • 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

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

  • EndMonthRule (Необязательно) Правило конца месяца. Это правило применяется только тогда, когда Maturity - дата окончания месяца для месяца, имеющего 30 или менее дней. 0 = игнорировать правило, означающее, что дата купонного платежа облигации всегда совпадает с числовым днем месяца. 1 = установите правило на (по умолчанию), что означает, что дата купонного платежа облигации всегда является последним фактическим днем месяца

:

Примечание

  • Если Bonds является таблицей, столбцы таблицы имеют то же значение что и при использовании матрицы, но Maturity даты могут быть серийными номерами дат, векторами символов дат или массивами datetime.

  • Если Bonds является матрицей, это NUMBONDS-by- 6 матрица облигаций, где каждая строка описывает одну связь. Требуются первые два столбцов; оставшиеся столбцы являются необязательными, но должны быть добавлены по порядку. Все строки в Bonds должно иметь одинаковое число столбцов. Столбцы Maturity, CouponRate, Face, Period, Basis, и EndMonthRule.

.

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

Дата расчета, заданная как серийные номера дат, векторы символов даты или массивы datetime.

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

Наблюдались нулевые скорости, заданные как NUMDATES-by- NUMCURVES матрица десятичных дробей. Каждый столбец представляет кривую скорости. Каждая строка представляет дату наблюдения.

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

Наблюдаемые даты для ZeroRates, заданный как NUMDATES-by- 1 столбец с использованием серийных номеров дат, векторов символов даты или массивов datetime.

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

(Необязательно) Частота компаундирования входных ZeroRates в годовом исчислении, заданном с использованием допустимых значений:

  • 1 - Ежегодное компаундирование

  • 2 - Полугодовое компаундирование (по умолчанию)

  • 3 - Смешивание три раза в год

  • 4 - ежеквартальное компаундирование

  • 6 - Двухмесячное компаундирование

  • 12 - Ежемесячное компаундирование

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

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

свернуть все

Чистые цены облигаций, возвращенные как NUMBONDS-by- NUMCURVES матрица. Каждый столбец получают из соответствующей нулевой кривой в ZeroRates.

В сложение можно использовать метод Financial Instruments Toolbox™ getZeroRates (Financial Instruments Toolbox) для IRDataCurve объект со Dates свойство для создания вектора дат и данных, приемлемых для prbyzero. Для получения дополнительной информации смотрите Преобразование объекта IRDataCurve или IRFunctionCurve (Financial Instruments Toolbox).

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