bootstrap
Bootstrap interest-rate curve from market data
Syntax
Description
DCurve = IRDataCurve.bootstrap(Type,Settle,InstrumentTypes,Instruments)
Note
The ratecurve object and associated
            methods were introduced in R2020a as part of a new object-based framework in the
              Financial Instruments Toolbox™ which supports end-to-end workflows in instrument modeling and analysis.
            For more information, see irbootstrap and Get Started with Workflows Using Object-Based Framework for Pricing Financial Instruments. 
DCurve = IRDataCurve.bootstrap(___,Name,Value)
Examples
In this bootstrapping example, InstrumentTypes, Instruments, and a Settle date are defined: 
InstrumentTypes = {'Deposit';'Deposit';...
'Futures';'Futures';'Futures';'Futures';'Futures';'Futures';...
'Swap';'Swap';'Swap';'Swap';};
Instruments = [datenum('08/10/2007'),datenum('09/17/2007'),.0532000; ...
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('08/08/2014'),.0530; ...
datenum('08/08/2007'),datenum('08/08/2019'),.0551; ...
datenum('08/08/2007'),datenum('08/08/2027'),.0565; ...
datenum('08/08/2007'),datenum('08/08/2037'),.0566];
CurveSettle = datenum('08/10/2007');Use the bootstrap method to create an IRDataCurve object. 
bootModel = IRDataCurve.bootstrap('Forward', CurveSettle, ... InstrumentTypes, Instruments,'InterpMethod','pchip');
To create the plot for the bootstrapped market data:
PlottingDates = (datenum('08/11/2007'):30:CurveSettle+365*25)'; plot(PlottingDates, getParYields(bootModel, PlottingDates),'r') ylim([0 .06]) datetick

In this bootstrapping example, InstrumentTypes, Instruments, and a Settle date are defined: 
CurveSettle = datenum('8-Mar-2010'); InstrumentTypes = {'Deposit';'Deposit';'Deposit';'Deposit';... 'Futures';'Futures';'Futures';'Futures';'Swap';'Swap';'Bond';'Bond'}; Instruments = [datenum('8-Mar-2010'),datenum('8-Apr-2010'),.003; ... datenum('8-Mar-2010'),datenum('8-Jun-2010'),.005; ... datenum('8-Mar-2010'),datenum('8-Sep-2010'),.007; ... datenum('8-Mar-2010'),datenum('8-Mar-2011'),.009; ... datenum('8-Mar-2010'),datenum('18-Jun-2011'),9840; ... datenum('8-Mar-2010'),datenum('17-Sep-2011'),9820; ... datenum('8-Mar-2010'),datenum('17-Dec-2011'),9810; ... datenum('8-Mar-2010'),datenum('18-Mar-2012'),9800; ... datenum('8-Mar-2010'),datenum('8-Mar-2015'),.025; ... datenum('8-Mar-2010'),datenum('8-Mar-2020'),.035; ... datenum('8-Mar-2010'),datenum('8-Mar-2030'),99; ... datenum('8-Mar-2010'),datenum('8-Mar-2040'),101];
When bonds are used, InstrumentCouponRate must be specified: 
InstrumentCouponRate = [zeros(10,1);.045;.05];
Note, for parameters that are only applicable to bonds (InstrumentFirstCouponDate, InstrumentLastCouponDate, InstrumentIssueDate, InstrumentFace) the entries for non-bond instruments (deposits and futures) are ignored. 
Use the bootstrap method to create an IRDataCurve object. 
bootModel = IRDataCurve.bootstrap('Forward', CurveSettle, ... InstrumentTypes, Instruments,'InterpMethod','pchip',... 'InstrumentCouponRate',InstrumentCouponRate);
Create the plot for the bootstrapped market data.
PlottingDates = datemnth(CurveSettle,1:30*12);
plot(PlottingDates, getParYields(bootModel, PlottingDates),'r')
ylim([0 .06])
datetick
Use the IRBootstrapOptionsObj optional argument with the bootstrap method to allow for negative zero rates when solving for the swap zero points. 
Settle = datenum('15-Mar-2015'); InstrumentTypes = {'Deposit';'Deposit';'Swap';'Swap';'Swap';'Swap';}; Instruments = [Settle,datenum('15-Jun-2015'),.001; ... Settle,datenum('15-Dec-2015'),.0005; ... Settle,datenum('15-Mar-2016'),-.001; ... Settle,datenum('15-Mar-2017'),-0.0005; ... Settle,datenum('15-Mar-2018'),.0017; ... Settle,datenum('15-Mar-2020'),.0019]; irbo = IRBootstrapOptions('LowerBound',-1); bootModel = IRDataCurve.bootstrap('zero', Settle, InstrumentTypes,... Instruments,'IRBootstrapOptions',irbo); bootModel.getZeroRates(datemnth(Settle,1:60))
ans = 60×1
    0.0012
    0.0011
    0.0010
    0.0009
    0.0008
    0.0008
    0.0007
    0.0006
    0.0005
   -0.0000
   -0.0005
   -0.0010
   -0.0010
   -0.0009
   -0.0009
      ⋮
