В этом примере показано, как оценить варианты индекса CDS с помощью cdsoptprice с прямой регулировкой разброса. В отличие от одноименного CDS, индекс портфеля CDS содержит несколько кредитов. Когда один или несколько кредитов не выполнены, соответствующие условные платежи производятся покупателю защиты, но договор все еще продолжается с уменьшенными купонными выплатами. Учитывая тот факт, что опция индекса CDS не отменяется, когда некоторые из базовых кредитов по умолчанию до истечения срока действия, можно попытаться оценить варианты индекса CDS, используя модель Black's для неклюкающего одноименного варианта CDS. Тем не менее, модель Блэка в этой форме не подходит для ценообразования вариантов индекса CDS, потому что она не фиксирует решение упражнения правильно, когда спред страйка (K) очень высок, и не обеспечивает паритет пут-колла, когда (K) не равен договорному спреду (O'Kane, 2008).
Однако при соответствующих модификациях модель Black для одноименных опций CDS, используемая в cdsoptprice может обеспечить хорошее приближение для параметров индекса CDS. Хотя существуют некоторые изменения в способе изменения модели черного для вариантов индекса CDS, они обычно включают корректировку прямого разброса F, страйк-разброса K или обоих. Здесь мы описываем подход только к корректировке прямого спреда. В модели Блэка для одноименных опций CDS прямой разброс F определяется как:
t, tE) RPV01 (t, tE, T)
где
S - это спред.
RPV01 - рискованное текущее значение базисной точки (см. cdsrpv01).
t - дата оценки.
tE - дата истечения срока действия опциона.
T - дата погашения CDS.
Чтобы правильно зафиксировать решение упражнения для вариантов индекса CDS, мы используем форму нокаута модели Black и корректируем форвард-спред, чтобы включить FEP следующим образом:
tE, T)
с FEP, определенным как
− Q (t, tE))
где
R - скорость восстановления.
Z - коэффициент дисконтирования.
Q - вероятность выживания.
В cdsoptprice, прямая регулировка разброса может быть выполнена с помощью AdjustedForwardSpread параметр. При вычислении скорректированного прямого спреда мы можем вычислить спреды, используя cdsspread и RPV01s с использованием cdsrpv01.
Настройте данные для индекса CDS, его опции и нулевой кривой. Основой является 5-летний индекс CDS, созревающий на 20-Jun-2017, и срок действия опции истекает на 20-Jun-2012. При начальной загрузке кривой вероятности по умолчанию предполагается плоский разброс индекса.
% CDS index and option data Recovery = .4; Basis = 2; Period = 4; CDSMaturity = datenum('20-Jun-2017'); ContractSpread = 100; IndexSpread = 140; BusDayConvention = 'follow'; Settle = datenum('13-Apr-2012'); OptionMaturity = datenum('20-Jun-2012'); OptionStrike = 140; SpreadVolatility = .69; % Zero curve data MM_Time = [1 2 3 6]'; MM_Rate = [0.004111 0.00563 0.00757 0.01053]'; MM_Dates = daysadd(Settle,30*MM_Time,1); Swap_Time = [1 2 3 4 5 6 7 8 9 10 12 15 20 30]'; Swap_Rate = [0.01387 0.01035 0.01145 0.01318 0.01508 0.01700 0.01868 ... 0.02012 0.02132 0.02237 0.02408 0.02564 0.02612 0.02524]'; Swap_Dates = daysadd(Settle,360*Swap_Time,1); InstTypes = [repmat({'deposit'},size(MM_Time));repmat({'swap'},size(Swap_Time))]; Instruments = [repmat(Settle,size(InstTypes)) [MM_Dates;Swap_Dates] [MM_Rate;Swap_Rate]]; ZeroCurve = IRDataCurve.bootstrap('zero',Settle,InstTypes,Instruments); % Bootstrap the default probability curve assuming a flat index spread. MarketData = [CDSMaturity IndexSpread]; ProbDates = datemnth(OptionMaturity,(0:5*12)'); ProbData = cdsbootstrap(ZeroCurve, MarketData, Settle, 'ProbDates', ProbDates);
Вычислите точечные и прямые RPV01s, которые будут использоваться позже при вычислении скорректированного прямого разброса. Для этого мы можем использовать cdsrpv01.
% RPV01(t,T) RPV01_CDSMaturity = cdsrpv01(ZeroCurve,ProbData,Settle,CDSMaturity) % RPV01(t,t_E,T) RPV01_OptionExpiryForward = cdsrpv01(ZeroCurve,ProbData,Settle,CDSMaturity,... 'StartDate',OptionMaturity) % RPV01(t,t_E) = RPV01(t,T) - RPV01(t,t_E,T) RPV01_OptionExpiry = RPV01_CDSMaturity - RPV01_OptionExpiryForward
RPV01_CDSMaturity =
4.7853
RPV01_OptionExpiryForward =
4.5971
RPV01_OptionExpiry =
0.1882Вычисление спредов точек с помощью cdsspread.
% S(t,t_E) Spread_OptionExpiry = cdsspread(ZeroCurve,ProbData,Settle,OptionMaturity,... 'Period',Period,'Basis',Basis,'BusDayConvention',BusDayConvention,... 'PayAccruedPremium',true,'recoveryrate',Recovery) % S(t,T) Spread_CDSMaturity = cdsspread(ZeroCurve,ProbData,Settle,CDSMaturity,... 'Period',Period,'Basis',Basis,'BusDayConvention',BusDayConvention,... 'PayAccruedPremium',true,'recoveryrate',Recovery)
Spread_OptionExpiry = 139.9006 Spread_CDSMaturity = 140.0000
Спреды и RPV01s пятна затем используются для вычисления прямого спреда.
% F = S(t,t_E,T) ForwardSpread = (Spread_CDSMaturity.*RPV01_CDSMaturity - ... Spread_OptionExpiry.*RPV01_OptionExpiry)./RPV01_OptionExpiryForward
ForwardSpread = 140.0040
Вычислите внешнюю защиту (FEP).
FEP = 10000*(1-Recovery)*ZeroCurve.getDiscountFactors(OptionMaturity)*ProbData(1,2)
FEP = 26.3108
Вычислите скорректированный прямой разброс.
AdjustedForwardSpread = ForwardSpread + FEP./RPV01_OptionExpiryForward
AdjustedForwardSpread = 145.7273
Вычислить цены опционов с помощью cdsoptprice с скорректированным прямым спредом. Еще раз обратите внимание, что Knockout параметр должен быть установлен как true потому что FEP уже был включен в скорректированный прямой спред.
[Payer,Receiver] = cdsoptprice(ZeroCurve, ProbData, Settle, OptionMaturity, ... CDSMaturity, OptionStrike, SpreadVolatility,'Knockout',true,... 'AdjustedForwardSpread', AdjustedForwardSpread,'PayAccruedPremium',true); fprintf(' Payer: %.0f Receiver: %.0f \n',Payer,Receiver);
Payer: 92 Receiver: 66
cdsoptprice | cdsrpv01 | cdsspread