bondDefaultBootstrap

Загрузите кривую вероятности по умолчанию от цен облигаций

Описание

пример

[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

format

Повторно оцените одну из связей из списка связей на основе кривой вероятности по умолчанию. Ожидаемый результат этой переоценки является идеальной парой с рыночной котировкой.

Используйте следующие Казначейские данные Отдела США Казначейства.

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 array
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

Входные параметры

свернуть все

Нулевые данные об уровне, заданные как M- 2 матрица дат и нулевых уровней или IRDataCurve объект нулевых уровней. Для входа массивов даты должны быть введены как последовательные числа даты, и учетная ставка должна быть в десятичной форме.

Когда ZeroData IRDataCurve объект, ZeroCompounding и ZeroBasis неявны в ZeroData и избыточны в этой функции. В этом случае задайте эти дополнительные параметры при построении IRDataCurve объект перед использованием этого bondDefaultBootstrap функция.

Для получения дополнительной информации о IRDataCurve возразите, смотрите Создание Объекта IRDataCurve (Financial Instruments Toolbox).

Типы данных: double

Данные о рынке облигаций, заданные как N- 3 матрица дат погашения, рыночных цен и купонных ставок для связей. Даты должны быть введены как последовательные числа даты, рыночные цены должны быть числовыми значениями, и купонная ставка должна быть в десятичной форме.

Примечание

Предупреждение выведено когда MarketData не сортируется в порядке возрастания ко времени.

Типы данных: double

Расчетный день, заданный как последовательный номер даты, вектор символов даты, объект 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' и N- 1 вектор скоростей восстановления, выраженных как десятичное число от 0 через 1.

Типы данных: double

Даты выхода данных о вероятности по умолчанию, заданных как разделенная запятой пара, состоящая из 'ProbabilityDates' и P- 1 вектор, данный как последовательные числа даты, объекты datetime, векторы символов даты или объекты строки даты.

Типы данных: double | char | datetime | string

Соединение частоты кривой нулевой ширины, заданной как разделенная запятой пара, состоящая из 'ZeroCompounding' и N- 1 вектор. Значения:

  • 1 — Ежегодное соединение

  • 2 — Полугодовое соединение

  • 3 — Соединение три раза в год

  • 4 — Ежеквартально соединение

  • 6 — Два раза в месяц соединение

  • 12 — Ежемесячно соединение

  • −1 — Непрерывное соединение

Типы данных: double

Основание кривой нулевой ширины, заданной как разделенная запятой пара, состоящая из 'ZeroBasis' и те же значения перечислены для Basis.

Типы данных: double

Метод восстановления, заданный как разделенная запятой пара, состоящая из 'RecoveryMethod' и вектор символов или строка со значением 'presentvalue' или 'facevalue'.

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

  • 'facevalue' принимает, что связь восстанавливает данную часть своей номинальной стоимости после восстановления.

Типы данных: char | string

Поверхность или номинальная стоимость, заданная как разделенная запятой пара, состоящая из 'Face' и NINST- 1 вектор связей.

Типы данных: double

Платежная частота, заданная как разделенная запятой пара, состоящая из 'Period' и N- 1 вектор со значениями 0, 1, 2, 3, 4, 6, или 12.

Типы данных: double

Основание дневного количества инструмента, заданного как разделенная запятой пара, состоящая из '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, использование NINST- 1 вектор. Это правило применяется только когда Maturity дата конца месяца в течение месяца, имея 30 или меньше дней.

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

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

Типы данных: double

Дата выпуска облигаций, заданная как разделенная запятой пара, состоящая из 'IssueDate' и N- 1 вектор, данный как последовательные числа даты, объекты datetime, векторы символов даты или объекты строки даты.

Типы данных: double | char | datetime | string

Сначала фактическая дата купона, заданная как разделенная запятой пара, состоящая из 'FirstCouponDate' и последовательный номер даты. FirstCouponDate используется, когда связь имеет неправильный первый период купона. Когда FirstCouponDate и LastCouponDate оба заданы, FirstCouponDate более приоритетен в определении структуры купонного платежа.

Типы данных: double

В последний раз фактическая дата купона, заданная как разделенная запятой пара, состоящая из 'LastCouponDate' и последовательный номер даты. LastCouponDate используется, когда связь имеет неправильный последний период купона. В отсутствие заданного FirstCouponDate, заданный LastCouponDate определяет структуру купона связи. Структура купона связи является усеченной в LastCouponDate, независимо от того, где это падает и сопровождается только датой потока наличности зрелости связи.

Типы данных: double

Передайте срок начала работы платежей, заданных как разделенная запятой пара, состоящая из 'StartDate' и последовательный номер даты. StartDate когда связь на самом деле запускается (дата, с которой поток наличности связи рассматривается). Чтобы сделать инструментальный запуск форварда, задайте эту дату как будущую дату.

Типы данных: double

Соглашения рабочего дня, заданные как разделенная запятой пара, состоящая из 'BusinessDayConvention' и вектор символов или объект строки. Выбор для соглашения рабочего дня определяет, как обработаны нерабочие дни. Нерабочие дни заданы как выходные плюс любая другая дата, что компании не открыты (например, установленные законом праздники). Значения:

  • 'actual' — Нерабочие дни эффективно проигнорированы. Потоки наличности, которые падают в нерабочие дни, приняты, чтобы быть распределенными в фактическую дату.

  • 'follow' — Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в следующий рабочий день.

  • 'modifiedfollow' — Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в следующий рабочий день. Однако, если следующий рабочий день находится в различном месяце, предыдущий рабочий день принят вместо этого.

  • 'previous' — Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в предыдущий рабочий день.

  • 'modifiedprevious' — Потоки наличности, которые падают в нерабочий день, приняты, чтобы быть распределенными в предыдущий рабочий день. Однако, если предыдущий рабочий день находится в различном месяце, следующий рабочий день принят вместо этого.

Типы данных: char | cell | string

Выходные аргументы

свернуть все

Значения вероятности по умолчанию, возвращенные как P- 2 матрица с датами и соответствующими совокупными значениями вероятности по умолчанию. Даты совпадают с теми в MarketData, если дополнительный входной параметр ProbabilityDates обеспечивается.

Значения показателя риска, возвращенные как N- 2 матрица с датами и соответствующими значениями показателя риска для вероятностной модели выживания. Даты совпадают с теми в MarketData.

Примечание

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

Ссылки

[1] Jarrow, Роберт А. и Стюарт Тернбулл. "Оценивая Производные на Financial Securities Согласно Кредитному риску". Журнал Финансов. 50.1, 1995, стр 53–85.

[2] Berd, A., Mashal, R. и Пейли Ван. “Задавая, Оценка и Используя Структуры Условия кредита”. Отчет по результатам исследования, Lehman Brothers, 2004.

Смотрите также

|

Темы

Введенный в R2017a

Для просмотра документации необходимо авторизоваться на сайте