Ценообразование и вычисление выражений для ценных бумаг с фиксированным доходом

Введение

Продукт Financial Toolbox™ обеспечивает функции для вычисления начисленных процентов, цены, выражения, выпуклости и длительности ценных бумаг с фиксированным доходом. Существуют различные конвенции для определения деталей этих расчетов. Программное обеспечение Financial Toolbox поддерживает конвенции, указанные Ассоциацией индустрии ценных бумаг и финансовых рынков (SIFMA), используемые на рынках США, Международной ассоциацией рынка капитала (ICMA), используемой в основном на европейских рынках, и Международной ассоциацией свопов и деривативов (ISDA). По историческим причинам SIFMA упоминается в документации Financial Toolbox как SIA, а ISMA - как Международная ассоциация рынка капитала (ICMA).

Терминология с фиксированным доходом

Поскольку терминология варьируется среди текстов по этому вопросу, вот некоторые основные определения, которые применяются к этим функциям Financial Toolbox.

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

Дата первого купона и дата последнего купона - даты оплаты первого и последнего купона, соответственно. Хотя облигации обычно платят периодические ежегодные или полугодовые купоны, продолжительность первого и последнего купонного периодов может отличаться от стандартного купонного периода. Тулбокс включает в себя функции цены и выражения, которые обрабатывают эти нечетные первые и/или последние периоды.

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

Ценные бумаги с фиксированным доходом можно приобрести в даты, не совпадающие с датами купонного платежа. В этом случае владелец облигации не имеет права на полное значение купона за этот период. Когда облигация приобретается между датами купона, покупатель должен компенсировать продавцу пропорциональную долю купонных процентов, полученных с предыдущей даты купонного платежа. Эта пропорциональная доля купонного платежа называется начисленными процентами. Цена покупки, цена, уплаченная за облигацию, является котируемой рыночной ценой плюс начисленные проценты.

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

Период

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

Период действия облигации 

Значение периода

График платежей

0

Нет купонов (Нулевая купонная облигация)

1

Ежегодный

2

Полугодовой

3

Трехгодичный

4

Ежеквартально

6

Раз в два месяца

12

Ежемесячно

Базис

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

Например, числитель фактических/фактических означает, что при определении количества дней между двумя датами подсчитывайте фактическое количество дней; знаменатель означает, что вы используете фактическое количество дней в данном году в любых вычислениях (365 или 366 дней в зависимости от того, является ли данный год високосным). При расчете начисленных процентов для дат между платежами также используется базис подсчета дней. Базис отсчета дней является частью Number of interest accrual days / Days in the relevant coupon period.

Поддерживаемые соглашения о подсчете дней и базисные значения:

Базовое значение

Конвенция о отсчете дней

0

факт/факт (по умолчанию) - количество дней как в периоде, так и в году является фактическим количеством дней. Кроме того, другим общим фактическим/фактическим базисом является базис 12.

1

30/360 SIA - Годовая доля рассчитывается исходя из 360-дневного года с 30-дневными месяцами после применения следующих правил: Если первая дата и вторая дата являются последним днем февраля, вторая дата изменяется на 30-е. Если первая дата выпадает на 31-е или является последним днем февраля, она меняется на 30-е. Если после предыдущего теста первый день - 30-й, а второй - 31-й, то второй день меняется на 30-й.

2

фактический/360 - Количество дней в периоде равно фактическому количеству дней, однако количество дней в году составляет 360.

3

фактический/365 - Количество дней в периоде равно фактическому количеству дней, однако количество дней в году составляет 365 (даже в високосном году).

4

30/360 PSA - Количество дней в каждом месяце устанавливается равным 30 (включая февраль). Если датой начала периода является 31-е число месяца или последний день февраля, дата начала устанавливается на 30-е число, в то время как если датой начала является 30-е число месяца, а датой окончания - 31-е число, то датой окончания устанавливается 30-е число. Количество дней в году - 360.

5

