В этом примере показано, как оценить подкачки сначала к значению по умолчанию (FTD) под гомогенным предположением потерь.
Первая к значению по умолчанию подкачка является инструментом, который платит предопределенную сумму когда (и если) первая из корзины инструментальных значений по умолчанию кредита. Инструменты кредита в корзине обычно являются связями. Если мы принимаем, что сумма потерь после кредитного события является тем же самым для всех кредитов в корзине, мы находимся под гомогенным предположением потерь. Это предположение делает модели более простыми, потому что любое значение по умолчанию в корзине инициировало ту же сумму платежа. Этим примером является реализация методологии оценки для этих инструментов, как описано в О'Кэйне [2]. В методологии существует два шага: a) Вычислите вероятность выживания для корзины численно; b) Используйте эту кривую выживания и стандартную функциональность кредитного дефолтного свопа (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')
Под предположением, что все инструменты в корзине имеют ту же скорость восстановления или гомогенное предположение потерь (см. О'Кэйна в Ссылках), мы получаем распространение для подкачки 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 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
| cdsrpv01
| cdsspread