bndspread

Статический разброс по пятнистой кривой

В R2017b изменена спецификация необязательных входных параметров. Хотя синтаксис предыдущих упорядоченных входов все еще поддерживается, он может больше не поддерживаться в будущем релизе. Используйте необязательные входы пары "имя-значение": Period, Basis, EndMonthRule, IssueDate, FirstCouponDate, LastCouponDate, StartDate, Face, CompoundingFrequency, DiscountBasis, и LastCouponInterest.

Описание

пример

Spread = bndspread(SpotInfo,Price,Coupon,Settle,Maturity) вычисляет статический спред (Z-спред) для бенчмарка в базисных точках.

пример

Spread = bndspread(___,Name,Value) добавляет необязательные аргументы пары "имя-значение".

Примеры

свернуть все

Этот пример показывает, как вычислить Федеральную национальную ипотечную ассоциацию (FNMA) 4 3/8, распределенную по спотовой кривой казначейства, и построить график результатов.

RefMaturity = [datenum('02/27/2003');    
               datenum('05/29/2003');
               datenum('10/31/2004');
               datenum('11/15/2007');
               datenum('11/15/2012');
               datenum('02/15/2031')];

RefCpn = [0;
          0;
          2.125;
          3;
          4;
          5.375] / 100;

RefPrices =  [99.6964;
              99.3572;
             100.3662;
              99.4511;
              99.4299;
             106.5756];
         
RefBonds = [RefPrices, RefMaturity, RefCpn];
Settle   = datenum('26-Nov-2002');
[ZeroRates, CurveDates] = zbtprice(RefBonds(:, 2:end), ... 
RefPrices, Settle)
ZeroRates = 6×1

    0.0121
    0.0127
    0.0194
    0.0317
    0.0423
    0.0550

CurveDates = 6×1

      731639
      731730
      732251
      733361
      735188
      741854

% FNMA 4 3/8 maturing 10/06 at 4.30 pm Tuesday
Price    = 105.484;
Coupon   = 0.04375;
Maturity = datenum('15-Oct-2006');

% All optional inputs are supposed to be accounted by default,
% except the accrued interest under 30/360 (SIA), so:
Period = 2;
Basis  = 1;
SpotInfo = [CurveDates, ZeroRates];

% Compute static spread over treasury curve, taking into account
% the shape of curve as derived by bootstrapping method embedded 
% within bndspread.

SpreadInBP = bndspread(SpotInfo, Price, Coupon, Settle, ...  
Maturity, Period, Basis)
SpreadInBP = 18.5669
plot(CurveDates, ZeroRates*100, 'b', CurveDates, ... 
ZeroRates*100+SpreadInBP/100, 'r--')
legend({'Treasury'; 'FNMA 4 3/8'})
xlabel('Curve Dates')
ylabel('Spot Rate [%]')
grid;

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Treasury, FNMA 4 3/8.

Этот пример показывает, как вычислить Федеральную национальную ипотечную ассоциацию (FNMA) 4 3/8, распределенную по спотовой кривой казначейства с помощью datetime входы для Settle и Maturity и таблицу для SpotInfo и постройте график результатов.

RefMaturity = [datenum('02/27/2003');
               datenum('05/29/2003');
               datenum('10/31/2004');
               datenum('11/15/2007');
               datenum('11/15/2012');
               datenum('02/15/2031')];

RefCpn = [0;
          0;
          2.125;
          3;
          4;
          5.375] / 100;

RefPrices =  [99.6964;
              99.3572;
             100.3662;
              99.4511;
              99.4299;
             106.5756];

RefBonds = [RefPrices, RefMaturity, RefCpn];
Settle   = datetime('26-Nov-2002','Locale','en_US');
[ZeroRates, CurveDates] = zbtprice(RefBonds(:, 2:end), ...
RefPrices, Settle)
ZeroRates = 6×1

    0.0121
    0.0127
    0.0194
    0.0317
    0.0423
    0.0550

CurveDates = 6x1 datetime
   27-Feb-2003
   29-May-2003
   31-Oct-2004
   15-Nov-2007
   15-Nov-2012
   15-Feb-2031

% FNMA 4 3/8 maturing 10/06 at 4.30 pm Tuesday
Price    = 105.484;
Coupon   = 0.04375;
Maturity = datetime('15-Oct-2006','Locale','en_US');

% All optional inputs are accounted by default,
% except the accrued interest under 30/360 (SIA), so:
Period = 2;
Basis  = 1;

SpotInfo = table(CurveDates, ZeroRates);

% Compute static spread over treasury curve, taking into account
% the shape of curve as derived by bootstrapping method embedded
% within bndspread.

SpreadInBP = bndspread(SpotInfo, Price, Coupon, Settle, ...
Maturity, Period, Basis)
SpreadInBP = 18.5669
plot(CurveDates, ZeroRates*100, 'b', CurveDates, ...
ZeroRates*100+SpreadInBP/100, 'r--')
legend({'Treasury'; 'FNMA 4 3/8'})
xlabel('Curve Dates')
ylabel('Spot Rate [%]')
grid;

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Treasury, FNMA 4 3/8.

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

свернуть все