30/360 ISDA - Количество дней в каждом месяце устанавливается равным 30, за исключением февраля, где это фактическое количество дней. Если датой начала периода является 31-е число месяца, дата начала устанавливается на 30-е, а дата начала - на 30-е число месяца, а дата окончания - на 31-е, дата окончания устанавливается на 30-е. Количество дней в году - 360.

6

30E/360 - Количество дней в каждом месяце устанавливается на 30, кроме февраля, где оно равно фактическому количеству дней. Если датой начала или датой окончания периода является 31-е число месяца, эта дата устанавливается на 30-е число. Количество дней в году - 360.

7

фактический/365 японский - Количество дней в периоде равно фактическому количеству дней, за исключением дней скачка (29 февраля), которые игнорируются. Количество дней в году - 365 (даже в високосный год).

8

фактический/фактический ICMA - Количество дней как в периоде, так и в году является фактическим количеством дней, и частота компаундирования является ежегодной.

9

фактический/360 ICMA - Количество дней в периоде равно фактическому количеству дней, однако количество дней в году составляет 360, и частота компаундирования является годовой.

10

фактический/365 ICMA - Количество дней в периоде равно фактическому количеству дней, однако количество дней в году составляет 365 (даже в високосном году), и частота компаундирования является ежегодной.

11

30/360 ICMA - Количество дней в каждом месяце устанавливается равным 30, за исключением февраля, где оно равно фактическому количеству дней. Если датой начала или датой окончания периода является 31-е число месяца, эта дата устанавливается на 30-е число. Количество дней в году составляет 360, и частота компаундирования составляет ежегодно.

12

фактический/365 ISDA - фракция подсчета дней вычисляется по следующей формуле: (Actual number of days in period that fall in a leap year / 366) + (Actual number of days in period that fall in a normal year / 365). Базисные 12 также упоминается как фактическое/фактическое ISDA.

13

bus/252 - Количество дней в периоде равно фактическому количеству рабочих дней. Количество рабочих дней в году - 252.

Примечание

Хотя концепция отсчета дней звучит обманчиво просто, фактическое вычисление отсчётов дней может быть комплексным. Вы можете найти хорошее обсуждение отсчётов дней и формул для их вычисления в главе 5 Стигума и Робинсона, Вычисления денежного рынка и облигаций в библиографии.

Правило конца месяца

Правило конца месяца влияет на структуру купонного платежа облигации. Когда правило действует, обеспечение, которое выплачивает купон в последний фактический день месяца, всегда будет выплачивать купоны в последний день месяца. Это означает, например, что полугодовая облигация, выплачивающая купон 28 февраля в нежильные годы, будет выплачивать купоны 31 августа во все годы и 29 февраля в високосные годы.

Правило конца месяца

Значение правила на конец месяца

Значение

1 (по умолчанию)

Правило в эффект.

0

Правило не действует.

Среда

Хотя не все функции Financial Toolbox требуют одинаковых входных параметров, все они принимают следующий общий набор входных параметров.

Общие входные параметры

Вход

Значение

Settle

Дата расчета

Maturity

Дата погашения

Period

Период купонной выплаты

Basis

Базис подсчета дней

EndMonthRule

Правило оплаты в конце месяца

IssueDate

Дата выпуска облигаций

FirstCouponDate

Дата выплаты первого купона

LastCouponDate

Дата последнего купона

Из общих входных параметров только Settle и Maturity требуются. Все остальные опциональны. Они устанавливаются на значения по умолчанию, если вы их явным образом не устанавливаете. По умолчанию в FirstCouponDate и LastCouponDate неприменимы. Другими словами, если вы не задаете FirstCouponDate и LastCouponDate, облигация не имеет нечетных первого или последнего купонного периода. В этом случае облигация является стандартной облигацией со структурой купонного платежа, основанной исключительно на дате погашения.

Значения параметров по умолчанию

Чтобы проиллюстрировать использование значений по умолчанию в функциях Financial Toolbox, рассмотрите cfdates функция, которая вычисляет фактические даты выплаты денежного потока для портфеля ценных бумаг с фиксированной доходностью независимо от того, являются ли первые и/или последние купонные периоды нормальными, длинными или короткими.

Полный синтаксис вызова с полным списком входных параметров:

