bondDefaultBootstrap

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

Синтаксис

[ProbabilityData,HazardData] = bondDefaultBootstrap(ZeroData,MarketData,Settle)
[ProbabilityData,HazardData] = bondDefaultBootstrap(___,Name,Value)

Описание

пример

[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.0299675399937613
                    737433        0.0418832295824674
                    738188        0.0905183328842618
                    738233         0.101248065083714
                    739833         0.233002708031915

HazardData = 5×2

                    737226        0.0157077745460246
                    737433        0.0217939816590399
                    738188        0.0251849128247209
                    738233         0.096260871864083
                    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.217308133826187
                    738673          0.38956773145021

hazard1 = 4×2

                    736847        0.0813390794774647
                    737577        0.0521615800986284
                    737943        0.0674145844133175
                    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          0     

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

свернуть все

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

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

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

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

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

Примечание

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

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

Расчетный день, заданный как последовательный номер даты, вектор символов даты, объект datetime или объект строки даты. Settle должен быть ранее, чем или равен датам погашения в MarketData.

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

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: [ProbabilityData,HazardData] = bondDefaultBootstrap(ZeroData,MarketData,Settle,'RecoveryRate',Recovery,'ZeroCompounding',-1)

Примечание

Любой дополнительный вход размера N-by-1 также приемлем как массив размера 1-by-N, или как одно значение, применимое ко всем контрактам.

Скорость восстановления, заданная как пара, разделенная запятой, состоящая из 'RecoveryRate' и N-by-1 вектор скоростей восстановления, выраженных как десятичное число от 0 до 1.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дата выпуска облигаций, заданная как пара, разделенная запятой, состоящая из 'IssueDate' и N-by-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-by-2 матрица с датами и соответствующими совокупными значениями вероятности по умолчанию. Даты совпадают с теми в MarketData, если дополнительный входной параметр ProbabilityDates не обеспечивается.

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

Примечание

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

Ссылки

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

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

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

|

Темы

Введенный в R2017a