В этом примере показано, как загрузить кривую процентной ставки, часто называемую кривой свопа, с помощью IRDataCurve объект. Метод статической начальной загрузки использует в качестве входных данных массив рыночных инструментов (которые могут быть депозитами, фьючерсами на процентные ставки, свопами и облигациями) и выполняет начальную загрузку кривой процентной ставки форвардной или нулевой кривой. Также можно задать несколько методов интерполяции, включая кусочно-постоянный, линейный и кусочно-кубический эрмитово-интерполяционный полином (PCHIP).
Кривая загружается из рыночных данных. В этом примере мы загрузим кривую свопа из депозитов, евродолларовых фьючерсов и свопов.
Для этого примера мы жестко закодировали входные рыночные данные, которые просто определены как 2 массива ячеек данных, один из которых указывает тип инструмента, и второй массив ячеек, содержащий Settle, Maturityи Рыночная квота для инструмента. Для депозитов и свопов котировка является ставкой, а для Евродолларовых фьючерсов котировка является ценой. Хотя облигации в этом примере не используются, облигации будут котироваться с ценой.
InstrumentTypes = {'Deposit';'Deposit';'Deposit';'Deposit';'Deposit'; ...
'Futures';'Futures'; ...
'Futures';'Futures';'Futures'; ...
'Futures';'Futures';'Futures'; ...
'Futures';'Futures';'Futures'; ...
'Futures';'Futures';'Futures'; ...
'Futures';'Futures';'Futures'; ...
'Swap';'Swap';'Swap';'Swap';'Swap';'Swap';'Swap'};
Instruments = [datenum('08/10/2007'),datenum('08/17/2007'),.0532063; ...
datenum('08/10/2007'),datenum('08/24/2007'),.0532000; ...
datenum('08/10/2007'),datenum('09/17/2007'),.0532000; ...
datenum('08/10/2007'),datenum('10/17/2007'),.0534000; ...
datenum('08/10/2007'),datenum('11/17/2007'),.0535866; ...
datenum('08/08/2007'),datenum('19-Dec-2007'),9485; ...
datenum('08/08/2007'),datenum('19-Mar-2008'),9502; ...
datenum('08/08/2007'),datenum('18-Jun-2008'),9509.5; ...
datenum('08/08/2007'),datenum('17-Sep-2008'),9509; ...
datenum('08/08/2007'),datenum('17-Dec-2008'),9505.5; ...
datenum('08/08/2007'),datenum('18-Mar-2009'),9501; ...
datenum('08/08/2007'),datenum('17-Jun-2009'),9494.5; ...
datenum('08/08/2007'),datenum('16-Sep-2009'),9489; ...
datenum('08/08/2007'),datenum('16-Dec-2009'),9481.5; ...
datenum('08/08/2007'),datenum('17-Mar-2010'),9478; ...
datenum('08/08/2007'),datenum('16-Jun-2010'),9474; ...
datenum('08/08/2007'),datenum('15-Sep-2010'),9469.5; ...
datenum('08/08/2007'),datenum('15-Dec-2010'),9464.5; ...
datenum('08/08/2007'),datenum('16-Mar-2011'),9462.5; ...
datenum('08/08/2007'),datenum('15-Jun-2011'),9456.5; ...
datenum('08/08/2007'),datenum('21-Sep-2011'),9454; ...
datenum('08/08/2007'),datenum('21-Dec-2011'),9449.5; ...
datenum('08/08/2007'),datenum('08/08/2014'),.0530; ...
datenum('08/08/2007'),datenum('08/08/2017'),.0545; ...
datenum('08/08/2007'),datenum('08/08/2019'),.0551; ...
datenum('08/08/2007'),datenum('08/08/2022'),.0559; ...
datenum('08/08/2007'),datenum('08/08/2027'),.0565; ...
datenum('08/08/2007'),datenum('08/08/2032'),.0566; ...
datenum('08/08/2007'),datenum('08/08/2037'),.0566]; bootstrap вызывается как статический метод IRDataCurve класс. Входные данные этого метода включают тип кривой (нулевая или прямая), дату расчета, типы приборов, данные приборов и необязательные аргументы, включая метод интерполяции, объединение и структуру опций для начальной загрузки. Обратите внимание, что в этом примере мы проходим в IRBootstrapOptions объект, который включает в себя информацию для корректировки выпуклости на форвардные скорости.
IRsigma = .01; CurveSettle = datenum('08/10/2007'); bootModel = IRDataCurve.bootstrap('Forward', CurveSettle, ... InstrumentTypes, Instruments,'InterpMethod','pchip',... 'Compounding',-1,'IRBootstrapOptions',... IRBootstrapOptions('ConvexityAdjustment',@(t) .5*IRsigma^2.*t.^2));
Теперь мы можем построить график как прямой, так и нулевой кривых.
PlottingDates = (CurveSettle+20:30:CurveSettle+365*25)'; TimeToMaturity = yearfrac(CurveSettle,PlottingDates); BootstrappedForwardRates = bootModel.getForwardRates(PlottingDates); BootstrappedZeroRates = bootModel.getZeroRates(PlottingDates); figure hold on plot(TimeToMaturity,BootstrappedForwardRates,'r') plot(TimeToMaturity,BootstrappedZeroRates,'g') title('Bootstrapped Curve') xlabel('Time') legend({'Forward','Zero'})

Этот пример основан на следующих статьях и статьях журнала:
[1] Хаган, П., Уэст, Г. (2006), «Методы интерполяции для построения кривых», Прикладное математическое финансирование, том 13, № 2
[2] Рон, Uri (2000), «Практическое руководство по построению обменных кривых», Рабочие документы 00-17, Банк Канады.