Main Content

SABRBraceGatarekMusiela

Create SABRBraceGatarekMusiela model object for Cap, Floor, FixedBond, FloatBond, FloatBondOption, FixedBondOption, OptionEmbeddedFixedBond, or OptionEmbeddedFloatBond instrument

Since R2021b

Description

Create and price a Cap, Floor, FloatBond, FloatBondOption, FixedBond, FixedBondOption, OptionEmbeddedFixedBond, or OptionEmbeddedFloatBond instrument object with a SABRBraceGatarekMusiela model using this workflow:

  1. Use fininstrument to create a Cap, Floor, FixedBond, FloatBond, FloatBondOption FixedBondOption, OptionEmbeddedFixedBond, or OptionEmbeddedFloatBond instrument object.

  2. Use finmodel to specify a SABRBraceGatarekMusiela model object for the Cap, Floor, FixedBond, FloatBond, FloatBondOption, FixedBondOption, OptionEmbeddedFixedBond, or OptionEmbeddedFloatBond instrument object.

  3. Use finpricer to specify an IRMonteCarlo pricing method for a Cap, Floor, FixedBond, FloatBond, FloatBondOption, FixedBondOption, OptionEmbeddedFixedBond, or OptionEmbeddedFloatBond instrument object.

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 pricing methods for a Cap, Floor, FixedBond, FloatBond, FloatBondOption, FixedBondOption, OptionEmbeddedFixedBond, or OptionEmbeddedFloatBond instrument, see Choose Instruments, Models, and Pricers.

Creation

Description

example

SABRBraceGatarekMusielaModelObj = finmodel(ModelType,Alpha=alpha_value,Beta=beta_value,VolatilityofVolatility=volatilityofvolatility_value,FwdFwdCorrelation=fwdfwdcorrelation_value,VolVolCorrelation=volvolcorrelation_value) creates a classic SABRBraceGatarekMusiela model object with null forward to volatility correlation by specifying ModelType and the required name-value arguments Alpha, Beta, VolatilityofVolatility, FwdFwdCorrelation, and VolVolCorrelation to set properties using name-value arguments. For example, SABRBraceGatarekMusielaModelObj = finmodel("SABRBraceGatarekMusiela",Alpha=Alpha,Beta=Beta,VolatilityofVolatility=VolVolFunc,FwdFwdCorrelation=FwdFwdCorrelation, VolVolCorrelation=VolVolCorrelation) creates a classic SABRBraceGatarekMusiela model object with null forward to volatility correlation.

example

SABRBraceGatarekMusielaModelObj = finmodel(___,Name=Value) sets optional properties using additional name-value arguments in addition to the required arguments in the previous syntax. You can specify multiple name-value arguments. For example, you can use name-value arguments to create the following variations of the SABRBraceGatarekMusiela model:

  • To create a classic SABRBraceGatarekMusiela model object, use the FwdVolCorrelation name-value pair argument: SABRBraceGatarekMusielaModelObj = finmodel("SABRBraceGatarekMusiela",Alpha=Alpha,Beta=Beta,VolatilityofVolatility=VolVolFunc,FwdFwdCorrelation=FwdFwdCorrelation,VolVolCorrelation=VolVolCorrelation,FwdVolCorrelation=FwdVolCorrelation)

  • To create a classic SABRBraceGatarekMusiela model object in Rebonato parametric form with null forward-to-volatility correlation, use the Volatility name-value pair argument: SABRBraceGatarekMusielaModelObj = finmodel("SABRBraceGatarekMusiela",Alpha=Alpha,Beta=Beta,VolatilityofVolatility=VolVolFunc,Volatility=VolFunc,FwdFwdCorrelation=FwdFwdCorrelation,VolVolCorrelation=VolVolCorrelation)

  • To create a classic SABRBraceGatarekMusiela model object in Rebonato parametric form with FwdVolCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.02), use the Volatility and FwdVolCorrelation name-value arguments: SABRBraceGatarekMusielaModelObj = finmodel("SABRBraceGatarekMusiela",Alpha=Alpha,Beta=Beta,VolatilityofVolatility=VolVolFunc,Volatility=VolFunc,FwdFwdCorrelation=FwdFwdCorrelation,VolVolCorrelation=VolVolCorrelation)

