Main Content

ZeroCouponInflationFloor

ZeroCouponInflationFloor instrument object

Since R2023b

Description

Create and price a ZeroCouponInflationFloor instrument object for one or more Zero-Coupon Inflation Floor instruments using this workflow:

  1. Use fininstrument to create a ZeroCouponInflationFloor instrument object for one or more Zero-Coupon Inflation Floor instruments.

  2. Use finmodel to specify a JarrowYildirim model object for the ZeroCouponInflationFloor instrument object.

  3. Use ratecurve to specify a NominalCurve interest-rate model for the ZeroCouponInflationFloor instrument object.

  4. Use ratecurve to specify a RealCurve interest-rate model for the ZeroCouponInflationFloor instrument object.

  5. Use finpricer to specify a JarrowYildirim pricing method for one or more ZeroCouponInflationFloor instruments.

For more information on this workflow, see Get Started with Workflows Using Object-Based Framework for Pricing Financial Instruments.

For more information on the available models and pricing methods for a ZeroCouponInflationFloor instrument, see Choose Instruments, Models, and Pricers.

Creation

Description

ZCInflationFloor = fininstrument(InstrumentType,Maturity=maturity_date,Notional=notional_value,Strike=strike_value) creates a ZeroCouponInflationFloor object for one or more Zero-Coupon Inflation Floor instruments by specifying InstrumentType and sets the properties for the required name-value arguments Maturity, Notional, and Strike.

example

ZCInflationFloor = fininstrument(___,Name=Value) sets optional properties using name-value arguments in addition to the required arguments in the previous syntax. For example, ZCInflationFloor = fininstrument("ZeroCouponInflationFloor",Maturity=datetime(2033,10,1),Notional=1000,Strike=0.05,Basis=4) creates a ZeroCouponInflationFloor instrument with a day count basis of 4. You can specify multiple name-value arguments, in any order.

example

Input Arguments

expand all

Instrument type, specified as a string with the value of "ZeroCouponInflationFloor", a character vector with the value of 'ZeroCouponInflationFloor', an NINST-by-1 string array with values of "ZeroCouponInflationFloor", or an NINST-by-1 cell array of character vectors with values of 'ZeroCouponInflationFloor'.

Data Types: char | cell | string

Name-Value Arguments

Specify required and 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.

Example: ZCInflationFloor = fininstrument("ZeroCouponInflationFloor",Maturity=datetime(2033,10,1),Notional=1000,Strike=0.05,Basis=4)

Required ZeroCouponInflationFloor Name-Value Arguments

expand all

Contract maturity date, specified as a scalar datetime, string, or date character vector or an NINST-by-1 vector using a datetime array, string array, or date character vectors.

If you use date character vectors or strings, the format must be recognizable by datetime because the Maturity property is stored as a datetime.

Data Types: double | string | datetime

Notional amount, specified as a scalar numeric or an NINST-by-1 numeric vector.

Data Types: double

Fixed annual inflation rate strike, specified as a scalar decimal or an NINST-by-1 vector of decimals.

Data Types: double

Optional ZeroCouponInflationFloor Name-Value Arguments

expand all

Date the contract starts, specified as a scalar datetime, string, or character vector, or an NINST-by-1 vector using a datetime array, string array, or cell array of date character vectors. If you do not specify a value for StartDate, when pricing the ZeroCouponInflationCap instrument, the JarrowYildirim pricer uses the Settle date of the DiscountCurve as the date that the contract starts.

If you use date character vectors or strings, the format must be recognizable by datetime because the StartDate property is stored as a datetime.

Data Types: char | datetime | string

Day count basis, specified as a scalar integer or an NINST-by-1 vector of integers for the following:

  • 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

Inflation index at the issue date, specified as a scalar numeric or an NINST-by-1 vector of numeric values. The inflation index for IssueIndex depends on the country and can be from any of the following:

  • US — CPI (US Consumer Price Index Urban Consumers (CPI-U))

  • UK — RPI (UK Retail Price Index (RPI))

  • Canada — CPI (Canada All-Items Consumer Price Index)

  • European Union (EU) — HICP-ex Tobacco (EU Harmonized Indices of Consumer Prices (HICP) ex-Tobacco)

  • Japan — CPI (Japan Consumer Price Index)

  • China — CPI (China Consumer Price Index)

Note

When you price a ZeroCouponInflationFloor instrument using the JarrowYildirim pricer, by default, the IssueIndex value is the CurrentIndex value in the JarrowYildirim model object.

Data Types: double

User-defined name for the instrument, specified as a scalar string or character vector or an NINST-by-1 cell array of character vectors or string array.

Data Types: char | cell | string

Properties

expand all

Contract maturity date, returned as a scalar datetime or an NINST-by-1 vector of datetimes.

Data Types: datetime

Notional amount, returned as a scalar numeric or an NINST-by-1 vector of decimals.

