В этом примере показано, как оценить опции индекса CDS при помощи cdsoptprice
с регулировкой прямого спреда. В отличие от CDS с одним именем, индекс портфеля CDS содержит несколько кредитов. При дефолте одного или нескольких кредитов покупателю по защите производятся соответствующие условные платежи, но договор все еще продолжается с уменьшением купонных платежей. Учитывая тот факт, что опция индекса CDS не отменяет, когда некоторые базовые кредиты по умолчанию до истечения срока действия, можно попытаться оценить опции индекса CDS с помощью модели Black для опции CDS с одним именем без нокаута. Тем не менее, модель Блэка в этой форме не подходит для опций индекса CDS ценообразования, потому что она не фиксирует решение упражнения правильно, когда спред забастовки (K) очень высок, и не гарантирует паритет вызова в положительный момент, когда (K) не равен спреду по контракту (O'Kane, 2008).
Однако с соответствующими модификациями модель Блэка для одноименных опций CDS, используемых в cdsoptprice
может обеспечить хорошее приближение для опций индекса CDS. Несмотря на то, что существуют некоторые изменения в способе изменения модели черных для опций индекса CDS, они обычно включают корректировку передней F спреда, K спреда страйка или обоих. Здесь мы опишем подход корректировки только прямого спреда. В модели Black для одноименных опций CDS, передний спред- F определяется как:
где
S - спред.
RPV01 является рискованным текущим значением базисной точки (см cdsrpv01
).
t - дата оценки.
tE является датой истечения срока действия опции.
T - дата погашения CDS.
Чтобы правильно зафиксировать решение упражнения для опций индекса CDS, мы используем форму нокаута модели черных и корректируем прямой спред, чтобы включить FEP следующим образом:
с FEP, заданными как
где
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