exponenta event banner

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

Введение

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

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

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

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

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

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

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

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

Период

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

Период облигации 

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

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

0

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

1

Ежегодный

2

Полугодовой

3

Три года

4

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

6

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

12

Ежемесячно

Основание

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

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

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

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

Соглашение по подсчету дней

0

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

1

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

2

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

3

actual/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

actual/actual ICMA - количество дней как в периоде, так и в году - фактическое количество дней, а периодичность объединения - годовая.

9

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

10

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

11

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

12

actual/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.

Формально, a NaN является арифметическим стандартом IEEE ® для Not-a-Number и используется для указания результата неопределенной операции (например, нуля, деленного на ноль). Однако 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около-1 вектор сроков погашения, cfdates знает, что у вас есть портфель с двумя облигациями.

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

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

Наконец, рассмотрим следующие вызовы 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 + скорость/частота). Продолжительность Маколея является мерой чувствительности цен к изменениям доходности. Эта продолжительность измеряется в годах и представляет собой средневзвешенное время до погашения инструмента.

Для иллюстрации в следующем примере вычисляются годовая продолжительность Маколея и измененная продолжительность, а также периодическая продолжительность Маколея для облигации с указанными выше датами погашения (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  ×  SheyValue  × 2)

Где PV - текущее значение инструмента, PV_up и PV_down - новые значения после того, как кривая дисконтирования была шокирована, а SheyValue - изменение процентной ставки. Например, если выбраны ключевые ставки на 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

См. также

| | | |

Связанные примеры

Подробнее