Main Content

YearYearInflationFloor

YearYearInflationFloor instrument object

Since R2023b

Description

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

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

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

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

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

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

Creation

Description

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

example

YYInflationSwap = fininstrument(___,Name=Value) sets optional properties using name-value arguments in addition to the required arguments in the previous syntax. For example, YYInflationFloor = fininstrument("YearYearInflationFloor",Maturity=datetime(2033,10,1),Notional=1000,Strike=0.05,Basis=4) creates a YearYearInflationFloor 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 "YearYearInflationFloor", a character vector with the value of 'YearYearInflationFloor', an NINST-by-1 string array with values of "YearYearInflationFloor", or an NINST-by-1 cell array of character vectors with values of 'YearYearInflationFloor'.

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

Required YearYearInflationFloor 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 YearYearInflationFloor 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 YearYearInflationFloor 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 YearYearInflationFloor instrument when using a JarrowYildirim model and a JarrowYildirim pricing method.

Create YearYearInflationFloor Instrument Object

Use fininstrument to create a YearYearInflationFloor instrument object.

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

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

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 YearYearInflationFloor instrument.

YYInflationFloorPrice = price(JarrowYildirimPricer,YYInflationFloor)
YYInflationFloorPrice = 
31.3520

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

Create YearYearInflationFloor Instrument Object

Use fininstrument to create a YearYearInflationFloor instrument object.

Maturity = datetime([2024,10,1 ; 2024,11,1 ; 2025,12,1]);
Notional = [10000 ; 30000 ; 40000];
YYInflationFloor = fininstrument("YearYearInflationFloor",Maturity=Maturity,Notional=Notional,Strike=0.04,IssueIndex=0.08,Name="YYInflationFloor_instrument")
YYInflationFloor=3×1 YearYearInflationFloor 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 YearYearInflationFloor Instruments

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

[YYInflationFloorPrice,outPR] = price(JarrowYildirimPricer,YYInflationFloor,"all")
YYInflationFloorPrice = 3×1
103 ×

    0.0973
    0.3014
    1.0362

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