CFlowDates = cfdates(Settle, Maturity, Period, Basis, ... 
EndMonthRule, IssueDate, FirstCouponDate, LastCouponDate)

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

CFlowDates = cfdates(Settle, Maturity)

Пример одной связи

В качестве примера предположим, что у вас есть связь с этими характеристиками:

Settle          = '20-Sep-1999'
Maturity        = '15-Oct-2007'
Period          = 2
Basis           = 0
EndMonthRule    = 1
IssueDate       = NaN
FirstCouponDate = NaN
LastCouponDate  = NaN

Period, Basis, и EndMonthRule заданы их значения по умолчанию и IssueDate, FirstCouponDate, и LastCouponDate заданы как NaN.

Формально, NaN является IEEE® Арифметика стандарт для Не числа и используется для указания результата неопределенной операции (для примера, ноль, разделенный на нули). Однако NaN также является удобным заполнителем. В функциях SIA программного обеспечения Financial Toolbox, NaN указывает на наличие неприменимого значения. В нем указываются функции Financial Toolbox, чтобы игнорировать вход значение и применить значение по умолчанию. Настройка IssueDate, FirstCouponDate, и LastCouponDate на NaN в этом примере описывается cfdates предположить, что облигация была выпущена до расчета и что никаких нечетных первых или последних купонных периодов не существует.

Установив эти значения, все эти вызовы равны cfdates получите тот же результат.

cfdates(Settle, Maturity)
cfdates(Settle, Maturity, Period)
cfdates(Settle, Maturity, Period, [])
cfdates(Settle, Maturity, [], Basis)
cfdates(Settle, Maturity, [], [])
cfdates(Settle, Maturity, Period, [], EndMonthRule)
cfdates(Settle, Maturity, Period, [], NaN)
cfdates(Settle, Maturity, Period, [], [], IssueDate)
cfdates(Settle, Maturity, Period, [], [], IssueDate, [], [])
cfdates(Settle, Maturity, Period, [], [], [], [],LastCouponDate)
cfdates(Settle, Maturity, Period, Basis, EndMonthRule, ... 
IssueDate, FirstCouponDate, LastCouponDate)

Таким образом, оставление определенного входа неопределенным имеет тот же эффект, что и передача пустой матрицы ([]) или прохождения NaN - все трое говорят cfdates (и другие функции Financial Toolbox), чтобы использовать значение по умолчанию для конкретного входного параметра.

Пример портфеля облигаций

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

Теперь предположим, что у вас есть портфель из двух облигаций.

Settle   = '20-Sep-1999'
Maturity = ['15-Oct-2007'; '15-Oct-2010']

Эти вызовы cfdates установите период купона на его значение по умолчанию (  Period = 2) для обеих облигаций.

cfdates(Settle, Maturity, 2)
cfdates(Settle, Maturity, [2 2])
cfdates(Settle, Maturity, [])
cfdates(Settle, Maturity, NaN)
cfdates(Settle, Maturity, [NaN NaN])
cfdates(Settle, Maturity)

Первые два вызова явно устанавливаются Period = 2. Начиная с Maturity является 2-by- 1 вектор дат погашения, cfdates знает, что у вас есть портфель с двумя облигациями.

Первый вызов задает один (то есть скаляр) 2 для Period. Передача скаляра говорит cfdates применить скалярный вход ко всем облигациям в портфеле. Это пример неявного скалярного расширения. Дата расчета также неявно расширена скаляром.

Второй вызов также применяет период купона по умолчанию путем явной передачи двухэлементного вектора 2-х годов. Третий вызов передает пустую матрицу, которая cfdates интерпретирует как недопустимый период, для которого используется значение по умолчанию. Четвертый вызов аналогичен, за исключением NaN пройдено. Пятый вызов проходит два NaNs, и имеет тот же эффект, что и третий. Последний вызов проходит минимальный входной набор.

Наконец, рассмотрите следующие вызовы cfdates для того же портфеля с двумя облигациями.

cfdates(Settle, Maturity, [4 NaN])
cfdates(Settle, Maturity, [4 2])