Input Arguments

expand all

Model type, specified as a string with the value of "SABRBraceGatarekMusiela" or a character vector with the value of 'SABRBraceGatarekMusiela'.

Data Types: char | 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: SABRBraceGatarekMusielaModelObj = finmodel("SABRBraceGatarekMusiela",Alpha=Alpha,Beta=Beta,VolatilityofVolatility=VolVolFunc,FwdFwdCorrelation=FwdFwdCorrelation, VolVolCorrelation=VolVolCorrelation)

Initial SABR volatilities for each forward rate maturity, specified as Alpha and an (NumRates-1)-by-1 vector of positive numeric values.

Data Types: double

SABR exponent parameters for each forward rate maturity, specified as Beta and an (NumRates-1)-by-1 vector of numeric values between 0 and 1.

Data Types: double

Variation in volatility, specified as VolatilityofVolatility and an (NumRates-1)-by-1 cell array of function handles. Each function handle must take time as an input and return a scalar volatility of volatility that must be positive numeric.

Data Types: double | cell

Correlation matrix for forward rates, specified as FwdFwdCorrelation and a (NumRates-1)-by-(NumRates-1) correlation matrix.

Data Types: double

Correlation matrix for volatilities, specified as VolVolFwdCorrelation and an (NumRates-1)-by-(NumRates-1) correlation matrix.

Data Types: double

Optional SABRBraceGatarekMusiela Name-Value Arguments

expand all

Volatility, specified as Volatility and an (NumRates-1)-by-1 cell array of function handles. Specify these optional volatility function handles to use the Rebonato (2009) parametric form, which simulates stochastic volatilities with deterministic volatility functions and stochastic correction terms. Each function handle must take time as an input and return a scalar volatility that must be positive numeric.

Data Types: double

Correlation matrix between forward rates and volatilities, specified as FwdVolCorrelation and an (NumRates-1)-by-(NumRates-1) correlation matrix. The diagonal elements of the matrix are the SABR Rho parameters.

Data Types: double

Period of forward rates, specified as Period and a scalar numeric. The default is 2, meaning forward rates are spaced at 0, .5, 1, 1.5, and so on.

Data Types: double

Properties

expand all

Initial SABR volatilities for each forward rate maturity, returned as an NumRates-1-by-1 vector of positive numeric values.

Data Types: double

SABR exponent parameters for each forward rate maturity, returned as an NumRates-1-by-1 vector of numeric values between 0 and 1.

Data Types: double

Variation in volatility, returned as an NumRates-1-by-1 cell array of function handles.

Data Types: double | cell

Correlation matrix for forward rates, returned as an (NumRates-1)-by-(NumRates-1) correlation matrix.

Data Types: double

Correlation matrix for volatilities, returned as an (NumRates-1)-by-(NumRates-1) correlation matrix.

Data Types: double

Volatility, returned as an NumRates-1-by-1 cell array of function handles.

Data Types: double

Correlation matrix between forward rates and volatilities, returned as an (NumRates-1)-by-(NumRates-1) correlation matrix.

Data Types: double

Period of forward rates, returned as a scalar numeric.

Data Types: double

Examples

collapse all

This example shows the workflow to price a Cap instrument when you use a SABRBraceGatarekMusiela model with null Forward-Volatility correlation and an IRMonteCarlo pricing method.

Create Cap Instrument Object

Use fininstrument to create a Cap instrument object.

CapOpt = fininstrument("Cap",Maturity=datetime(2021,7,1),Strike=0.035,Name="cap_option")
CapOpt = 
  Cap with properties:

                      Strike: 0.0350
                    Maturity: 01-Jul-2021
                 ResetOffset: 0
                       Reset: 1
                       Basis: 0
                   Principal: 100
             ProjectionCurve: [0x0 ratecurve]
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                        Name: "cap_option"

Create Classic SABRBraceGatarekMusiela Model Object with Null Forward-Volatility Correlation