Note that optional argument for LowerBound is set to -1 for negative zero rates when solving the swap zero points. 
Input Arguments
Type of interest-rate curve bootstrapped from market instruments, specified by using a scalar character vector.
When using the bootstrap, the choice of the
              Type parameter can impact the curve construction because it will
            affect the type of data that will be interpolated on (that is, forward rates, zero
            rates, or discount factors) during the bootstrapping process. So curves that are
            bootstrapped using different Type parameters undergo different
            bootstrapping algorithms with different interpolation methods, and they can sometimes
            produce different results when using the “get” functions (for example,
              getForwardRates). 
Data Types: char
Settle date of interest-rate curve, specified using a serial date number or date character vector.
Data Types: double | char
Instrument types, specified using an N-by-1
            cell array (where N is the number of instruments) indicating what
            kind of instrument is in the Instruments matrix. Acceptable values
            are 'deposit', 'futures',
              'swap', 'bond', and
            'fra'.
Data Types: char | cell
Instruments, specified as an N-by-3 data
            matrix for Instruments where the first column is
              Settle date using a serial date number, the second column is
              Maturity using a serial date number, and the third column is the
            market quote. The market quote represents the following for each instrument:
- deposit: rate
- futures: price (for example, 9628.54)
- swap: rate
- bond: clean price
- fra: forward rate- Note - Instrumentsinput for- fraand for- futuresare different. Specifically, the forward rate underlying a- frastarts on the start date (column 1 of- Instruments) and ends on the end date (column 2 of- Instruments). While the forward rate underlying a- futurescontract starts on the maturity date of the- futurescontract and ends on a date n months after the- futuresmaturity, where n is the periodicity of the- futurescontract.
Data Types: double
Name-Value Arguments
Specify optional pairs of arguments as
      Name1=Value1,...,NameN=ValueN, where Name is
      the argument name and Value is the corresponding value.
      Name-value arguments must appear after other arguments, but the order of the
      pairs does not matter.
    
      Before R2021a, use commas to separate each name and value, and enclose 
      Name in quotes.
    
Example: DCurve =
          IRDataCurve.bootstrap('Forward',CurveSettle,InstrumentTypes,Instruments,'InterpMethod','pchip')
Name-Value Pair Arguments for All Bond Instruments
Compounding frequency per-year for the IRDataCurve object, specified as the
              comma-separated pair consisting of 'Compounding' and a scalar
              numeric using one of the supported values: 
- −1= Continuous compounding
- 0= Simple interest (no compounding)
- 1= Annual compounding
- 2= Semiannual compounding
- 3= Compounding three times per year
- 4= Quarterly compounding
- 6= Bimonthly compounding
- 12= Monthly compounding
Data Types: double
Day count basis of the interest-rate curve, specified as the comma-separated pair
              consisting of 'Basis' and a scalar integer. 
- 0 — actual/actual 
- 1 — 30/360 (SIA) 
- 2 — actual/360 
- 3 — actual/365 
- 4 — 30/360 (PSA) 
- 5 — 30/360 (ISDA) 
- 6 — 30/360 (European) 
- 7 — actual/365 (Japanese) 
- 8 — actual/actual (ICMA) 
- 9 — actual/360 (ICMA) 
- 10 — actual/365 (ICMA) 
- 11 — 30/360E (ICMA) 
- 12 — actual/365 (ISDA) 
- 13 — BUS/252 
For more information, see Basis.
Data Types: double
Interpolation method, specified as the comma-separated pair consisting of
                'InterpMethod' and a scalar character vector. For more
              information on interpolation methods, see interp1.
Data Types: char
IRBootstrapOptions object, specified as the comma-separated pair consisting of
                'IRBootstrapOptionsObj' and an
                IRBootstrapOptions object previously created using IRBootstrapOptions.
