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

Это вызывает корреляцию между эмитентами
и
.
Все латентные переменные
имеют общий фактор в качестве
источника неопределенности, но каждая латентная переменная также имеет идиосинкратический источник неопределенности. Чем
больше коэффициент, тем
больше скрытая переменная напоминает общий коэффициент.
Используя модель скрытых переменных, мы получаем аналитическую формулу вероятности выживания корзины.
Вероятность того, что эмитент
переживет прошедшее время,
другими словами, что его время по умолчанию
больше, чем

где
- пороговое значение по умолчанию, вычисленное выше для эмитента,
для -
й даты в сетке дискретизации.
При условии стоимости одного фактора
вероятность того, что все эмитенты переживут прошедшее время
, равна
![$$Pr (\mbox{No defaults by time } t_j | Z )$$
$$= Pr ( \tau_i > t_j \mbox{ for all } i | Z )$$
$$= \prod_i [ 1 - Pr (A_i \leq C_i(t_j) | Z) ]$$](../examples/fininst/win64/FirstToDefaultSwapsExample_eq10219093896181429100.png)
где продукт оправдан, потому что все "
ы независимы. Следовательно, при условии,'s 
независимы.
Безусловная вероятность отсутствия значений по времени
является интегралом всех значений
предыдущей условной вероятности
![$$Pr ( \mbox{No defaults by time } t_j )$$
$$= \int_Z \prod_i [1 - Pr (A_i \leq C_i(t_j) | Z)] \phi(Z) dZ$$](../examples/fininst/win64/FirstToDefaultSwapsExample_eq04036322384377993391.png)
со
стандартной нормальной плотностью.
Оценивая этот одномерный интеграл для каждой точки
сетки, мы получаем дискретизацию кривой выживания для всей корзины, которая является кривой выживания FTD.
Модель скрытых переменных также может использоваться для моделирования времени по умолчанию, которое является движущей силой многих методологий ценообразования для кредитных инструментов. Лоэффлер и Пош [1], например, оценивают вероятность выживания корзины с помощью моделирования. В каждом смоделированном сценарии для каждого эмитента определяется время до дефолта. При некоторой бухгалтерии вероятность наличия первого значения по умолчанию на каждом сегменте сетки может быть оценена из моделирования. Симуляционный подход также обсуждается в O'Kane [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')

В предположении, что все инструменты в корзине имеют одинаковую скорость восстановления или предположение о однородных потерях (см. O'Kane в ссылках), мы получаем спред для свопа 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] Лоэффлер, Гюнтер и Питер Пош, моделирование кредитных рисков с использованием Excel и VBA, Wiley Finance, 2007.
[2] О'Кейн, Доминик, Моделирование одноименных и многоименных кредитных деривативов, Wiley Finance, 2008.
cdsbootstrap | cdsprice | cdsrpv01 | cdsspread