В этом примере показано, как загрузить прямую кривую с помощью другой кривой для дисконтирования.
Данные необходимы как для кривой переадресации, так и для кривой скидки. Для этого конкретного примера принято, что данные предоставлены для EONIA (кривая дисконтирования) и EURIBOR (прямая кривая). Однако этот подход может использоваться в любом случае, когда построенная кривая отличается от кривой, используемой для дисконтирования денежных потоков. Хотя данные в этом примере жестко закодированы, они также могут быть импортированы в MATLAB® с Datafeed Toolbox™ или Database Toolbox™.
Settle = datenum('20-Aug-2013'); % Deposit data EONIADepositRates = [.0007 .00067]'; EONIADepositMat = datenum({'3-Sep-2013','20-Sep-2013'}); EONIADepositBasis = 2; % act/360 EONIADepositPeriod = 0; % FRA EONIAFRARates = [.00025 .0003 .00043 .00054]'; EONIAFRAStartDate = datenum({'11-Sep-2013','9-Oct-2013','13-Nov-2013','11-Dec-2013'}); EONIAFRAEndDate = datenum({'9-Oct-2013','13-Nov-2013','11-Dec-2013','11-Jan-2014'}); EONIAFRABasis = 2; % act/360 EONIAFRAPeriod = 0; % Swap data EONIASwapRates = [.0003 .001 .002 .004 .008 .012 .0155 .018 .0193 .02]'; EONIASwapMat = datemnth(Settle,12*[2:5 7 10 15 20 25 30]'); EONIASwapBasis = 5; % 30/360 ISDA EONIASwapPeriod = 1; % EURIBOR Deposit data EURIBORDepositRates = [.0022 .0021 .002 .0019]'; EURIBORDepositMat = datenum({'3-Sep-2013','20-Sep-2013','21-Oct-2013','20-Nov-2013'}); EURIBORDepositBasis = 2; % act/360 EURIBORDepositPeriod = 0; % EURIBOR Futures EURIBORFRARates = [9982 9978 9976 9975]'; EURIBORFRAStartDate = datenum({'18-Dec-2013','19-Mar-2014','18-Jun-2014','17-Sep-2014'}); EURIBORFRAEndDate = datenum({'18-Mar-2014','19-Jun-2014','18-Sep-2014','17-Dec-2014'}); EURIBORFRABasis = 2; % act/360 EURIBORFRAPeriod = 4; % EURIBOR Swap data EURIBORSwapRates = [.0026 .0044 .0062 .0082 .012 .015 .018 .02 .021 .0215]'; EURIBORSwapMat = datemnth(Settle,12*[2:5 7 10 15 20 25 30]'); EURIBORSwapBasis = 5; % 30/360 ISDA EURIBORSwapPeriod = 1;
Построение кривой EONIA. Это по существу то же самое, что и случай с одной кривой.
CurveType = 'zero'; CurveCompounding = 1; CurveBasis = 3; % act/365 nEONIADeposits = length(EONIADepositMat); nEONIAFRA = length(EONIAFRAEndDate); nEONIASwaps = length(EONIASwapMat); EONIAInstrumentTypes = [repmat({'deposit'},nEONIADeposits,1); repmat({'fra'},nEONIAFRA,1);repmat({'swap'},nEONIASwaps,1)]; EONIAPeriod = [repmat(EONIADepositPeriod,nEONIADeposits,1); repmat(EONIAFRAPeriod,nEONIAFRA,1);repmat(EONIASwapPeriod,nEONIASwaps,1)]; EONIABasis = [repmat(EONIADepositBasis,nEONIADeposits,1); repmat(EONIAFRABasis,nEONIAFRA,1);repmat(EONIASwapBasis,nEONIASwaps,1)]; EONIAInstrumentData = [[repmat(Settle,[nEONIADeposits 1]);EONIAFRAStartDate;repmat(Settle,[nEONIASwaps 1])] ... [EONIADepositMat;EONIAFRAEndDate;EONIASwapMat] ... [EONIADepositRates;EONIAFRARates;EONIASwapRates]]; EONIACurve = IRDataCurve.bootstrap(CurveType,Settle,EONIAInstrumentTypes,... EONIAInstrumentData,'Compounding',CurveCompounding,'Basis',CurveBasis,... 'InstrumentPeriod',EONIAPeriod,'InstrumentBasis',EONIABasis)
EONIACurve = Type: zero Settle: 735466 (20-Aug-2013) Compounding: 1 Basis: 3 (actual/365) InterpMethod: linear Dates: [16x1 double] Data: [16x1 double]
Прямая кривая EURIBOR строится первой с помощью подхода с одной кривой.
nEURIBORDeposits = length(EURIBORDepositMat); nEURIBORFRA = length(EURIBORFRAEndDate); nEURIBORSwaps = length(EURIBORSwapMat); EURIBORInstrumentTypes = [repmat({'deposit'},nEURIBORDeposits,1); repmat({'futures'},nEURIBORFRA,1);repmat({'swap'},nEURIBORSwaps,1)]; EURIBORPeriod = [repmat(EURIBORDepositPeriod,nEURIBORDeposits,1); repmat(EURIBORFRAPeriod,nEURIBORFRA,1);repmat(EURIBORSwapPeriod,nEURIBORSwaps,1)]; EURIBORBasis = [repmat(EURIBORDepositBasis,nEURIBORDeposits,1); repmat(EURIBORFRABasis,nEURIBORFRA,1);repmat(EURIBORSwapBasis,nEURIBORSwaps,1)]; EURIBORInstrumentData = [repmat(Settle,size(EURIBORInstrumentTypes)) ... [EURIBORDepositMat;EURIBORFRAEndDate;EURIBORSwapMat] ... [EURIBORDepositRates;EURIBORFRARates;EURIBORSwapRates]]; EURIBORCurve_Single = IRDataCurve.bootstrap(CurveType,Settle,EURIBORInstrumentTypes,... EURIBORInstrumentData,'Compounding',CurveCompounding,'Basis',CurveBasis,... 'InstrumentPeriod',EURIBORPeriod,'InstrumentBasis',EURIBORBasis)
EURIBORCurve_Single = Type: zero Settle: 735466 (20-Aug-2013) Compounding: 1 Basis: 3 (actual/365) InterpMethod: linear Dates: [18x1 double] Data: [18x1 double]
Затем создайте кривую, используя кривую EONIA в качестве кривой дисконтирования. Для этого задайте кривую EONIA как необязательный входной параметр.
EURIBORCurve = IRDataCurve.bootstrap(CurveType,Settle,EURIBORInstrumentTypes,... EURIBORInstrumentData,'DiscountCurve',EONIACurve,'Compounding',... CurveCompounding,'Basis',CurveBasis,'InstrumentPeriod',EURIBORPeriod,... 'InstrumentBasis',EURIBORBasis)
EURIBORCurve = Type: zero Settle: 735466 (20-Aug-2013) Compounding: 1 Basis: 3 (actual/365) InterpMethod: linear Dates: [18x1 double] Data: [18x1 double]
Постройте график результатов для сравнения кривых.
PlottingDates = (Settle+20:30:Settle+365*30)'; TimeToMaturity = yearfrac(Settle,PlottingDates); figure plot(TimeToMaturity, getZeroRates(EONIACurve, PlottingDates),'b') hold on plot(TimeToMaturity, getZeroRates(EURIBORCurve_Single, PlottingDates),'r') plot(TimeToMaturity, getZeroRates(EURIBORCurve, PlottingDates),'g') title('Comparison of Single Curve and Dual Curve Bootstrapping') legend({'EONIA','EURIBOR','EURIBOR w/ EONIA Discounting'},'location','southeast')
Как ожидалось, различие между двумя различными кривыми EURIBOR небольшая, но нетривиальная.
Этот пример получен из следующих статей и статей журнала:
[1] Ametrano, F, и Бьянчетти, M., Все Вы Всегда Требуемый, чтобы Знать О Нескольких Самонастройку Кривой Процентной ставки, но Боялось Спросить (2 апреля 2013), доступный в: https://papers.ssrn.com/sol3/papers.cfm? abstract_id=2219548.
[2] Bianchetti, M., Two Curves, One Price, Risk Magazine, pages 74-80, August 2010.
[3] Fujii, M, Shimada, Y, Takahashi, A., Примечание о конструкции нескольких кривых подкачки с и без обеспечения (2 января 2010), Серия рабочих документов CARF No. CARF-F-154, доступно в: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=1440633.
[4] Mercurio, Fabio, процентные ставки и кредитный кризис: новые формулы и модели рынка (5 февраля 2009 года), портфель Bloomberg Research Paper № 2010-01-FRONTIERS.
[5] Nashikkar, A., Understanding OIS Discounting, Barclays Capital Interest Rate Strategy, 24 февраля 2011 г.
bootstrap
| floatbyzero
| getZeroRates
| IRDataCurve
| swapbyzero