Use finmodel to create a SABRBraceGatarekMusiela model object that is a classic SABR-BGM model with null Forward-Volatility correlation.

Alpha = [0.4;0.34;0.31;0.28];
Beta = [0.5;0.5;0.5;0.5];

SABRBGMVolVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolVolParams = [.3 -.02 .7 .14];

numRates = 5;
VolVolFunc(1:numRates-1,1) = {@(t) SABRBGMVolVolFunc(SABRBGMVolVolParams,t)};

CorrFunc = @(i,j,B) exp(-B*abs(i-j));
FwdFwdCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.08);
VolVolCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.04);

SABRBGM_NF = finmodel("SABRBraceGatarekMusiela",Alpha=Alpha,Beta=Beta,VolatilityofVolatility=VolVolFunc,FwdFwdCorrelation=FwdFwdCorrelation,VolVolCorrelation=VolVolCorrelation)
SABRBGM_NF = 
  SABRBraceGatarekMusiela with properties:

                    Period: 2
                     Alpha: [4x1 double]
                      Beta: [4x1 double]
                Volatility: {4x1 cell}
    VolatilityofVolatility: {4x1 cell}
         FwdFwdCorrelation: [4x4 double]
         VolVolCorrelation: [4x4 double]
         FwdVolCorrelation: [4x4 double]

Create ratecurve Object

Create a ratecurve object using ratecurve.

Settle = datetime(2019,1,1);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 01-Jan-2019
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Create IRMonteCarlo Pricer Object

Use finpricer to create an IRMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.

simDates = datetime(2019,7,1)+calmonths(0:6:24);
outPricer = finpricer("IRMonteCarlo",Model=SABRBGM_NF,DiscountCurve=myRC,SimulationDates=simDates)
outPricer = 
  SABRBGMMonteCarlo with properties:

          NumTrials: 1000
      RandomNumbers: []
      DiscountCurve: [1x1 ratecurve]
    SimulationDates: [01-Jul-2019    01-Jan-2020    01-Jul-2020    01-Jan-2021    01-Jul-2021]
              Model: [1x1 finmodel.SABRBraceGatarekMusiela]

Price Cap Instrument

Use price to compute the price and sensitivities for the Cap instrument.

[Price,outPR] = price(outPricer,CapOpt,["all"])
Price = 0.8867
outPR = 
  priceresult with properties:

       Results: [1x3 table]
    PricerData: [1x1 struct]

outPR.Results
ans=1×3 table
    Price     Delta      Gamma 
    ______    ______    _______

    0.8867    118.82    -9486.5

You can access the simulated interest-rate Paths in the PricerData output.

outPR.PricerData
ans = struct with fields:
    SimulationTimes: [6x1 timetable]
              Paths: [6x8x1000 double]
      RandomNumbers: [1x1 struct]

This example shows the workflow to price a Floor instrument when you use a classic SABRBraceGatarekMusiela model and an IRMonteCarlo pricing method.

Create Floor Instrument Object

Use fininstrument to create a Floor instrument object.

FloorOpt = fininstrument("Floor",Maturity=datetime(2021,7,1),Strike=0.05,Reset=1,Name="floor_option")
FloorOpt = 
  Floor with properties:

                      Strike: 0.0500
                    Maturity: 01-Jul-2021
                 ResetOffset: 0
                       Reset: 1
                       Basis: 0
                   Principal: 100
             ProjectionCurve: [0x0 ratecurve]
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                        Name: "floor_option"

Create Classic SABRBraceGatarekMusiela Model Object

Use finmodel to create a classic SABRBraceGatarekMusiela model object.

Alpha = [0.4;0.34;0.31;0.28];
Beta = [0.5;0.5;0.5;0.5];

SABRBGMVolVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolVolParams = [.3 -.02 .7 .14];

numRates = 5;
VolVolFunc(1:numRates-1,1) = {@(t) SABRBGMVolVolFunc(SABRBGMVolVolParams,t)};

