Ценовые облигации в портфеле по набору нулевых кривых
вычисляет цены облигаций в портфеле с помощью набора нулевых кривых. 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
⋮
Bonds
- Информация о купонных облигациях для расчета ценИнформация о купонной облигации для вычисления цен, заданная в виде 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
Settle
- Дата расчетаДата расчета, заданная как серийные номера дат, векторы символов даты или массивы datetime.
Типы данных: double
| datetime
| char
ZeroRates
- Наблюдаемые нулевые ставкиНаблюдались нулевые скорости, заданные как NUMDATES
-by- NUMCURVES
матрица десятичных дробей. Каждый столбец представляет кривую скорости. Каждая строка представляет дату наблюдения.
Типы данных: double
| datetime
| char
ZeroDates
- Наблюдаемые даты для ZeroRates
Наблюдаемые даты для ZeroRates
, заданный как NUMDATES
-by- 1
столбец с использованием серийных номеров дат, векторов символов даты или массивов datetime.
Типы данных: double
| datetime
| char
Compounding
- Частота компаундирования входных ZeroRates
в годовом исчислении2
(по умолчанию) | числовые значения: 1
, 2
, 3
, 4
, 6
, 12
,(Необязательно) Частота компаундирования входных ZeroRates
в годовом исчислении, заданном с использованием допустимых значений:
1
- Ежегодное компаундирование
2
- Полугодовое компаундирование (по умолчанию)
3
- Смешивание три раза в год
4
- ежеквартальное компаундирование
6
- Двухмесячное компаундирование
12
- Ежемесячное компаундирование
Типы данных: double
BondPrices
- Чистые цены облигацийЧистые цены облигаций, возвращенные как NUMBONDS
-by- NUMCURVES
матрица. Каждый столбец получают из соответствующей нулевой кривой в ZeroRates
.
В сложение можно использовать метод Financial Instruments Toolbox™ getZeroRates
(Financial Instruments Toolbox) для IRDataCurve
объект со Dates
свойство для создания вектора дат и данных, приемлемых для prbyzero
. Для получения дополнительной информации смотрите Преобразование объекта IRDataCurve или IRFunctionCurve (Financial Instruments Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.