Data Types: double

Fixed annual inflation rate strike, returned as a scalar decimal or an NINST-by-1 vector of decimals.

Data Types: double

Day count basis, returned as a scalar integer or an NINST-by-1 vector of integers.

Data Types: double

Inflation index at the issue date, returned as a scalar numeric or an NINST-by-1 vector of numeric values.

Data Types: double

User-defined name for the instrument, returned as a string or an NINST-by-1 string array.

Data Types: string

Examples

collapse all

This example shows the workflow to price a ZeroCouponInflationFloor instrument when using a JarrowYildirim model and a JarrowYildirim pricing method.

Create ZeroCouponInflationFloor Instrument Object

Use fininstrument to create a ZeroCouponInflationFloor instrument object.

ZCInflationFloor = fininstrument("ZeroCouponInflationFloor",Maturity=datetime(2033,10,1),Notional=1000,Strike=0.01,Name="ZCInflationFloor")
ZCInflationFloor = 
  ZeroCouponInflationFloor with properties:

      Notional: 1000
        Strike: 0.0100
         Basis: 0
    IssueIndex: NaN
     StartDate: NaT
      Maturity: 01-Oct-2033
          Name: "ZCInflationFloor"

Create JarrowYildirim Model Object

Use finmodel to create a JarrowYildirim model object.

JarrowYildirimModel = finmodel("JarrowYildirim", ...
        NominalVolatility=0.008,RealVolatility=0.005,IndexVolatility=0.01, ...
        NominalConstant=0.04,RealConstant=0.05, ...
        NominalRealCorrelation=0.015,RealIndexCorrelation=-0.32, ...
        NominalIndexCorrelation=0.08,CurrentIndex=101)
JarrowYildirimModel = 
  JarrowYildirim with properties:

          NominalVolatility: 0.0080
             RealVolatility: 0.0050
            IndexVolatility: 0.0100
            NominalConstant: 0.0400
               RealConstant: 0.0500
     NominalRealCorrelation: 0.0150
       RealIndexCorrelation: -0.3200
    NominalIndexCorrelation: 0.0800
               CurrentIndex: 101

Create ratecurve Object

Create a ratecurve object using ratecurve to specify the NominalCurve and RealCurve.

Settle = datetime(2023,10,1);

ZeroTimes = [calmonths(6) calyears([1 2 3 5 7 10 20 30])];
NominalRates = [4.70 4.68 4.14 3.83 3.56 3.51 3.48 3.77 3.66]'./100;
RealRates = [1.47 1.55 1.31 1.30 1.33 1.28 1.25 1.33 1.42]'./100;
ZeroDates = Settle + ZeroTimes;
NominalCurve = ratecurve("zero",Settle,ZeroDates,NominalRates);
RealCurve = ratecurve("zero",Settle,ZeroDates,RealRates);

Create JarrowYildirim Pricer Object

Use finpricer to create a JarrowYildirim object and specify the ratecurve object for the NominalCurve and RealCurve name-value arguments.

JarrowYildirimPricer = finpricer("analytic",Model=JarrowYildirimModel,NominalCurve=NominalCurve,RealCurve=RealCurve)
JarrowYildirimPricer = 
  JarrowYildirim with properties:

           Model: [1x1 finmodel.JarrowYildirim]
    NominalCurve: [1x1 ratecurve]
       RealCurve: [1x1 ratecurve]

Price YearYearInflationFloor Instrument

Use price to compute the price for the ZeroCouponInflationFloor instrument.

ZCInflationFloorPrice = price(JarrowYildirimPricer,ZCInflationFloor)
ZCInflationFloorPrice = 
15.7929

This example shows the workflow to price multiple ZeroCouponInflationCFloor instruments when using a JarrowYildirim model and a JarrowYildirim pricing method.

Create ZeroCouponInflationFloor Instrument Object

Use fininstrument to create a ZeroCouponInflationFloor instrument object.

Maturity = datetime([2024,1,1 ; 2024,11,1 ; 2024,12,1]);
Notional = [20000 ; 30000 ; 40000];
ZCInflationFloor = fininstrument("ZeroCouponInflationFloor",Maturity=Maturity,Notional=Notional,Strike=0.05,Name="ZCInflationFloor")
ZCInflationFloor=3×1 ZeroCouponInflationFloor array with properties:
    Notional
    Strike
    Basis
    IssueIndex
    StartDate
    Maturity
    Name

Create JarrowYildirim Model Object

Use finmodel to create a JarrowYildirim model object.

JarrowYildirimModel = finmodel("JarrowYildirim", ...
        NominalVolatility=0.008,RealVolatility=0.005,IndexVolatility=0.01, ...
        NominalConstant=0.04,RealConstant=0.05, ...
        NominalRealCorrelation=0.015,RealIndexCorrelation=-0.32, ...
        NominalIndexCorrelation=0.08,CurrentIndex=101)