CorrFunc = @(i,j,B) exp(-B*abs(i-j));
FwdFwdCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.08);
VolVolCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.04);
SABRRho = [0.0005;0.0006;0.0060;0.0055];
FwdVolCorrelation = diag(SABRRho);

SABRBGM_Classic = finmodel("SABRBraceGatarekMusiela",Alpha=Alpha,Beta=Beta,VolatilityofVolatility=VolVolFunc,FwdFwdCorrelation=FwdFwdCorrelation,VolVolCorrelation=VolVolCorrelation,FwdVolCorrelation=FwdVolCorrelation)
SABRBGM_Classic = 
  SABRBraceGatarekMusiela with properties:

                    Period: 2
                     Alpha: [4x1 double]
                      Beta: [4x1 double]
                Volatility: {4x1 cell}
    VolatilityofVolatility: {4x1 cell}
         FwdFwdCorrelation: [4x4 double]
         VolVolCorrelation: [4x4 double]
         FwdVolCorrelation: [4x4 double]

Create ratecurve Object

Create a ratecurve object using ratecurve.

Settle = datetime(2019,1,1);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 01-Jan-2019
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Create IRMonteCarlo Pricer Object

Use finpricer to create an IRMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.

simDates = datetime(2019,7,1)+calmonths(0:6:24);
outPricer = finpricer("IRMonteCarlo",Model=SABRBGM_Classic,DiscountCurve=myRC,SimulationDates=simDates)
outPricer = 
  SABRBGMMonteCarlo with properties:

          NumTrials: 1000
      RandomNumbers: []
      DiscountCurve: [1x1 ratecurve]
    SimulationDates: [01-Jul-2019    01-Jan-2020    01-Jul-2020    01-Jan-2021    01-Jul-2021]
              Model: [1x1 finmodel.SABRBraceGatarekMusiela]

Price Floor Instrument

Use price to compute the price and sensitivities for the Floor instrument.

[Price,outPR] = price(outPricer,FloorOpt,["all"])
Price = 11.6086
outPR = 
  priceresult with properties:

       Results: [1x3 table]
    PricerData: [1x1 struct]

outPR.Results
ans=1×3 table
    Price      Delta     Gamma
    ______    _______    _____

    11.609    -171.15    13201

You can access the simulated interest-rate Paths in the PricerData output.

outPR.PricerData
ans = struct with fields:
    SimulationTimes: [6x1 timetable]
              Paths: [6x8x1000 double]
      RandomNumbers: [1x1 struct]

This example shows the workflow to price a FixedBond instrument when you use a SABRBraceGatarekMusiela model in Rebonato parametric form with null Forward-Volatility correlation and an IRMonteCarlo pricing method.

Create FixedBond Instrument Object

Use fininstrument to create a FixedBond instrument object.

FixB = fininstrument("FixedBond",Maturity=datetime(2021,7,1),CouponRate=0.021,Period=2,Basis=1,Principal=100,Name="fixed_bond_instrument")
FixB = 
  FixedBond with properties:

                  CouponRate: 0.0210
                      Period: 2
                       Basis: 1
                EndMonthRule: 1
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jul-2021
                        Name: "fixed_bond_instrument"

Create Rebonato Form with Null Forward-Volatility Correlation SABRBraceGatarekMusiela Model Object

Use finmodel to create a SABRBraceGatarekMusiela model object that is a SABR-BGM model in Rebonato parametric form with null Forward-Volatility correlation.

Alpha = [0.4;0.34;0.31;0.28];
Beta = [0.5;0.5;0.5;0.5];
numRates = 5;

SABRBGMVolVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolVolParams = [.3 -.02 .7 .14];

SABRBGMVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolParams = [.2 -.01 .8 .16];
VolFunc(1:numRates-1,1) = {@(t) SABRBGMVolFunc(SABRBGMVolParams,t)};

VolVolFunc(1:numRates-1,1) = {@(t) SABRBGMVolVolFunc(SABRBGMVolVolParams,t)};

CorrFunc = @(i,j,B) exp(-B*abs(i-j));
FwdFwdCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.08);
VolVolCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.04);