Data Types: object
RateSpec for curve used to discount cash flows, specified as
              the comma-separated pair consisting of 'DiscountCurve' and a
                RateSpec object previously created using intenvset or toRateSpec.
Data Types: object
Name-Value Pair Arguments for Each Bond Instrument
Annual percentage rate to determine the coupons payable on an instrument,
              specified as the comma-separated pair consisting of
                'InstrumentCouponRate' and a scalar decimal value. 
Data Types: double
Coupons per year for the instrument, specified as the comma-separated pair
              consisting of 'InstrumentPeriod' and a scalar numeric value.
            
Data Types: double
Day count basis of the instrument, specified as the comma-separated pair
              consisting of 'InstrumentBasis' and a scalar integer. 
- 0 — actual/actual 
- 1 — 30/360 (SIA) 
- 2 — actual/360 
- 3 — actual/365 
- 4 — 30/360 (PSA) 
- 5 — 30/360 (ISDA) 
- 6 — 30/360 (European) 
- 7 — actual/365 (Japanese) 
- 8 — actual/actual (ICMA) 
- 9 — actual/360 (ICMA) 
- 10 — actual/365 (ICMA) 
- 11 — 30/360E (ICMA) 
- 12 — actual/365 (ISDA) 
- 13 — BUS/252 
Note
InstrumentBasis distinguishes a bond instrument's
                    Basis value from the interest-rate curve's
                    Basis value.
For more information, see Basis.
Data Types: double
End-of-month rule, specified as the comma-separated pair consisting of
                'InstrumentEndMonthRule' and a logical value. This rule applies
              only when Maturity is an end-of-month date for a month having 30 or
              fewer days.
- 0= ignore rule, meaning that a bond's coupon payment date is always the same numerical day of the month.
- 1=- setrule on (default), meaning that a bond's coupon payment date is always the last actual day of the month.
Data Types: logical
Instrument issue date, specified as the comma-separated pair consisting of
                'InstrumentIssueDate' and a scalar string, data character vector,
              or serial date number.
Data Types: char | double | string
Date when a bond makes its first coupon payment (used when bond has an irregular
              first coupon period), specified as the comma-separated pair consisting of
                'InstrumentFirstCouponDate' and a scalar string, date character
              vector, or serial date number. When InstrumentFirstCouponDate and
                InstrumentLastCouponDate are both specified,
                InstrumentFirstCouponDate takes precedence in determining the
              coupon payment structure. If you do not specify a
                InstrumentFirstCouponDate, the cash flow payment dates are
              determined from other inputs.
Data Types: char | double | string
Last coupon date of a bond before the maturity date (used when bond has an
              irregular last coupon period), specified as the comma-separated pair consisting of
                'InstrumentLastCouponDate' and a scalar string, date character
              vector, or serial date number. In the absence of a specified
                InstrumentFirstCouponDate, a specified
                InstrumentLastCouponDate determines the coupon structure of the
              bond. The coupon structure of a bond is truncated at the
                InstrumentLastCouponDate, regardless of where it falls, and is
              followed only by the bond's maturity cash flow date. If you do not specify a
                InstrumentLastCouponDate, the cash flow payment dates are
              determined from other inputs. 
Data Types: char | double | string | datetime
Face or par value, specified as the comma-separated pair consisting of
                'InstrumentFace' and a scalar numeric.
Data Types: double
Note
When using Instrument name-value pairs, you can specify simple
          interest for an Instrument by specifying the
            InstrumentPeriod value as 0. If
            InstrumentBasis and InstrumentPeriod are not
          specified for an Instrument, the following default values are used:
- depositinstrument uses- InstrumentBasisas- 2(act/360) and- InstrumentPeriodis- 0(simple interest).
- futuresinstrument uses- InstrumentBasisas- 2(act/360) and- InstrumentPeriodis- 4(quarterly).
- swapinstrument uses- InstrumentBasisas- 2(act/360) and- InstrumentPeriodis- 2.
- bondinstrument uses- InstrumentBasisas- 0(act/act) and- InstrumentPeriodis- 2.
- FRAinstrument uses- InstrumentBasisas- 2(act/360) and- InstrumentPeriodis- 4(quarterly).
Output Arguments
Interest-rate curve from market data, returned as a structure.
Version History
Introduced in R2008b
See Also
IRDataCurve | IRBootstrapOptions | toRateSpec | getForwardRates | getZeroRates | getDiscountFactors | getParYields | irbootstrap
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)