Статический разброс по пятнистой кривой
В R2017b изменена спецификация необязательных входных параметров. Хотя синтаксис предыдущих упорядоченных входов все еще поддерживается, он может больше не поддерживаться в будущем релизе. Используйте необязательные входы пары "имя-значение": Period
, Basis
, EndMonthRule
, IssueDate
, FirstCouponDate
, LastCouponDate
, StartDate
, Face
, CompoundingFrequency
, DiscountBasis
, и LastCouponInterest
.
Этот пример показывает, как вычислить Федеральную национальную ипотечную ассоциацию (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;
Этот пример показывает, как вычислить Федеральную национальную ипотечную ассоциацию (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;
SpotInfo
- Информация о спотовых скоростяхИнформация о спот-скоростях, заданная как матрица из двух столбцов, ежегодная структура терминов, созданная 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
Price
- Цена на каждые $100 условной суммы облигаций, спреды которых вычисляютсяЦена для каждой номинальной суммы $100 облигаций, спреды которых вычислены, задается в виде числового значения с помощью скаляра или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор.
Типы данных: double
Coupon
- Годовая купонная ставка облигаций, спреды которых вычисляютсяГодовая купонная ставка облигаций, спреды которых вычисляются в виде десятичного значения с использованием скаляра или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор.
Типы данных: double
Settle
- Дата погашения облигацииДата расчета облигации в виде скаляра или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор с использованием серийных номеров дат, векторов символов дат или массивов данных времени. The Settle
дата должна быть перед Maturity
дата.
Типы данных: double
| char
| datetime
Maturity
- Дата погашения облигацииДата погашения облигации в виде скаляра или 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'
- Количество купонных выплат в год2
(по умолчанию) | число со значениями 0
, 1
, 2
, 3
, 4
, 6
или 12
Количество купонных выплат в год в виде разделенной разделенными запятой парами, состоящей из 'Period'
и скаляр или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор с использованием значений: 0
, 1
, 2
, 3
, 4
, 6
, или 12
.
Типы данных: double
'Basis'
- Основа прибора для подсчета дней0
(по умолчанию) | числовые значения: 0
, 1
, 2
, 3
, 4
, 6
, 7
, 8
, 9
, 10
, 11
, 12
, 13
Счетчик дней инструмента, заданный как разделенная разделенными запятой парами, состоящая из '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'
- Флаг правила в конце месяца1
(в действии) (по умолчанию) | неотрицательное целое число 0
или 1
Флаг правила в конце месяца, заданный как разделенная разделенными запятой парами, состоящая из 'EndMonthRule'
и скаляр или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор. Это правило применяется только тогда, когда Maturity
- дата окончания месяца для месяца, имеющего 30 или менее дней.
0
= Игнорируйте правило, означающее, что дата выплаты купона по облигации всегда совпадает с числовым днем месяца.
1
= Установите правило, означающее, что дата выплаты купона по облигации всегда является последним фактическим днем месяца.
Типы данных: logical
'IssueDate'
- Дата выпуска облигацийДата выпуска облигации, заданная как разделенная разделенными запятой парами, состоящая из 'IssueDate'
и скаляр или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор с использованием серийных номеров дат, векторов символов дат или массивов данных времени.
Если вы не задаете IssueDate
Даты платежа денежного потока определяются из других входов.
Типы данных: double
| char
| datetime
'FirstCouponDate'
- Нерегулярная или нормальная дата первого купонаНерегулярная или нормальная дата первого купона, заданная как разделенная разделенными запятой парами, состоящая из 'FirstCouponDate'
и скаляр или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор с использованием серийных номеров дат, векторов символов дат или массивов данных времени.
Если вы не задаете FirstCouponDate
Даты платежа денежного потока определяются из других входов.
Типы данных: double
| char
| datetime
'LastCouponDate'
- Нерегулярная или нормальная дата последнего купонаНерегулярная или нормальная дата последнего купона, заданная как разделенная разделенными запятой парами, состоящая из 'LastCouponDate'
и скаляр или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор с использованием серийных номеров дат, векторов символов дат или массивов данных времени.
Если вы не задаете LastCouponDate
Даты платежа денежного потока определяются из других входов.
Типы данных: double
| char
| datetime
'StartDate'
- Форвардная дата начала платежейДата начала пересчета платежей, заданная как разделенная разделенными запятой парами, состоящая из 'StartDate'
и скаляр или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор с использованием серийных номеров дат, векторов символов дат или массивов данных времени. The StartDate
это когда облигация фактически начинается (дата, с которой рассматривается денежный поток облигаций). Чтобы сделать инструмент стартовым, укажите эту дату как будущую дату.
Если вы не задаете StartDate
, дата начала вступления в силу является Settle
дата.
Типы данных: double
| char
| datetime
'Face'
- Номинальное значение облигации100
(по умолчанию) | числоНоминальное значение облигации, заданная как разделенная разделенными запятой парами, состоящая из 'Face'
и скаляр или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор.
Типы данных: double
'CompoundingFrequency'
- Частота компаундирования для расчета выражения2
, основы ICMA используют 1
(по умолчанию) | целое число со значением 1
, 2
, 3
, 4
, 6
, или 12
Частота компаундирования для вычисления выражения, заданная как разделенная разделенными запятой парами, состоящая из 'CompoundingFrequency'
и скаляр или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор.
1
- Ежегодное компаундирование
2
- Полу-годичное компаундирование
3
- Смешивание три раза в год
4
- ежеквартальное компаундирование
6
- Двухмесячное компаундирование
12
- Ежемесячное компаундирование
Примечание
По умолчанию SIA основ (0
- 7
) и BUS/252
используйте полугодовое соглашение о компаундировании и основы ICMA (8
- 12
) использовать ежегодное соглашение о компаундировании.
Типы данных: double
'DiscountBasis'
- Базис, используемый для вычисления коэффициентов дисконтирования для вычисления выражения0
(по умолчанию) | целые числа множества [0...13]
| вектор целых чисел множества [0...13]
Базис, используемый для вычисления коэффициентов дисконтирования для вычисления выражения, заданный как разделенная разделенными запятой парами, состоящая из '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'
- Соглашение о компаундировании для вычисления выражения облигации в последний купонный периодcompound
(по умолчанию) | значения simple
или compound
Соглашение о компаундировании для вычисления выражения облигации в последнем купонном периоде, заданное как разделенная разделенными запятой парами, состоящая из 'LastCouponInterest'
и скаляр или NUMBONDS
-by- 1
или 1
-by- NUMBONDS
вектор. LastCouponInterest
основан только на последнем купоне и значениях лица, подлежащих погашению. Допустимые значения:
simple
compound
Типы данных: char
| cell
Spread
- Статический разброс на бенчмарки в базисных точкахСтатический разброс на бенчмарк, возвращенный в базисных точках как скаляр или NUMBONDS
-by- 1
вектор.
[1] Кргин, Д. Справочник по глобальным расчетам фиксированного дохода. Уайли, 2002.
[2] Mayle, J. «Стандартные методы расчета ценных бумаг: формулы ценных бумаг с фиксированным доходом для аналитических мер». SIA, Vol 2, Jan 1994.
[3] Стигум, М., Робинсон, Ф. Денежный рынок и расчет облигаций. МакГро-Хилл, 1996.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.