Этот пример показывает, как загрузить прямую кривую с помощью различной кривой для дисконтирования.
Данные необходимы для обоих дисконтная кривая и форвард. Для этого конкретного примера это принято, что данные предусмотрены EONIA (дисконтная кривая) и EURIBOR (прямая кривая). Однако этот подход может использоваться в любом случае, где кривая, которая будет создана, отличается, чем кривая, используемая для дисконтирования потоков наличности. В то время как данные в этом примере являются hardcoded, это могло также быть импортировано в 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] Бьянчетти, M., Две Кривые, Одна Цена, Журнал Риска, страницы 74-80, август 2010.
[3] Fujii, M, Симада, Y, Takahashi, A., Примечание по Конструкции Нескольких Кривых Подкачки с и без Имущественного залога (2 января 2010), Серии № CARF-F-154 Рабочего документа CARF, доступной в: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=1440633.
[4] Меркурио, Фабио, процентные ставки и кредитный кризис: новые формулы и модели рынка (5 февраля 2009), номер научно-исследовательской работы портфеля Bloomberg 2010-01-FRONTIERS.
[5] Nashikkar, A., понимая дисконтирование OIS, стратегию процентной ставки Barclays Capital, 24 февраля 2011.
IRDataCurve
| bootstrap
| floatbyzero
| getZeroRates
| swapbyzero