Информация о спот-скоростях, заданная как матрица из двух столбцов, ежегодная структура терминов, созданная intenvset (Financial Instruments Toolbox) или таблица.

  • Матрица из двух столбцов - первый столбец является SpotDate, и второй столбец, ZeroRates, - нулевая ставка, соответствующая срокам погашения на SpotDate. Рекомендуется, чтобы точечные ставки были расположены максимально равномерно обособленно, возможно, та, которая построена из 3-месячных ставок по депозитам. Для примера, используя 3-месячные ставки по депозитам:

    SpotInfo = ...
    [datenum('2-Jan-2004') ,  0.03840;
    datenum('2-Jan-2005') ,  0.04512;
    datenum('2-Jan-2006') ,  0.05086];

  • Годовая структура терминов - См. intenvset (Financial Instruments Toolbox) для создания структуры годовых терминов. Для примера:

    Settle = datenum('1-Jan-2004');
    Rates = [0.03840; 0.04512; 0.05086];
    EndDates = [datenum('2-Jan-2004'); datenum('2-Jan-2005');...
                 datenum('2-Jan-2006')];
    SpotInfo = intenvset('StartDates' , Settle  ,...
                          'Rates'      , Rates   ,...
                          'EndDates'   , EndDates,...
                          'Compounding', 2       ,...
                          'Basis'      , 0);
    

  • Таблица - Если SpotInfo является таблицей, первый столбец может быть либо серийным номером даты, вектором символов даты или массивом datetime. Второй столбец является числовыми данными, представляющими нулевые скорости. Для примера:

    ZeroRates = … [0.012067955808764;0.012730933424479;0.019360902068703;0.031704525214251;0.042306085224510;0.054987415342936];
    CurveDates = [731639;731730;732251;733361;735188;741854];
    Settle   = datenum('26-Nov-2002');
    Price    = 105.484;
    Coupon   = 0.04375;
    Maturity = datenum('15-Oct-2006');
    Period = 2;
    Basis  = 1;
    SpotInfo = table(datestr(CurveDates), ZeroRates);

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

Цена для каждой номинальной суммы $100 облигаций, спреды которых вычислены, задается в виде числового значения с помощью скаляра или NUMBONDS-by- 1 или 1-by- NUMBONDS вектор.

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

Годовая купонная ставка облигаций, спреды которых вычисляются в виде десятичного значения с использованием скаляра или NUMBONDS-by- 1 или 1-by- NUMBONDS вектор.

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

Дата расчета облигации в виде скаляра или NUMBONDS-by- 1 или 1-by- NUMBONDS вектор с использованием серийных номеров дат, векторов символов дат или массивов данных времени. The Settle дата должна быть перед Maturity дата.

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

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

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

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

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

Пример: Spread = bndspread(SpotInfo,Price,Coupon,Settle,Maturity,'Period',4,'Basis',7)

Количество купонных выплат в год в виде разделенной разделенными запятой парами, состоящей из 'Period' и скаляр или NUMBONDS-by- 1 или 1-by- NUMBONDS вектор с использованием значений: 0, 1, 2, 3, 4, 6, или 12.

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

Счетчик дней инструмента, заданный как разделенная разделенными запятой парами, состоящая из 'Basis' и скаляр или NUMBONDS-by- 1 или 1-by- NUMBONDS вектор с поддерживаемым значением:

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

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

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

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

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

Если вы не задаете IssueDateДаты платежа денежного потока определяются из других входов.

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

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

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

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

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

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

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

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

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

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

Номинальное значение облигации, заданная как разделенная разделенными запятой парами, состоящая из 'Face' и скаляр или NUMBONDS-by- 1 или 1-by- NUMBONDS вектор.

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

Частота компаундирования для вычисления выражения, заданная как разделенная разделенными запятой парами, состоящая из 'CompoundingFrequency' и скаляр или NUMBONDS-by- 1 или 1-by- NUMBONDS вектор.

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

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

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

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

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

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

Примечание

По умолчанию SIA основ (0- 7) и BUS/252 используйте полугодовое соглашение о компаундировании и основы ICMA (8- 12) использовать ежегодное соглашение о компаундировании.

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

Базис, используемый для вычисления коэффициентов дисконтирования для вычисления выражения, заданный как разделенная разделенными запятой парами, состоящая из 'DiscountBasis' и скаляр или NUMBONDS-by- 1 или 1-by- NUMBONDS вектор. Значения:

  • 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

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

Примечание

Если в Basis определен базис подсчета дней SIA входной параметр и нет значения, назначенного для DiscountBasisпо умолчанию для основ SIA используется фактическое/фактическое количество дней для вычисления коэффициентов дисконтирования.

Если в BUS/252 задан базис или Basis дневного отсчета ICMA входной параметр и нет значения, назначенного для DiscountBasis, указанные основы из Basis используются входные параметры.

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

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

  • simple

  • compound

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

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

свернуть все

Статический разброс на бенчмарк, возвращенный в базисных точках как скаляр или NUMBONDS-by- 1 вектор.

Ссылки

[1] Кргин, Д. Справочник по глобальным расчетам фиксированного дохода. Уайли, 2002.

[2] Mayle, J. «Стандартные методы расчета ценных бумаг: формулы ценных бумаг с фиксированным доходом для аналитических мер». SIA, Vol 2, Jan 1994.

[3] Стигум, М., Робинсон, Ф. Денежный рынок и расчет облигаций. МакГро-Хилл, 1996.

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