Загрузите кривую вероятности по умолчанию от цен облигаций
[
загружает кривую вероятности по умолчанию от цен облигаций.ProbabilityData
,HazardData
]
= bondDefaultBootstrap(ZeroData
,MarketData
,Settle
)
Используя bondDefaultBootstrap
, вы можете:
Извлеките дискретные вероятности по умолчанию в течение определенного периода из данных о связи рынка.
Интерполируйте эти вероятности по умолчанию, чтобы получить кривую вероятности по умолчанию для целей оценки и управления рисками.
[
добавляют дополнительные аргументы пары "имя-значение".ProbabilityData
,HazardData
]
= bondDefaultBootstrap(___,Name,Value
)
Используйте следующие данные о связи.
Settle = datenum('08-Jul-2016'); MarketDate = datenum({'06/15/2018', '01/08/2019', '02/01/2021', '03/18/2021', '08/04/2025'}','mm/dd/yyyy'); CouponRate = [2.240 2.943 5.750 3.336 4.134]'/100; MarketPrice = [101.300 103.020 115.423 104.683 108.642]'; MarketData = [MarketDate,MarketPrice,CouponRate];
Вычислите ProbabilityData
и HazardData
.
TreasuryParYield = [0.26 0.28 0.36 0.48 0.61 0.71 0.95 1.19 1.37 1.69 2.11]'/100;
TreasuryDates = datemnth(Settle, [[1 3 6], 12 * [1 2 3 5 7 10 20 30]]');
[ZeroRates, CurveDates] = pyld2zero(TreasuryParYield, TreasuryDates, Settle);
ZeroData = [CurveDates, ZeroRates];
format longg
[ProbabilityData,HazardData]=bondDefaultBootstrap(ZeroData,MarketData,Settle)
ProbabilityData = 5×2
737226 0.0299675399937611
737433 0.0418832295824674
738188 0.090518332884262
738233 0.101248065083713
739833 0.233002708031915
HazardData = 5×2
737226 0.0157077745460244
737433 0.0217939816590403
738188 0.025184912824721
738233 0.0962608718640789
739833 0.0361632398787917
В bondDefaultBootstrap
, первый столбец ProbabilityData
выведите и первый столбец HazardData
выведите содержат соответствующие конечные даты соответствующих вероятностей по умолчанию и показателей риска. Однако сроки начала работы, используемые для расчета областей значений времени для вероятностей по умолчанию, могут отличаться от тех из показателей риска. Для вероятностей по умолчанию области значений времени все вычисляются из Settle
дата к соответствующим датам окончания, показанным в первом столбце ProbabilityData
. В отличие от этого области значений времени для показателей риска вычисляются с помощью Settle
дата и первый столбец HazardData
, так, чтобы первый показатель риска применялся от Settle
дата на первую дату рынка, второй показатель риска сначала на вторую дату рынка, и так далее, и последний показатель риска применяется с предпоследней даты рынка вперед.
datestr(Settle)
ans = '08-Jul-2016'
datestr(ProbabilityData(:,1))
ans = 5x11 char array
'15-Jun-2018'
'08-Jan-2019'
'01-Feb-2021'
'18-Mar-2021'
'04-Aug-2025'
datestr(HazardData(:,1))
ans = 5x11 char array
'15-Jun-2018'
'08-Jan-2019'
'01-Feb-2021'
'18-Mar-2021'
'04-Aug-2025'
Время располагается для вероятностей по умолчанию, которые все запускают на '08-Jul-2016'
и они заканчивают на '15-Jun-2018'
, '08-Jan-2019'
, '01-Feb-2021'
, '18-Mar-2021'
, и '04-Aug-2025'
, соответственно. Что касается показателей риска, первый показатель риска запускается на '08-Jul-2016'
и концы на '15-Jun-2018'
, второй показатель риска запускается на '15-Jun-2018'
и концы на '08-Jan-2019'
, третий показатель риска запускается на '08-Jan-2019'
и концы на '01-Feb-2021'
, и т.д.
Повторно оцените одну из связей из списка связей на основе кривой вероятности по умолчанию. Ожидаемый результат этой переоценки является идеальной парой с рыночной котировкой.
Используйте следующие Казначейские данные Отдела США Казначейства.
Settle = datetime('08-Jul-2016','Locale','en_US'); TreasuryParYield = [0.26 0.28 0.36 0.48 0.61 0.71 0.95 1.19 1.37 1.69 2.11]'/100; TreasuryDates = datemnth(Settle, [[1 3 6], 12 * [1 2 3 5 7 10 20 30]]');
Предварительно просмотрите дату связи с помощью полугодовых облигаций на предъявителя с рыночными котировками, купонными ставками и уладить датой July-08-2016.
MarketDate = datenum({'06/01/2017','06/01/2019','06/01/2020','06/01/2022'}','mm/dd/yyyy'); CouponRate = [7 8 9 10]'/100; MarketPrice = [101.300 109.020 114.42 118.62]'; MarketData = [MarketDate, MarketPrice, CouponRate]; BondList = array2table(MarketData, 'VariableNames', {'Maturity', 'Price','Coupon'}); BondList.Maturity = datetime(BondList.Maturity,'Locale','en_US','ConvertFrom','datenum'); BondList.Maturity.Format = 'MMM-dd-yyyy'
BondList=4×3 table
Maturity Price Coupon
___________ ______ ______
Jun-01-2017 101.3 0.07
Jun-01-2019 109.02 0.08
Jun-01-2020 114.42 0.09
Jun-01-2022 118.62 0.1
Выберите вторую облигацию на предъявителя в качестве той, которая будет оценена.
number = 2; TestCase = BondList(number, :);
Предварительно просмотрите безрисковые данные об уровне, если здесь, который основан на непрерывной комбинированной ставке.
[ZeroRates, CurveDates] = pyld2zero(TreasuryParYield, TreasuryDates, Settle); ZeroData = [datenum(CurveDates), ZeroRates]; RiskFreeRate = array2table(ZeroData, 'VariableNames', {'Date', 'Rate'}); RiskFreeRate.Date = datetime(RiskFreeRate.Date,'Locale','en_US','ConvertFrom','datenum'); RiskFreeRate.Date.Format = 'MMM-dd-yyyy'
RiskFreeRate=11×2 table
Date Rate
___________ _________
Aug-08-2016 0.0026057
Oct-08-2016 0.0027914
Jan-08-2017 0.0035706
Jul-08-2017 0.0048014
Jul-08-2018 0.0061053
Jul-08-2019 0.0071115
Jul-08-2021 0.0095416
Jul-08-2023 0.012014
Jul-08-2026 0.013883
Jul-08-2036 0.017359
Jul-08-2046 0.022704
Загрузите вероятность значения по умолчанию (PD) кривая от связей.
format longg
[defaultProb1, hazard1] = bondDefaultBootstrap(ZeroData, MarketData, Settle)
defaultProb1 = 4×2
736847 0.0704863142317494
737577 0.162569420050034
737943 0.217308133826188
738673 0.38956773145021
hazard1 = 4×2
736847 0.0813390794774647
737577 0.0521615800986281
737943 0.0674145844133183
738673 0.12428587278862
format
Переформатируйте вероятность по умолчанию и показатель риска для лучшего представления.
DefProbHazard = [defaultProb1, hazard1(:,2)]; DefProbHazardTable = array2table(DefProbHazard, 'VariableNames', {'Date', 'DefaultProbability', 'HazardRate'}); DefProbHazardTable.Date = datetime(DefProbHazardTable.Date,'Locale','en_US','ConvertFrom','datenum'); DefProbHazardTable.Date.Format = 'MMM-dd-yyyy'
DefProbHazardTable=4×3 table
Date DefaultProbability HazardRate
___________ __________________ __________
Jun-01-2017 0.070486 0.081339
Jun-01-2019 0.16257 0.052162
Jun-01-2020 0.21731 0.067415
Jun-01-2022 0.38957 0.12429
Предварительно просмотрите выбранную связь к перецене на основе кривой PD.
TestCase
TestCase=1×3 table
Maturity Price Coupon
___________ ______ ______
Jun-01-2019 109.02 0.08
Чтобы повторно оценить связь, сначала сгенерируйте потоки наличности и платежные дни.
[Payments, PaymentDates] = cfamounts(TestCase.Coupon, Settle, TestCase.Maturity); AccInt=-Payments(1); % Truncate the payments as well as payment dates for calculation % PaymentDates(1) is the settle date, no need for following calculations PaymentDates = PaymentDates(2:end)
PaymentDates = 1x6 datetime
Columns 1 through 5
01-Dec-2016 01-Jun-2017 01-Dec-2017 01-Jun-2018 01-Dec-2018
Column 6
01-Jun-2019
Payments = Payments(2:end)
Payments = 1×6
4 4 4 4 4 104
Вычислите коэффициенты дисконтирования на платежные дни.
DF = zero2disc(interp1(RiskFreeRate.Date, RiskFreeRate.Rate, PaymentDates, 'linear', 'extrap'), PaymentDates, Settle, -1)
DF = 1×6
0.9987 0.9959 0.9926 0.9887 0.9845 0.9799
Примите, что объем восстановления является фиксированной пропорцией номинальной стоимости связи. Номинальной стоимостью связи является 100
, и отношение восстановления установлено в 40%, как принято в bondDefaultBootstrap
.
Num = length(Payments); RecoveryAmount = repmat(100*0.4, 1, Num)
RecoveryAmount = 1×6
40 40 40 40 40 40
Вычислите вероятность значения по умолчанию на основе кривой по умолчанию.
DefaultProb1 = bondDefaultBootstrap(ZeroData, MarketData, Settle, 'ZeroCompounding', -1, 'ProbabilityDates', PaymentDates'); SurvivalProb = 1 - DefaultProb1(:,2)
SurvivalProb = 6×1
0.9680
0.9295
0.9055
0.8823
0.8595
0.8375
Вычислите основанную на модели чистую цену облигаций.
DirtyPrice = DF * (SurvivalProb.*Payments') + (RecoveryAmount.*DF) * (-diff([1;SurvivalProb])); ModelPrice = DirtyPrice - AccInt
ModelPrice = 109.0200
Сравните переоцененную связь с рыночной котировкой.
ResultTable = TestCase; ResultTable.ModelPrice = ModelPrice; ResultTable.Difference = ModelPrice - TestCase.Price
ResultTable=1×5 table
Maturity Price Coupon ModelPrice Difference
___________ ______ ______ __________ __________
Jun-01-2019 109.02 0.08 109.02 1.4211e-14
ZeroData
— Нулевые данные об уровнеIRDataCurve
объектНулевые данные об уровне в виде M
- 2
матрица дат и нулевых уровней или IRDataCurve
объект нулевых уровней. Для входа массивов даты должны быть введены как последовательные числа даты, и учетная ставка должна быть в десятичной форме.
Когда ZeroData
IRDataCurve
объект, ZeroCompounding
и ZeroBasis
неявны в ZeroData
и избыточны в этой функции. В этом случае задайте эти дополнительные параметры при построении IRDataCurve
объект перед использованием этого bondDefaultBootstrap
функция.
Для получения дополнительной информации о IRDataCurve
Объект (Financial Instruments Toolbox), смотрите Создание Объекта IRDataCurve (Financial Instruments Toolbox).
Типы данных: double
MarketData
— Данные о рынке облигацийДанные о рынке облигаций в виде N
- 3
матрица дат погашения, рыночных цен и купонных ставок для связей. Даты должны быть введены как последовательные числа даты, рыночные цены должны быть числовыми значениями, и купонная ставка должна быть в десятичной форме.
Примечание
Предупреждение выведено когда MarketData
не сортируется в порядке возрастания ко времени.
Типы данных: double
Settle
— Расчетный деньРасчетный день в виде последовательного номера даты, вектора символов даты, объекта datetime или объекта строки даты. Settle
должен быть ранее, чем или равен датам погашения в MarketData
.
Типы данных: double |
char
| datetime
| string
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
[ProbabilityData,HazardData] = bondDefaultBootstrap(ZeroData,MarketData,Settle,'RecoveryRate',Recovery,'ZeroCompounding',-1)
Примечание
Любой дополнительный вход размера N
- 1
также приемлемо как массив размера 1
- N
, или как одно значение, применимое ко всем контрактам.
'RecoveryRate'
— Скорость восстановления
(значение по умолчанию) | десятичное числоСкорость восстановления в виде разделенной запятой пары, состоящей из 'RecoveryRate'
и N
- 1
вектор из скоростей восстановления, описанных как десятичное число от 0
через 1
.
Типы данных: double
'ProbabilityDates'
— Даты выхода данных о вероятности по умолчаниюMarketData
(значение по умолчанию) | последовательный номер даты | вектор символов даты | datetime возражает | объект строки датыДаты выхода данных о вероятности по умолчанию в виде разделенной запятой пары, состоящей из 'ProbabilityDates'
и P
- 1
вектор, данный как последовательные числа даты, объекты datetime, векторы символов даты или объекты строки даты.
Типы данных: double |
char
| datetime
| string
'ZeroCompounding'
— Соединение частоты кривой нулевой ширины
(полугодовое) (значение по умолчанию) | целое число со значением 1
,2
,3
,4
,6
,12
, или –1
Соединение частоты кривой нулевой ширины в виде разделенной запятой пары, состоящей из 'ZeroCompounding'
и N
- 1
вектор. Значения:
1 — Ежегодное соединение
2 — Полугодовое соединение
3 — Соединение три раза в год
4 — Ежеквартально соединение
6 — Два раза в месяц соединение
12 — Ежемесячно соединение
−1 — Непрерывное соединение
Типы данных: double
'ZeroBasis'
— Базис кривой нулевой ширины
(фактическое/фактическое) (значение по умолчанию) | целое число со значением 0
к 13
Базис кривой нулевой ширины в виде разделенной запятой пары, состоящей из 'ZeroBasis'
и те же значения перечислены для Basis
.
Типы данных: double
'RecoveryMethod'
— Метод восстановления'facevalue'
(значение по умолчанию) | вектор символов со значением 'presentvalue'
или 'facevalue'
| представьте объект в виде строки со значением 'presentvalue'
или 'facevalue'
Метод восстановления в виде разделенной запятой пары, состоящей из 'RecoveryMethod'
и вектор символов или строка со значением 'presentvalue'
или 'facevalue'
.
'presentvalue'
принимает, что на значение по умолчанию, связь оценена в данную часть к гипотетической приведенной стоимости ее остающихся потоков наличности, обесцененных на безрисковом уровне.
'facevalue'
принимает, что связь восстанавливает данную часть своей номинальной стоимости после восстановления.
Типы данных: char |
string
'Face'
— Поверхность или номинальная стоимость
(значение по умолчанию) | числовойПоверхность или номинальная стоимость в виде разделенной запятой пары, состоящей из 'Face'
и NINST
- 1
вектор из связей.
Типы данных: double
'Period'
— Платежная частота
(значение по умолчанию) | числовой со значениями 0
, 1
, 2
, 3
, 4
, 6
или 12
Платежная частота в виде разделенной запятой пары, состоящей из 'Period'
и N
- 1
вектор со значениями 0
, 1, 2
, 3
, 4
, 6
, или
12
.
Типы данных: double
'Basis'
— Базис дневного количества инструмента
(фактическое/фактическое) (значение по умолчанию) | целые числа набора [0...13]
| вектор из целых чисел набора [0...13]
Базис дневного количества инструмента в виде разделенной запятой пары, состоящей из 'Basis'
и положительное целое число с помощью NINST
- 1
вектор. Значения:
0 = фактический/фактический
1 = 30/360 (СИА)
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 = ШИНА/252
Для получения дополнительной информации смотрите Базис.
Типы данных: double
'EndMonthRule'
— Флаг правила конца месяца
(в действительности) (значение по умолчанию) | неотрицательный целочисленный 0
или 1
Правило конца месяца отмечает в виде разделенной запятой пары, состоящей из 'EndMonthRule'
и неотрицательное целое число, 0
или 1
, использование NINST
- 1
вектор. Это правило применяется только когда Maturity
дата конца месяца в течение месяца, имея 30 или меньше дней.
0 = Проигнорируйте правило, подразумевая, что платежный день облигационного купона всегда является тем же числовым днем месяца.
1 = Установите правило о, подразумевая, что платежный день облигационного купона всегда является прошлым фактическим днем месяца.
Типы данных: double
'IssueDate'
— Дата выпуска облигацийIssueDate
не заданный, платежные дни потока наличности определили из других входных параметров (значение по умолчанию) | последовательный номер даты | вектор символов даты | объект datetime | объект строки датыДата выпуска облигаций в виде разделенной запятой пары, состоящей из 'IssueDate'
и N
- 1
вектор, данный как последовательные числа даты, объекты datetime, векторы символов даты или объекты строки даты.
Типы данных: double |
char
| datetime
| string
'FirstCouponDate'
— Сначала фактическая дата купонаFirstCouponDate
, платежные дни потока наличности определяются из других входных параметров (значение по умолчанию) | последовательный номер датыСначала фактическая дата купона в виде разделенной запятой пары, состоящей из 'FirstCouponDate'
и последовательный номер даты. FirstCouponDate
используется, когда связь имеет неправильный первый период купона. Когда FirstCouponDate
и LastCouponDate
оба заданы, FirstCouponDate
более приоритетен в определении структуры купонного платежа.
Типы данных: double
'LastCouponDate'
— В последний раз фактическая дата купонаLastCouponDate
, платежные дни потока наличности определяются из других входных параметров (значение по умолчанию) | скаляр для последовательного номера датыВ последний раз фактическая дата купона в виде разделенной запятой пары, состоящей из 'LastCouponDate'
и последовательный номер даты. LastCouponDate
используется, когда связь имеет неправильный последний период купона. В отсутствие заданного FirstCouponDate
, заданный LastCouponDate
определяет структуру купона связи. Структура купона связи является усеченной в LastCouponDate
, независимо от того, где это падает и сопровождается только датой потока наличности зрелости связи.
Типы данных: double
'StartDate'
— Передайте срок начала работы платежейStartDate
, эффективной датой начала является Settle
дата (значение по умолчанию) | последовательный номер датыПередайте срок начала работы платежей в виде разделенной запятой пары, состоящей из 'StartDate'
и последовательный номер даты. StartDate
когда связь на самом деле запускается (дата, с которой поток наличности связи рассматривается). Чтобы сделать инструментальный запуск форварда, задайте эту дату как будущую дату.
Типы данных: double
'BusinessDayConvention'
— Соглашения рабочего дня'actual'
(значение по умолчанию) | вектор символов или строка возражает с values'actual'
, 'follow'
, 'modifiedfollow'
, 'previous'
или 'modifiedprevious'
Соглашения рабочего дня в виде разделенной запятой пары, состоящей из 'BusinessDayConvention'
и вектор символов или объект строки. Выбор для соглашения рабочего дня определяет, как обработаны нерабочие дни. Нерабочие дни заданы как выходные плюс любая другая дата, что компании не открыты (например, установленные законом праздники). Значения:
'actual'
— Нерабочие дни эффективно проигнорированы. Потоки наличности, которые падают в нерабочие дни, приняты, чтобы быть распределенными в фактическую дату.
'follow'
— Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в следующий рабочий день.
'modifiedfollow'
— Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в следующий рабочий день. Однако, если следующий рабочий день находится в различном месяце, предыдущий рабочий день принят вместо этого.
'previous'
— Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в предыдущий рабочий день.
'modifiedprevious'
— Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в предыдущий рабочий день. Однако, если предыдущий рабочий день находится в различном месяце, следующий рабочий день принят вместо этого.
Типы данных: char |
cell
| string
ProbabilityData
— Значения вероятности по умолчаниюЗначения вероятности по умолчанию, возвращенные как P
- 2
матрица с датами и соответствующими совокупными значениями вероятности по умолчанию. Даты совпадают с теми в MarketData
, если дополнительный входной параметр ProbabilityDates
обеспечивается.
HazardData
— Значения показателя рискаЗначения показателя риска, возвращенные как N
- 2
матрица с датами и соответствующими значениями показателя риска для вероятностной модели выживания. Даты совпадают с теми в MarketData
.
Примечание
Предупреждение выведено, когда немонотонные вероятности по умолчанию (то есть, отрицательные показатели риска) найдены.
Кривая вероятности по умолчанию может быть загружена из набора кавычек рынка облигаций.
Извлечение дискретных вероятностей по умолчанию в течение определенного периода из данных о связи рынка представлено формулой
где:
FV — Номинальная стоимость
Q Вероятность выживания
C Купон
R Объем восстановления
f Платежная частота (например, 2 для полугодовых облигаций на предъявителя)
Вероятность по умолчанию:
DefaultProbability
= 1 –
SurvivalProbability
[1] Jarrow, Роберт А. и Стюарт Тернбулл. "Оценивая Производные на Financial Securities Согласно Кредитному риску". Журнал Финансов. 50.1, 1995, стр 53–85.
[2] Berd, A., Mashal, R. и Пейли Ван. “Задавая, Оценка и Используя Структуры Условия кредита”. Отчет по результатам исследования, Lehman Brothers, 2004.
cdsbootstrap
| IRDataCurve
(Financial Instruments Toolbox)
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.