www.gusucode.com > fininst 案例源码程序 matlab代码 > fininst/irbootstrapdemo.m

    %% Bootstrapping a Swap Curve
% This example shows how to bootstrap an interest-rate curve, often referred
% to as a swap curve, using the IRDataCurve object.  The static
% bootstrap method takes as inputs a cell array of market instruments
% (which can be deposits, interest rate futures, swaps, and bonds) and
% bootstraps an interest rate curve of either the forward or the zero curve.
% It is also possible to specify multiple interpolation methods, including
% piecewise constant, linear, and Piecewise Cubic Hermite Interpolating
% Polynomial (PCHIP)

%   Copyright 2008 The MathWorks, Inc.

%% Obtain Data
% A curve is bootstrapped from market data.  In this example, we will
% bootstrap a swap curve from deposits, Eurodollar Futures and swaps.
%
% For this example, we have hard-coded the input market data, which is simply
% specified as 2 cell arrays of data, one which indicates the type of
% instrument and a second cell array containing the Settle, Maturity, and
% Market Quote for the instrument.  For deposits and swaps, the quote is a
% rate and for the EuroDollar Futures, the quote is a price.  Although
% bonds are not used in this example, a bond would be quoted with a price.
%

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];

%% Construct the Curve via Bootstrapping
% The bootstrap method is called as a static method of the IRDataCurve
% class.  Inputs to this method include the curve type (Zero or Forward),
% settle date, instrument types, instrument data and optional arguments
% including an interpolation method, compounding and an options structure
% for bootstrapping.  Note that in this example, we are passing in an
% IRBootstrapOptions object which includes information for the convexity
% adjustment to forward rates.
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));

%% Plot
% We can now plot both the forward and zero curves
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'})
%% Bibliography
% This example draws from the following papers and journal articles:
%
% [1] Hagan, P., West, G. (2006), "Interpolation Methods for Curve
%     Construction", Applied Mathematical Finance, Vol 13, No. 2
%
% [2] Ron, Uri(2000), "A Practical Guide to Swap Curve Construction", 
%     Working Papers 00-17, Bank of Canada.
%