JarrowYildirimModel = 
  JarrowYildirim with properties:

          NominalVolatility: 0.0080
             RealVolatility: 0.0050
            IndexVolatility: 0.0100
            NominalConstant: 0.0400
               RealConstant: 0.0500
     NominalRealCorrelation: 0.0150
       RealIndexCorrelation: -0.3200
    NominalIndexCorrelation: 0.0800
               CurrentIndex: 101

Create ratecurve Object

Create a ratecurve object using ratecurve to specify the NominalCurve and RealCurve.

Settle = datetime(2023,10,1);

ZeroTimes = [calmonths(6) calyears([1 2 3 5 7 10 20 30])];
NominalRates = [4.70 4.68 4.14 3.83 3.56 3.51 3.48 3.77 3.66]'./100;
RealRates = [1.47 1.55 1.31 1.30 1.33 1.28 1.25 1.33 1.42]'./100;
ZeroDates = Settle + ZeroTimes;
NominalCurve = ratecurve("zero",Settle,ZeroDates,NominalRates);
RealCurve = ratecurve("zero",Settle,ZeroDates,RealRates);

Create JarrowYildirim Pricer Object

Use finpricer to create a JarrowYildirim object and specify the ratecurve object for the NominalCurve and RealCurve name-value arguments.

JarrowYildirimPricer = finpricer("analytic",Model=JarrowYildirimModel,NominalCurve=NominalCurve,RealCurve=RealCurve)
JarrowYildirimPricer = 
  JarrowYildirim with properties:

           Model: [1x1 finmodel.JarrowYildirim]
    NominalCurve: [1x1 ratecurve]
       RealCurve: [1x1 ratecurve]

Price ZeroCouponInflationFloor Instruments

Use price to compute the prices for the three ZeroCouponInflationFloor instruments.

[ZCInflationFloorPrice,outPR] = price(JarrowYildirimPricer,ZCInflationFloor,"all")
ZCInflationFloorPrice = 3×1

   95.2934
  585.5228
  849.1411

outPR=1×3 priceresult array with properties:
    Results
    PricerData

More About

expand all

Algorithms

To price a zero coupon inflation-indexed floor using a JarrowYildirim and a JarrowYildirim pricing method:

K=(1+κ)M=(1+Strike)MZCICap(t,TM,I0,K,N)=NPn(t,TM)[mΦ(lnmK+12V2(t,TM)V(t,TM))KΦ(lnmK12V2(t,TM)V(t,TM))]ZCIFloor(t,TM,I0,K,N)=NPn(t,TM)[KΦ(lnmK12V2(t,TM)V(t,TM))mΦ(lnmK+12V2(t,TM)V(t,TM))]m=EnTM[I(TM)I0|t]=I(t)I0EnTM[I(TM)I(t)|t]=I(t)I0Pr(t,TM)Pn(t,TM)V2(t,TM)=σI2(TMt)+σn2an2[TMt+2anean(TMt)12ane2an(TMt)32an]+σr2ar2[TMt+2arear(TMt)12are2ar(TMt)32ar]2ρn,rσnσranar[TMtBn(t,TM)Br(t,TM)+1e(an+ar)(TMt)an+ar]+2ρn,IσnσIan[TMtBn(t,TM)]2ρr,IσrσIar[TMtBr(t,TM)]Br(t,TM)=1ear(TMt)arBn(t,TM)=1ean(TMt)an

where:

  • N is the notional value.

  • k is the fixed annual inflation rate cap or floor strike.

  • K = 1 + k is one plus the cap or floor strike.

  • M is the maturity in years.

  • TM is the maturity date.

  • I(t) is the inflation index at t.

  • I0 is the issue index.

  • Φ(·) is the standard normal cumulative distribution.

  • Px(t,T) is the zero coupon price (where n is nominal and r is real).

  • σn is the nominal rate volatility (positive constant).

  • σr is the real rate volatility (positive constant).

  • σI is the inflation index volatility (positive constant).

  • ρr,I is the real rate and inflation index correlation.

  • ρn,I is the nominal rate and inflation index correlation.

  • ρn,r is the nominal rate and real rate correlation.

  • an, ar are the positive constants.

References

[1] Jarrow, R. and Yildirim, Y. "Pricing Treasury Inflation Protected Securities and Related Derivatives using an HJM Model." Journal of Financial and Quantitative Analysis. Vol. 38, 2003.

[2] Kerkhof, J. "Inflation Derivatives Explained: Markets, Products, and Pricing." Fixed Income Quantitative Research, Lehman Brothers, July 2005.

[3] Mercurio, F. "Pricing Inflation-Indexed Derivatives." Quantitative Finance, Vol. 5, Issue 3, pp. 289–302, 2005.

Version History

Introduced in R2023b