Первый вызов явно устанавливает Period = 4 для первой связи и неявно устанавливает Period = 2 по умолчанию для второй связи. Второй вызов имеет тот же эффект, что и первый, но явно устанавливает периодичность для обеих связей.

Необязательный вход Period используется исключительно для иллюстративных целей. Процесс обработки по умолчанию, проиллюстрированный в примерах, применяется к любому из необязательных входных параметров.

Расчеты даты купона

Вычисление дат купонов, фактических или квази дат, заведомо сложно. Программное обеспечение Financial Toolbox следует соглашениям SIA при расчете даты купона.

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

  1. Дата первого купона

  2. Дата последнего купона

  3. Дата погашения

Другими словами, функция Financial Toolbox сначала исследует FirstCouponDate вход. Если FirstCouponDate указывается, что даты купонной выплаты и квазикупоновые даты вычисляются относительно FirstCouponDate; если FirstCouponDate не задан, пуст ([]), или NaN, затем LastCouponDate исследуют. Если LastCouponDate указывается, что даты купонной выплаты и квазикупоновые даты вычисляются относительно LastCouponDate. Если оба FirstCouponDate и LastCouponDate не заданы, пусты ([]), или NaN, а Maturity (необходимый входной параметр) служит датой синхронизации.

Соглашения о выражении

Существует два соглашения о доходности и временном факторе, которые используются в программном обеспечении Financial Toolbox - они определяются входом basis. В частности, основы 0 на 7 приняты, что имеют полугодовое компаундирование, в то время как основы 8 на 12 приняты в годовом исчислении независимо от периода купонных выплат облигаций (включая облигации с нулевым купоном). В сложение любая чувствительность, связанная с выходом (то есть длительность и выпуклость), когда цитируется на периодическом базисе, следует этому же соглашению. (См. bndconvp, bndconvy, bnddurp, bnddury, и bndkrdur.)

Функции ценообразования

В этом примере показано, как легко можно вычислить цену облигации с нечетным первым периодом с помощью функции bndprice. Предположим, что у вас есть связь с этими характеристиками:

Settle          = '11-Nov-1992';
Maturity        = '01-Mar-2005';
IssueDate       = '15-Oct-1992';
FirstCouponDate = '01-Mar-1993';
CouponRate      = 0.0785;
Yield           = 0.0625;

Разрешить период купонной оплаты (Period = 2), базис отсчета дней (Basis = 0), и правило конца месяца (EndMonthRule = 1), чтобы принять значения по умолчанию. Кроме того, предположим, что нет нечетной даты последнего купона и что номинальное значение облигации составляет 100 долларов. Вызов функции

[Price, AccruedInt] = bndprice(Yield, CouponRate, Settle, ... 
Maturity, [], [], [], IssueDate, FirstCouponDate)

возвращает цену $113,60 и начисленные проценты $0.59.

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

Примечание

bndprice и другие функции используют нелинейные формулы для вычисления цены безопасности. По этой причине программное обеспечение Financial Toolbox использует метод Ньютона при решении для независимой переменной в формуле. Смотрите любой учебник элементарных численных методов для математики, лежащей в основе метода Ньютона.

Выражения

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

Settle          = '12-Jan-2000';
Maturity        = '01-Oct-2001';
IssueDate       = '01-Jan-2000';
FirstCouponDate = '15-Jan-2000';
LastCouponDate  = '15-Apr-2000';

Предположим, что лицо значения 100 долларов. Укажите цену покупки $95,70, ставку купона 4%, ежеквартальные купонные платежи и соглашение о подсчете дней 30/360 (Basis = 1).

Price        = 95.7;
CouponRate   = 0.04;
Period       = 4;
Basis        = 1;
EndMonthRule = 1;

Вызов функции

Yield = bndyield(Price, CouponRate, Settle, Maturity, Period,... 
Basis, EndMonthRule, IssueDate, FirstCouponDate, LastCouponDate)

возвраты

Yield = 0.0659 (6.60%).

Чувствительность к фиксированному доходу

