В этом примере показано, как оценить подкачки сначала к значению по умолчанию (FTD) под гомогенным предположением потерь.
Первая к значению по умолчанию подкачка является инструментом, который платит предопределенную сумму когда (и если) первая из корзины инструментальных значений по умолчанию кредита. Инструменты кредита в корзине обычно являются связями. Если вы принимаете, что сумма потерь после кредитного события является тем же самым для всех кредитов в корзине, вы находитесь под гомогенным предположением потерь. Это предположение делает модели более простыми, потому что любое значение по умолчанию в корзине инициировало ту же сумму платежа. Этим примером является реализация методологии оценки для этих инструментов, как описано в О'Кэйне [2]. В методологии существует два шага:
Вычислите вероятность выживания для корзины численно.
Используйте эту кривую выживания и стандартную функциональность кредитного дефолтного свопа (CDS) одно имени, чтобы найти распространения FTD и оценить существующие подкачки FTD.
Учитывая рыночные котировки CDS для каждого выпускающего в корзине, используйте cdsbootstrap
калибровать отдельные кривые вероятности по умолчанию для каждого выпускающего.
% Interest-rate curve ZeroDates = datenum({'17-Jan-10','17-Jul-10','17-Jul-11','17-Jul-12',... '17-Jul-13','17-Jul-14'}); ZeroRates = [1.35 1.43 1.9 2.47 2.936 3.311]'/100; ZeroData = [ZeroDates ZeroRates]; % CDS spreads % Each row in MarketSpreads corresponds to a different issuer; each % column to a different maturity date (corresponding to MarketDates) MarketDates = datenum({'20-Sep-10','20-Sep-11','20-Sep-12','20-Sep-14',... '20-Sep-16'}); MarketSpreads = [ 160 195 230 285 330; 130 165 205 260 305; 150 180 210 260 300; 165 200 225 275 295]; % Number of issuers equals number of rows in MarketSpreads nIssuers = size(MarketSpreads,1); % Settlement date Settle = datenum('17-Jul-2009');
На практике ось времени дискретизируется, и кривая выживания FTD только оценена в узлах решетки. Этот пример использует одну точку каждые три месяца. Запрашивать тот cdsbootstrap
возвращает значения вероятности по умолчанию по определенным узлам решетки, что вы хотите, используете дополнительный аргумент 'ProbDates'
. Добавьте исходные стандартные даты рынка CDS в сетку, в противном случае информация о вероятности по умолчанию о тех датах интерполирована с помощью двух самых близких дат на сетке, и затем цены на даты рынка будут противоречивы с исходными данными о рынке.
ProbDates = union(MarketDates,daysadd(Settle,360*(0.25:0.25:8),1)); nProbDates = length(ProbDates); DefProb = zeros(nIssuers,nProbDates); for ii = 1:nIssuers MarketData = [MarketDates MarketSpreads(ii,:)']; ProbData = cdsbootstrap(ZeroData,MarketData,Settle,... 'ProbDates',ProbDates); DefProb(ii,:) = ProbData(:,2)'; end
Вот калиброванные кривые вероятности по умолчанию для каждого кредита в корзине.
figure plot(ProbDates',DefProb) datetick title('Individual Default Probability Curves') ylabel('Cumulative Probability') xlabel('Date')
Скрытые переменные используются в различных контекстах кредитного риска с различными интерпретациями. В некоторых контекстах скрытая переменная является прокси для разнообразия в значении активов, и область этой переменной сгруппирована с каждым интервалом, соответствующим кредитному рейтингу. Пределы интервалов или пороги, определяются из матриц миграции кредита. В нашем контексте скрытая переменная сопоставлена ко времени, чтобы принять значение по умолчанию, и пороги определяют интервалы в дискретизированной сетке времени, где значения по умолчанию могут произойти.
Официально, если время к значению по умолчанию конкретного выпускающего обозначается , и мы знаем его функцию вероятности по умолчанию , скрытая переменная и соответствующие пороги удовлетворить
или
Эти отношения делают подходы скрытой переменной удобными для обеих симуляций и аналитических дериваций. Оба и функции времени.
Выбор распределения для переменной определяет пороги . В стандартной модели скрытой переменной, переменной выбран, чтобы следовать за стандартным нормальным распределением, от который
где совокупное стандартное нормальное распределение.
Используйте предыдущую формулу, чтобы определить пороги по умолчанию разовые или просто пороги по умолчанию, соответствуя вероятностям по умолчанию, ранее полученным для кредитов в корзине.
DefThresh = norminv(DefProb);
Следующий О'Кэйн [2], можно использовать модель скрытой переменной с одним фактором, чтобы вывести выражения для функции вероятности выживания корзины.
Учитывая параметры для каждого выпускающего , и, учитывая независимые стандартные нормальные переменные и , модель скрытой переменной с одним фактором принимает что скрытая переменная сопоставленный выпускающему удовлетворяет
Это вызывает корреляцию между выпускающими и из . Все скрытые переменные совместно используйте общий множитель когда источник неопределенности, но каждая скрытая переменная также имеет особенный источник неопределенности . Большее коэффициент , больше скрытая переменная напоминает общий множитель .
Используя модель скрытой переменной, можно вывести аналитическую формулу для вероятности выживания корзины. Вероятность тот выпускающий выживает в прошлый раз , другими словами, то, что его время по умолчанию больше
где порог по умолчанию, вычисленный выше для выпускающего , для - дата th в сетке дискретизации. Условное выражение на значении одного фактора , вероятность, что все выпускающие выживают в прошлый раз
где продукт выравнивается по ширине потому что весь независимы. Поэтому условное выражение на , независимы. Безусловная вероятность никаких значений по умолчанию ко времени интеграл по всем значениям из предыдущей условной вероятности
с стандартная нормальная плотность.
Путем оценки этого одномерного интеграла для каждой точки в сетке вы получаете дискретизацию кривой выживания для целой корзины, которая является кривой выживания FTD.
Модель скрытой переменной может также использоваться, чтобы симулировать времена по умолчанию, который является задним механизмом многих методологий оценки для инструментов кредита. Loeffler и Posch [1], например, оценивают вероятность выживания корзины через симуляцию. В каждом симулированном сценарии время, чтобы принять значение по умолчанию определяется для каждого выпускающего. С некоторой бухгалтерией вероятность наличия первого значения по умолчанию на каждом блоке сетки может быть оценена от симуляции. Подход симуляции также обсужден в О'Кэйне [2]. Симуляция очень гибка и применима ко многим инструментам кредита. Однако аналитические подходы предпочтены, когда доступно, потому что они намного быстрее и более точны, чем симуляция.
Чтобы вычислить вероятности выживания FTD в этом примере, установите все беты на квадратный корень из целевой корреляции. Затем можно циклично выполниться по всем датам в сетке времени, чтобы вычислить одномерный интеграл, который дает вероятность выживания корзины.
Относительно реализации, условной вероятности выживания в зависимости от скалярного Z
был бы
condProb=@(Z)prod(normcdf((-DefThresh(:,jj)+beta*Z)./sqrt(1-beta.^2)));
Однако функция интегрирования требует, чтобы указатель на функцию подынтегрального выражения принял векторы. Несмотря на то, что цикл вокруг скалярной версии условной вероятности работал бы, намного более эффективно векторизовать условную вероятность с помощью bsxfun
.
beta = sqrt(0.25)*ones(nIssuers,1); FTDSurvProb = zeros(size(ProbDates)); for jj = 1:nProbDates % Vectorized conditional probability as a function of Z vecCondProb = @(Z)prod(normcdf(bsxfun(@rdivide,... -repmat(DefThresh(:,jj),1,length(Z))+bsxfun(@times,beta,Z),... sqrt(1-beta.^2)))); % Truncate domain of normal distribution to [-5,5] interval FTDSurvProb(jj) = integral(@(Z)vecCondProb(Z).*normpdf(Z),-5,5); end FTDDefProb = 1-FTDSurvProb;
Сравните вероятность FTD с вероятностями по умолчанию отдельных выпускающих.
figure plot(ProbDates',DefProb) datetick hold on plot(ProbDates,FTDDefProb,'LineWidth',3) datetick hold off title('FTD and Individual Default Probability Curves') ylabel('Cumulative Probability') xlabel('Date')
Под предположением, что все инструменты в корзине имеют ту же скорость восстановления или гомогенное предположение потерь (см. О'Кэйна [2]), вы получаете распространение для подкачки FTD с помощью cdsspread
функция путем передачи данных о вероятности FTD только вычисляется.
Maturity = MarketDates; ProbDataFTD = [ProbDates, FTDDefProb]; FTDSpread = cdsspread(ZeroData,ProbDataFTD,Settle,Maturity);
Сравните распространения FTD с отдельными распространениями.
figure plot(MarketDates,MarketSpreads') datetick hold on plot(MarketDates,FTDSpread,'LineWidth',3) hold off title('FTD and Individual CDS Spreads') ylabel('FTD Spread (bp)') xlabel('Maturity Date')
Существующая подкачка FTD может быть оценена с cdsprice
, использование той же вероятности FTD.
Maturity0 = MarketDates(1); % Assume maturity on nearest market date Spread0 = 540; % Spread of existing FTD contract % Assume default values of recovery and notional FTDPrice = cdsprice(ZeroData,ProbDataFTD,Settle,Maturity0,Spread0); fprintf('Price of existing FTD contract: %g\n',FTDPrice)
Price of existing FTD contract: 17644.7
Чтобы проиллюстрировать чувствительность распространений FTD к параметрам модели, вычислите распространения рынка для области значений значений корреляции.
corr = [0 0.01 0.10 0.25 0.5 0.75 0.90 0.99 1]; FTDSpreadByCorr = zeros(length(Maturity),length(corr)); FTDSpreadByCorr(:,1) = sum(MarketSpreads)'; FTDSpreadByCorr(:,end) = max(MarketSpreads)'; for ii = 2:length(corr)-1 beta = sqrt(corr(ii))*ones(nIssuers,1); FTDSurvProb = zeros(length(ProbDates)); for jj = 1:nProbDates % Vectorized conditional probability as a function of Z condProb = @(Z)prod(normcdf(bsxfun(@rdivide,... -repmat(DefThresh(:,jj),1,length(Z))+bsxfun(@times,beta,Z),... sqrt(1-beta.^2)))); % Truncate domain of normal distribution to [-5,5] interval FTDSurvProb(jj) = integral(@(Z)condProb(Z).*normpdf(Z),-5,5); end FTDSurvProb = FTDSurvProb(:,1); FTDDefProb = 1-FTDSurvProb; ProbDataFTD = [ProbDates, FTDDefProb]; FTDSpreadByCorr(:,ii) = cdsspread(ZeroData,ProbDataFTD,Settle,Maturity); end
Распространения FTD находятся в полосе между суммой и максимумом отдельных распространений. Когда корреляция увеличивается до одной, уменьшения распространений FTD к максимуму отдельных распространений в корзине (все значение по умолчанию кредитов вместе). Когда корреляция уменьшается к нулю, распространения FTD приближаются к сумме отдельных распространений (независимые кредиты).
figure legends = cell(1,length(corr)); plot(MarketDates,FTDSpreadByCorr(:,1),'k:') legends{1} = 'Sum of Spreads'; datetick hold on for ii = 2:length(corr)-1 plot(MarketDates,FTDSpreadByCorr(:,ii),'LineWidth',3*corr(ii)) legends{ii} = ['Corr ' num2str(corr(ii)*100) '%']; end plot(MarketDates,FTDSpreadByCorr(:,end),'k-.') legends{end} = 'Max of Spreads'; hold off title('FTD Spreads for Different Correlations') ylabel('FTD Spread (bp)') xlabel('Maturity Date') legend(legends,'Location','NW')
Для коротких сроков платежа и маленьких корреляций, корзина эффективно независима (распространение FTD очень близко к сумме отдельных распространений). Эффект корреляции становится более значительным для более длинных сроков платежа.
Вот альтернативная визуализация зависимости распространений FTD на корреляции.
figure surf(corr,MarketDates,FTDSpreadByCorr) datetick('y') ax = gca; ax.YDir = 'reverse'; view(-40,10) title('FTD Spreads for Different Correlations and Maturities') xlabel('Correlation') ylabel('Maturity Date') zlabel('FTD Spread (bp)')
[1] Loeffler, Гантер и Питер Пош. Использование моделирования кредитного риска Excel и VBA. Вайли Финэнс, 2007.
[2] О'Кэйн, Доминик. Моделирование одно имени и мультиимени Кредитные деривативы. Вайли Финэнс, 2008.
cdsbootstrap
| cdsprice
| cdsspread
| cdsrpv01