SABRBGM_Rebonato = finmodel("SABRBraceGatarekMusiela",Alpha=Alpha,Beta=Beta,VolatilityofVolatility=VolVolFunc,Volatility=VolFunc,FwdFwdCorrelation=FwdFwdCorrelation, VolVolCorrelation=VolVolCorrelation)
SABRBGM_Rebonato = 
  SABRBraceGatarekMusiela with properties:

                    Period: 2
                     Alpha: [4x1 double]
                      Beta: [4x1 double]
                Volatility: {4x1 cell}
    VolatilityofVolatility: {4x1 cell}
         FwdFwdCorrelation: [4x4 double]
         VolVolCorrelation: [4x4 double]
         FwdVolCorrelation: [4x4 double]

Create ratecurve Object

Create a ratecurve object using ratecurve.

Settle = datetime(2019,1,1);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 01-Jan-2019
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Create IRMonteCarlo Pricer Object

Use finpricer to create an IRMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.

simDates = datetime(2019,7,1)+calmonths(0:6:24);
outPricer = finpricer("IRMonteCarlo",Model=SABRBGM_Rebonato,DiscountCurve=myRC,SimulationDates=simDates)
outPricer = 
  SABRBGMMonteCarlo with properties:

          NumTrials: 1000
      RandomNumbers: []
      DiscountCurve: [1x1 ratecurve]
    SimulationDates: [01-Jul-2019    01-Jan-2020    01-Jul-2020    01-Jan-2021    01-Jul-2021]
              Model: [1x1 finmodel.SABRBraceGatarekMusiela]

Price FixedBond Instrument

Use price to compute the price and sensitivities for the FixedBond instrument.

[Price,outPR] = price(outPricer,FixB,["all"])
Price = 103.5433
outPR = 
  priceresult with properties:

       Results: [1x3 table]
    PricerData: [1x1 struct]

outPR.Results
ans=1×3 table
    Price     Delta     Gamma
    ______    ______    _____

    103.54    -253.5    628.2

You can access the simulated interest-rate Paths in the PricerData output.

outPR.PricerData
ans = struct with fields:
    SimulationTimes: [6x1 timetable]
              Paths: [6x8x1000 double]
      RandomNumbers: [1x1 struct]

This example shows the workflow to price a FloatBond instrument when you use a SABRBraceGatarekMusiela model in Rebonato parametric form and an IRMonteCarlo pricing method.

Create FloatBond Instrument Object

Use fininstrument to create a FloatBond instrument object.

FloatB = fininstrument("FloatBond",Maturity=datetime(2021,7,1),Spread=0.025,Reset=2,Basis=1,Principal=100,EndMonthRule=false,Name="float_bond_instrument")
FloatB = 
  FloatBond with properties:

                      Spread: 0.0250
             ProjectionCurve: [0x0 ratecurve]
                 ResetOffset: 0
                       Reset: 2
                       Basis: 1
                EndMonthRule: 0
                   Principal: 100
    DaycountAdjustedCashFlow: 0
       BusinessDayConvention: "actual"
          LatestFloatingRate: NaN
                    Holidays: NaT
                   IssueDate: NaT
             FirstCouponDate: NaT
              LastCouponDate: NaT
                   StartDate: NaT
                    Maturity: 01-Jul-2021
                        Name: "float_bond_instrument"

Create Rebonato Form SABRBraceGatarekMusiela Model Object

Use finmodel to create a SABRBraceGatarekMusiela model object that is a SABR-BGM model in Rebonato parametric form.

Alpha = [0.4;0.34;0.31;0.28];
Beta = [0.5;0.5;0.5;0.5];
numRates = 5;

SABRBGMVolVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolVolParams = [.3 -.02 .7 .14];

SABRBGMVolFunc = @(a,t) (a(1)*t + a(2)).*exp(-a(3)*t) + a(4);
SABRBGMVolParams = [.2 -.01 .8 .16];
VolFunc(1:numRates-1,1) = {@(t) SABRBGMVolFunc(SABRBGMVolParams,t)};

VolVolFunc(1:numRates-1,1) = {@(t) SABRBGMVolVolFunc(SABRBGMVolVolParams,t)};