Программное обеспечение Financial Toolbox поддерживает следующие опции управления процентным риском для одной или нескольких облигаций:

  • bnddurp и bnddury поддерживает анализ длительности и выпуклости на основе рыночных котировок и принимает параллельные сдвиги в кривой выражения облигаций.

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

Вычисление длительности и выпуклости для облигаций

Тулбокс включает функции для выполнения анализа чувствительности, такие как выпуклость и Маколей, и измененные сроки для ценных бумаг с фиксированным доходом. Длительность Маколея потока доходов, такого как купонная облигация, измеряет, как долго, в среднем, владелец ждет до получения платежа. Это взвешенное среднее значение времени осуществления платежей с весами в момент T равен текущему значению денег, полученных в момент T. Изменённой длительностью является длительность Маколея, дисконтированный процентной ставкой за период; то есть делится на (1 + скорость/частота). Этот Macaulay duration является мерой чувствительности цены к изменениям доходности. Эта длительность измеряется в годах и представляет собой средневзвешенное время до погашения инструмента.

Чтобы проиллюстрировать, в следующем примере вычисляются годовые сроки Маколея и измененные сроки, и периодическая длительность Маколея для облигации с указанными выше датами погашения (12-Jan-2000) и погашения (01-Oct-2001), ставкой купона 5% и выражением 4,5% к погашению. Для простоты любые необязательные входные параметры берут значения по умолчанию (то есть, полугодовые купоны и количество дней basis = 0 (фактический/фактический), структура купонного платежа, синхронизированная с датой погашения, и действующее правило платежа в конце месяца).

CouponRate = 0.05;
Yield = 0.045;

[ModDuration, YearDuration, PerDuration] = bnddury(Yield,... 
CouponRate, Settle, Maturity)

Длительности

ModDuration  = 1.6107 (years)
YearDuration = 1.6470 (years)
PerDuration  = 3.2940 (semiannual periods)

Обратите внимание, что полугодовая периодическая длительность Маколея (PerDuration) в два раза превышает годовую длительность Маколея (YearDuration).

Вычисление длительности ключевой ставки для облигаций

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

Вычисление bndkrdur поддерживает:

krduri = (PVdown - PVup)(PV × ShiftValue × 2)

Где PV - текущее значение инструмента, PV_up и PV_down - новые значения после того, как кривая дисконтирования была шокирована, и ShiftValue является изменением процентной ставки. Для примера, если были выбраны ключевые ставки в 3 месяца, 1, 2, 3, 5, 7, 10, 15, 20, 25, 30 лет, то 30-летняя облигация может иметь соответствующие сроки ключевой ставки:

3M1Y2Y3Y5Y7Y10Y15Y20Y25Y30Y
.01.04.09.21.4.651.271.711.681.837.03

Длительность ключевой ставки складывается приблизительно равной длительности облигации.

Для примера вычислите длительность ключевой ставки Казначейской облигации США с датой погашения 15 августа 2028 года и ставкой купона 5,5%.

Settle = datenum('18-Nov-2008'); 
CouponRate = 5.500/100;
Maturity = datenum('15-Aug-2028'); 
Price = 114.83;

Для ZeroData информация о текущей кривой пятна для этой связи, см. https://www.treas.gov/offices/domestic-finance/debt-management/interest-rate/yield.shtml:

ZeroDates = daysadd(Settle ,[30 90 180 360 360*2 360*3 360*5 ...
360*7 360*10 360*20 360*30]);
ZeroRates = ([0.06 0.12 0.81 1.08 1.22 1.53 2.32 2.92 3.68 4.42 4.20]/100)';

Вычислите длительность ключевой ставки для определенного набора ставок (выберите ее на основе сроков действия доступных инструментов хеджирования):

krd = bndkrdur([ZeroDates ZeroRates],CouponRate,Settle,Maturity,'keyrates',[2 5 10 20])
krd =

    0.2865    0.8729    2.6451    8.5778

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

[sum(krd) bnddurp(Price,CouponRate,Settle,Maturity)]
ans =

   12.3823   12.3919

См. также

| | | |

Похожие примеры

Подробнее о