Main Content

YearYearInflationCap

YearYearInflationCap instrument object

Since R2023b

Description

Create and price a YearYearInflationCap instrument object for one or more Year-on-Year Inflation-Indexed Cap instruments using this workflow:

  1. Use fininstrument to create a YearYearInflationCap instrument object for one or more Year-on-Year Inflation-Indexed Cap instruments.

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

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

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

  5. Use finpricer to specify an JarrowYildirim pricing method for one or more YearYearInflationCap 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 YearYearInflationCap instrument, see Choose Instruments, Models, and Pricers.

Creation

Description

example

YYInflationCap = fininstrument(InstrumentType,Maturity=maturity_date,Notional=notional_value,Strike=strike_value) creates a YearYearInflationCap object for one or more Year-on-Year Inflation-Indexed Cap instruments by specifying InstrumentType and sets the properties for the required name-value arguments Maturity, Notional, and Strike.

example

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

Input Arguments

expand all

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

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: YYInflationCap = fininstrument("YearYearInflationCap",Maturity=datetime(2033,10,1),Notional=1000,Strike=0.05,Basis=4)

Required YearYearInflationCap 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 YearYearInflationCap Name-Value Arguments

expand all

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 pricing a YearYearInflationCap instrument using the JarrowYildirim pricer, you must specify the IssueIndex value if the first accrual starting date occurs before the Settle date of the NominalCurve 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 numeric vector.

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 scalar string or an NINST-by-1 string array.

Data Types: string

Examples

collapse all

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

Create YearYearInflationCap Instrument Object

Use fininstrument to create a YearYearInflationCap instrument object.

YYInflationCap = fininstrument("YearYearInflationCap",Maturity=datetime(2033, 10, 1),Notional=1000,Strike=0.05,Name="YYInflationCap")
YYInflationCap = 
  YearYearInflationCap with properties:

      Notional: 1000
        Strike: 0.0500
         Basis: 0
    IssueIndex: NaN
      Maturity: 01-Oct-2033
          Name: "YYInflationCap"

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 YearYearInflationCap Instrument

Use price to compute the price for the YearYearInflationCap instrument.

YYInflationCapPrice = price(JarrowYildirimPricer,YYInflationCap)
YYInflationCapPrice = 8.3100

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

Create YearYearInflationCap Instrument Object

Use fininstrument to create a YearYearInflationCap instrument object.

Maturity = datetime([2024,1,1 ; 2024,11,1 ; 2024,12,1]);
Notional = [20000 ; 30000 ; 40000];
YYInflationCap = fininstrument("YearYearInflationCap",Maturity=Maturity,Notional=Notional,Strike=0.05,IssueIndex=0.08,Name="YYInflationCap_instrument")
YYInflationCap=3×1 YearYearInflationCap array with properties:
    Notional
    Strike
    Basis
    IssueIndex
    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 YearYearInflationCap Instruments

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

[YYInflationCapPrice,outPR] = price(JarrowYildirimPricer,YYInflationCap,"all")
YYInflationCapPrice = 3×1
107 ×

    2.5136
    3.7797
    5.0335

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

More About

expand all

Algorithms

To price a year-on-year inflation-indexed cap using a JarrowYildirim and a JarrowYildirim pricing method:

K=1+κ=1+StrikeYYIICap(t,T,K,Ψ,N)=i=ι(t)MYYIICaplet(t,Ti1,Ti,K,ψi,N)YYIICaplet(t,Ti1,Ti,K,ψi,N)=NψiPn(t,Ti)[mΦ(lnmK+12v2v)KΦ(lnmK12v2v)]YYIIFloor(t,T,K,Ψ,N)=i=ι(t)MYYIIFloorlet(t,Ti1,Ti,K,ψi,N)YYIIFloorlet(t,Ti1,Ti,K,ψi,N)=NψiPn(t,Ti)[KΦ(lnmK12v2v)mΦ(lnmK+12v2v)]For tTi1<Ti,m=EnTi[I(Ti)I(Ti1)|t]=Pn(t,Ti1)Pr(t,Ti)Pn(t,Ti)Pr(t,Ti1)eC(t,Ti1,Ti)v2=V2(t,Ti1,Ti)=σn22anBn2(Ti1,Ti)[1e2an(Ti1t)]+σr22arBr2(Ti1,Ti)[1e2ar(Ti1t)]2ρn,rσnσran+arBn(Ti1,Ti)Br(Ti1,Ti)[1e(an+ar)(Ti1t)]+σI2(TiTi1)+σn2an2[TiTi1+2anean(TiTi1)12ane2an(TiTi1)32an]+σr2ar2[TiTi1+2arear(TiTi1)12are2ar(TiTi1)32ar]2ρn,rσnσranar[TiTi1Bn(Ti1,Ti)Br(Ti1,Ti)+1e(an+ar)(TiTi1)an+ar]+2ρn,IσnσIan[TiTi1Bn(Ti1,Ti)]2ρr,IσrσIar[TiTi1Br(Ti1,Ti)]C(t,Ti1,Ti)=σrBr(Ti1,Ti)×[Br(t,Ti1){ρr,IσIσrBr(t,Ti1)2+ρn,rσnan+ar[1+arBn(t,Ti1)]}ρn,rσnan+arBn(t,Ti1)]Br(Ti1,Ti)=1ear(TiTi1)arBr(t,Ti1)=1ear(Ti1t)arBn(Ti1,Ti)=1ean(TiTi1)anBn(t,Ti1)=1ean(Ti1t)anFor Tι(t)1t<Tι(t),m=EnTι(t)[I(Tι(t))I(Tι(t)1)|t]=I(t)I(Tι(t)1)EnTι(t)[I(Tι(t))I(t)|t]=I(t)I(Tι(t)1)Pr(t,Tι(t))Pn(t,Tι(t))v2=V2(t,Tι(t))=σI2(Tι(t)t)+σn2an2[Tι(t)t+2anean(Tι(t)t)12ane2an(Tι(t)t)32an]+σr2ar2[Tι(t)t+2arear(Tι(t)t)12are2ar(Tι(t)t)32ar]2ρn,rσnσranar[Tι(t)tBn(t,Tι(t))Br(t,Tι(t))+1e(an+ar)(Tι(t)t)an+ar]+2ρn,IσnσIan[Tι(t)tBn(t,Tι(t))]2ρr,IσrσIar[Tι(t)tBr(t,Tι(t))]Br(t,Tι(t))=1ear(Tι(t)t)arBn(t,Tι(t))=1ean(Tι(t)t)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.

  • T:={T1,...,TM} is the end dates for each period.

  • ψi is the year fraction between Ti-1 and Ti.

  • Ψ:={ψ1,...,ψM} is the year fractions for each period.

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

  • ι(t)=min{i:Ti>t} is the period index so that Tι(t)1t<Tι(t).

  • M is the maturity in years.

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

  • I(Tι(t)1) is the issue index at Tι(t)1.

  • 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