CorrFunc = @(i,j,B) exp(-B*abs(i-j));
FwdFwdCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.08);
VolVolCorrelation = CorrFunc(meshgrid(1:numRates-1)',meshgrid(1:numRates-1),.04);
SABRRho = [0.0005;0.0006;0.0060;0.0055];
FwdVolCorrelation = diag(SABRRho);

SABRBGM_Rebonato_param = finmodel("SABRBraceGatarekMusiela",Alpha=Alpha,Beta=Beta,VolatilityofVolatility=VolVolFunc,Volatility=VolFunc,FwdFwdCorrelation=FwdFwdCorrelation,VolVolCorrelation=VolVolCorrelation,FwdVolCorrelation=FwdVolCorrelation)
SABRBGM_Rebonato_param = 
  SABRBraceGatarekMusiela with properties:

                    Period: 2
                     Alpha: [4x1 double]
                      Beta: [4x1 double]
                Volatility: {4x1 cell}
    VolatilityofVolatility: {4x1 cell}
         FwdFwdCorrelation: [4x4 double]
         VolVolCorrelation: [4x4 double]
         FwdVolCorrelation: [4x4 double]

Create ratecurve Object

Create a ratecurve object using ratecurve.

Settle = datetime(2019,1,1);
Type = 'zero';
ZeroTimes = [calmonths(6) calyears([1 2 3 4 5 7 10 20 30])]';
ZeroRates = [0.0052 0.0055 0.0061 0.0073 0.0094 0.0119 0.0168 0.0222 0.0293 0.0307]';
ZeroDates = Settle + ZeroTimes;
 
myRC = ratecurve('zero',Settle,ZeroDates,ZeroRates)
myRC = 
  ratecurve with properties:

                 Type: "zero"
          Compounding: -1
                Basis: 0
                Dates: [10x1 datetime]
                Rates: [10x1 double]
               Settle: 01-Jan-2019
         InterpMethod: "linear"
    ShortExtrapMethod: "next"
     LongExtrapMethod: "previous"

Create IRMonteCarlo Pricer Object

Use finpricer to create an IRMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.

simDates = datetime(2019,7,1)+calmonths(0:6:24);
outPricer = finpricer("IRMonteCarlo",Model=SABRBGM_Rebonato_param,DiscountCurve=myRC,SimulationDates=simDates)
outPricer = 
  SABRBGMMonteCarlo with properties:

          NumTrials: 1000
      RandomNumbers: []
      DiscountCurve: [1x1 ratecurve]
    SimulationDates: [01-Jul-2019    01-Jan-2020    01-Jul-2020    01-Jan-2021    01-Jul-2021]
              Model: [1x1 finmodel.SABRBraceGatarekMusiela]

Price FloatBond Instrument

Use price to compute the price and sensitivities for the FloatBond instrument.

[Price,outPR] = price(outPricer,FloatB,["all"])
Price = 106.1830
outPR = 
  priceresult with properties:

       Results: [1x3 table]
    PricerData: [1x1 struct]

outPR.Results
ans=1×3 table
    Price      Delta     Gamma 
    ______    _______    ______

    106.18    -9.2496    16.927

You can access the simulated interest-rate Paths in the PricerData output.

outPR.PricerData
ans = struct with fields:
    SimulationTimes: [6x1 timetable]
              Paths: [6x8x1000 double]
      RandomNumbers: [1x1 struct]

More About

expand all

References

[1] Brigo, D. and F. Mercurio. Interest Rate Models - Theory and Practice. Springer Finance, 2006.

[2] Crispoldi, C., Wigger, G., and P. Larkin. SABR and SABR LIBOR Market Models in Practice. Palgrave MacMillan, 2015.

[3] Hagan, P. and A. Lesniewski. LIBOR market Model with SABR Style Volatility. Working paper JPMorgan Chase, 2008.

[4] Rebonato, R., McKay, K., and R. White. The SABR/LIBOR Market Model: pricing, Calibration, and Hedging for Complex Interest-Rate Derivatives. Wiley, 2009.

Version History

Introduced in R2021b