Cliquet
Description
Create and price a Cliquet instrument object for one or
more Cliquet instruments using this workflow:
Use
fininstrumentto create aCliquetinstrument object for one or more Cliquet instruments.Use
finmodelto specify aBlackScholes,Bates,Merton,RoughBergomi,RoughHeston, orHestonmodel for theCliquetinstrument object.Choose a pricing method.
When using a
BlackScholesmodel, usefinpricerto specify aRubinsteinpricing method for one or moreCliquetinstruments.When using a
BlackScholes,Heston,Bates, orMertonmodel, usefinpricerto specify anAssetMonteCarlopricing method for one or moreCliquetinstruments.When using a
RoughBergomiorRoughHestonmodel, usefinpricerto specify aRoughVolMonteCarlopricing method for one or moreCliquetinstruments.
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
Cliquet instrument, see Choose Instruments, Models, and Pricers.
Creation
Syntax
Description
creates a CliquetOpt = fininstrument(InstrumentType,ResetDates=reset_dates)Cliquet instrument object for one or more
Cliquet instruments by specifying InstrumentType and
sets properties using the
required name-value argument for ResetDates.
sets optional properties using
additional name-value arguments in addition to the required arguments in the
previous syntax. For example, CliquetOpt = fininstrument(___,Name=Value)CliquetOpt =
fininstrument("Cliquet",ResetDates=ResetDates,Name="Cliquet_option")
creates a Cliquet option. You can specify multiple
name-value arguments.
Input Arguments
Instrument type, specified as a string with the value of
"Cliquet", a character vector with the value of
'Cliquet', an
NINST-by-1 string array with
values of "Cliquet", or an
NINST-by-1 cell array of
character vectors with values of 'Cliquet'.
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: CliquetOpt =
fininstrument("Cliquet",ResetDates=ResetDates,Name="Cliquet_option")
Required Cliquet Name-Value Arguments
Reset dates when option strike is set, specified as
ResetDates and a
1-by-NumDates vector of
datetimes. The last element corresponds to the maturity date of the
Cliquet option.
A cliquet option is a path-dependent, exotic option that periodically settles and then resets its strike price at the level of the underlying asset at the time of settlement. The reset of the strike price is not conditional to the value of the underlying asset at the reset date.
Data Types: datetime
Optional Cliquet Name-Value Arguments
Option type, specified as OptionType and a
scalar string or character vector or an
NINST-by-1 cell array of
character vectors or string array.
Data Types: char | string
Option exercise style, specified as
ExerciseStyle and a scalar string or
character vector or an
NINST-by-1 cell array of
character vectors or string array.
Data Types: string | char
Option type, specified as ReturnType and a
scalar string or character vector or an
NINST-by-1 cell array of
character vectors or string array.
Data Types: char | string
Original strike price used for first reset date, specified as
InitialStrike and a scalar nonnegative
numeric value or an NINST-by-1
vector of nonnegative numeric values.
Data Types: double
Local cap, specified as LocalCap and a scalar
nonnegative numeric value or an
NINST-by-1 vector of
nonnegative numeric values.
Data Types: double
Local floor, specified as LocalFloor and a
scalar nonnegative numeric value or an
NINST-by-1 vector of
nonnegative numeric values.
Data Types: double
Global cap, specified as GlobalCap and a scalar
nonnegative numeric value or an
NINST-by-1 vector of
nonnegative numeric values.
Data Types: double
Global floor, specified as GlobalFloor and a
scalar nonnegative numeric value or an
NINST-by-1 vector of
nonnegative numeric values.
Data Types: double
User-defined name for one or more instruments, specified as
Name and a scalar string or character vector
or an NINST-by-1 cell array of
character vectors or string array.
Data Types: char | cell | string
Output Arguments
Cliquet instrument, returned as a Cliquet
object.
Properties
Reset dates when option strike is set, returned as a
1-by-NumDates vector of datetimes.
Data Types: datetime
Option type, returned as a scalar string.
Data Types: string
Option type, returned as a scalar string.
Data Types: string
Original strike price used for first reset date, returned as a scalar nonnegative numeric value.
Data Types: double
Option exercise style, returned as a scalar string.
Data Types: string
Local cap, returned as a scalar nonnegative numeric value.
Data Types: double
Local floor, returned as a scalar nonnegative numeric value.
Data Types: double
Global cap, returned as a scalar nonnegative numeric value.
Data Types: double
Global floor, returned as a scalar nonnegative numeric value.
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
This example shows the workflow to price the absolute return for a Cliquet instrument when you use a BlackScholes model and an AssetMonteCarlo pricing method.
Create ratecurve Object
Create a ratecurve object using ratecurve.
Settle = datetime(2020,1,1);
Date = datetime(2021,1,1);
Rates = 0.10;
Basis = 1;
ZeroCurve = ratecurve('zero',Settle,Date,Rates,Basis=Basis)ZeroCurve =
ratecurve with properties:
Type: "zero"
Compounding: -1
Basis: 1
Dates: 01-Jan-2021
Rates: 0.1000
Settle: 01-Jan-2020
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create Cliquet Instrument Object
Use fininstrument to create a Cliquet instrument object.
ResetDates = Settle + years(0:0.25:1); CliquetOpt = fininstrument("Cliquet",ResetDates=ResetDates,Name="cliquet_option")
CliquetOpt =
Cliquet with properties:
OptionType: "call"
ExerciseStyle: "european"
ResetDates: [01-Jan-2020 00:00:00 01-Apr-2020 07:27:18 01-Jul-2020 14:54:36 30-Sep-2020 22:21:54 31-Dec-2020 05:49:12]
LocalCap: Inf
LocalFloor: 0
GlobalCap: Inf
GlobalFloor: 0
ReturnType: "absolute"
InitialStrike: NaN
Name: "cliquet_option"
Create BlackScholes Model Object
Use finmodel to create a BlackScholes model object.
BlackScholesModel = finmodel("BlackScholes",Volatility=0.1)BlackScholesModel =
BlackScholes with properties:
Volatility: 0.1000
Correlation: 1
Create AssetMonteCarlo Pricer Object
Use finpricer to create an AssetMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.
outPricer = finpricer("AssetMonteCarlo",DiscountCurve=ZeroCurve,Model=BlackScholesModel,SpotPrice=100,simulationDates=Settle+days(1):days(1):Date)outPricer =
GBMMonteCarlo with properties:
DiscountCurve: [1×1 ratecurve]
SpotPrice: 100
SimulationDates: [02-Jan-2020 03-Jan-2020 04-Jan-2020 05-Jan-2020 06-Jan-2020 07-Jan-2020 08-Jan-2020 09-Jan-2020 10-Jan-2020 11-Jan-2020 12-Jan-2020 13-Jan-2020 14-Jan-2020 … ] (1×366 datetime)
NumTrials: 1000
RandomNumbers: []
Model: [1×1 finmodel.BlackScholes]
DividendType: "continuous"
DividendValue: 0
MonteCarloMethod: "standard"
BrownianMotionMethod: "standard"
Price Cliquet Instrument
Use price to compute the price and sensitivities for the Cliquet instrument.
[Price, outPR] = price(outPricer,CliquetOpt,"all")Price = 13.1885
outPR =
priceresult with properties:
Results: [1×7 table]
PricerData: [1×1 struct]
outPR.Results
ans=1×7 table
Price Delta Gamma Lambda Rho Theta Vega
______ _______ __________ ______ ______ _____ ______
13.189 0.13189 1.2434e-14 1 59.019 0 66.068
Since R2024a
This example shows the workflow to price the absolute return for a Cliquet instrument when you use a RoughBergomi model and a RoughVolMonteCarlo pricing method.
Create ratecurve Object
Create a ratecurve object using ratecurve.
Settle = datetime(2020,1,1);
Date = datetime(2022,1,1);
Rates = 0.04;
Basis = 4;
myRC = ratecurve('zero',Settle,Date,Rates,Basis=Basis)myRC =
ratecurve with properties:
Type: "zero"
Compounding: -1
Basis: 4
Dates: 01-Jan-2022
Rates: 0.0400
Settle: 01-Jan-2020
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create Cliquet Instrument Object
Use fininstrument to create a Cliquet instrument object.
ResetDates = Settle + years(0:0.25:1); CliquetOpt = fininstrument("Cliquet",ResetDates=ResetDates,Name="cliquet_option")
CliquetOpt =
Cliquet with properties:
OptionType: "call"
ExerciseStyle: "european"
ResetDates: [01-Jan-2020 00:00:00 01-Apr-2020 07:27:18 01-Jul-2020 14:54:36 30-Sep-2020 22:21:54 31-Dec-2020 05:49:12]
LocalCap: Inf
LocalFloor: 0
GlobalCap: Inf
GlobalFloor: 0
ReturnType: "absolute"
InitialStrike: NaN
Name: "cliquet_option"
Create RoughBergomi Model Object
Use finmodel to create a RoughBergomi model object.
RoughBergomiModel = finmodel("RoughBergomi",Alpha=-0.12, Xi=0.1,Eta=0.003,RhoSV=0.2)RoughBergomiModel =
RoughBergomi with properties:
Alpha: -0.1200
Xi: 0.1000
Eta: 0.0030
RhoSV: 0.2000
Create RoughVolMonteCarlo Pricer Object
Use finpricer to create a RoughVolMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value argument.
outPricer = finpricer("RoughVolMonteCarlo",DiscountCurve=myRC,Model=RoughBergomiModel,SpotPrice=20000,simulationDates=ResetDates)outPricer =
RoughBergomiMonteCarlo with properties:
DiscountCurve: [1×1 ratecurve]
SpotPrice: 20000
SimulationDates: [01-Jan-2020 00:00:00 01-Apr-2020 07:27:18 01-Jul-2020 14:54:36 30-Sep-2020 22:21:54 31-Dec-2020 05:49:12]
NumTrials: 1000
RandomNumbers: []
Model: [1×1 finmodel.RoughBergomi]
DividendType: "continuous"
DividendValue: 0
MonteCarloMethod: "standard"
BrownianMotionMethod: "standard"
Price Cliquet Instrument
Use price to compute the price and sensitivities for the Cliquet instrument.
[Price, outPR] = price(outPricer,CliquetOpt,"all")Price = 5.4692e+03
outPR =
priceresult with properties:
Results: [1×7 table]
PricerData: [1×1 struct]
outPR.Results
ans=1×7 table
Price Delta Gamma Lambda Rho Theta Vega
______ _______ __________ ______ ______ _____ _____
5469.2 0.27346 1.5916e-16 1 7634.7 0 16300
Since R2024b
This example shows the workflow to price the absolute return for a Cliquet instrument when you use a RoughHeston model and a RoughVolMonteCarlo pricing method.
Create ratecurve Object
Create a ratecurve object using ratecurve.
Settle = datetime(2020,1,1);
Date = datetime(2022,1,1);
Rates = 0.04;
Basis = 4;
myRC = ratecurve('zero',Settle,Date,Rates,Basis=Basis)myRC =
ratecurve with properties:
Type: "zero"
Compounding: -1
Basis: 4
Dates: 01-Jan-2022
Rates: 0.0400
Settle: 01-Jan-2020
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create Cliquet Instrument Object
Use fininstrument to create a Cliquet instrument object.
ResetDates = Settle + years(0:0.25:1); CliquetOpt = fininstrument("Cliquet",ResetDates=ResetDates,Name="cliquet_option")
CliquetOpt =
Cliquet with properties:
OptionType: "call"
ExerciseStyle: "european"
ResetDates: [01-Jan-2020 00:00:00 01-Apr-2020 07:27:18 01-Jul-2020 14:54:36 30-Sep-2020 22:21:54 31-Dec-2020 05:49:12]
LocalCap: Inf
LocalFloor: 0
GlobalCap: Inf
GlobalFloor: 0
ReturnType: "absolute"
InitialStrike: NaN
Name: "cliquet_option"
Create RoughHeston Model Object
Use finmodel to create a RoughHeston model object.
RoughBergomiModel = finmodel("RoughHeston",V0=0.4,ThetaV=0.3,Kappa=0.2,SigmaV=0.1,Alpha=-0.02,RhoSV=0.3)RoughBergomiModel =
RoughHeston with properties:
Alpha: -0.0200
V0: 0.4000
ThetaV: 0.3000
Kappa: 0.2000
SigmaV: 0.1000
RhoSV: 0.3000
Create RoughVolMonteCarlo Pricer Object
Use finpricer to create a RoughVolMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value argument.
outPricer = finpricer("RoughVolMonteCarlo",DiscountCurve=myRC,Model=RoughBergomiModel,SpotPrice=20000,simulationDates=ResetDates)outPricer =
RoughHestonMonteCarlo with properties:
DiscountCurve: [1×1 ratecurve]
SpotPrice: 20000
SimulationDates: [01-Jan-2020 00:00:00 01-Apr-2020 07:27:18 01-Jul-2020 14:54:36 30-Sep-2020 22:21:54 31-Dec-2020 05:49:12]
NumTrials: 1000
RandomNumbers: []
Model: [1×1 finmodel.RoughHeston]
DividendType: "continuous"
DividendValue: 0
MonteCarloMethod: "standard"
BrownianMotionMethod: "standard"
Price Cliquet Instrument
Use price to compute the price and sensitivities for the Cliquet instrument.
[Price, outPR] = price(outPricer,CliquetOpt,"all")Price = 1.0121e+04
outPR =
priceresult with properties:
Results: [1×8 table]
PricerData: [1×1 struct]
outPR.Results
ans=1×8 table
Price Delta Gamma Lambda Rho Theta Vega VegaLT
_____ _______ __________ ______ ______ _____ _____ ______
10121 0.50606 -1.819e-16 1 4907.3 0 14348 961.32
This example shows the workflow to price the absolute return for a Cliquet instrument when you use a BlackScholes model and an AssetMonteCarlo pricing method with quasi-Monte Carlo simulation.
Create ratecurve Object
Create a ratecurve object using ratecurve.
Settle = datetime(2020,1,1);
Date = datetime(2021,1,1);
Rates = 0.10;
Basis = 1;
ZeroCurve = ratecurve('zero',Settle,Date,Rates,Basis=Basis)ZeroCurve =
ratecurve with properties:
Type: "zero"
Compounding: -1
Basis: 1
Dates: 01-Jan-2021
Rates: 0.1000
Settle: 01-Jan-2020
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create Cliquet Instrument Object
Use fininstrument to create a Cliquet instrument object.
ResetDates = Settle + years(0:0.25:1); CliquetOpt = fininstrument("Cliquet",ResetDates=ResetDates,Name="cliquet_option")
CliquetOpt =
Cliquet with properties:
OptionType: "call"
ExerciseStyle: "european"
ResetDates: [01-Jan-2020 00:00:00 01-Apr-2020 07:27:18 01-Jul-2020 14:54:36 30-Sep-2020 22:21:54 31-Dec-2020 05:49:12]
LocalCap: Inf
LocalFloor: 0
GlobalCap: Inf
GlobalFloor: 0
ReturnType: "absolute"
InitialStrike: NaN
Name: "cliquet_option"
Create BlackScholes Model Object
Use finmodel to create a BlackScholes model object.
BlackScholesModel = finmodel("BlackScholes",Volatility=0.1)BlackScholesModel =
BlackScholes with properties:
Volatility: 0.1000
Correlation: 1
Create AssetMonteCarlo Pricer Object
Use finpricer to create an AssetMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value argument and use the name-value arguments for MonteCarloMethod and BrownianMotionMethod.
outPricer = finpricer("AssetMonteCarlo",DiscountCurve=ZeroCurve,Model=BlackScholesModel,SpotPrice=100,simulationDates=Settle+days(1):days(1):Date,NumTrials=1e3, ... MonteCarloMethod="quasi",BrownianMotionMethod="brownian-bridge")
outPricer =
GBMMonteCarlo with properties:
DiscountCurve: [1×1 ratecurve]
SpotPrice: 100
SimulationDates: [02-Jan-2020 03-Jan-2020 04-Jan-2020 05-Jan-2020 06-Jan-2020 07-Jan-2020 08-Jan-2020 09-Jan-2020 10-Jan-2020 11-Jan-2020 12-Jan-2020 13-Jan-2020 14-Jan-2020 … ] (1×366 datetime)
NumTrials: 1000
RandomNumbers: []
Model: [1×1 finmodel.BlackScholes]
DividendType: "continuous"
DividendValue: 0
MonteCarloMethod: "quasi"
BrownianMotionMethod: "brownian-bridge"
Price Cliquet Instrument
Use price to compute the price and sensitivities for the Cliquet instrument.
[Price, outPR] = price(outPricer,CliquetOpt,"all")Price = 13.2175
outPR =
priceresult with properties:
Results: [1×7 table]
PricerData: [1×1 struct]
outPR.Results
ans=1×7 table
Price Delta Gamma Lambda Rho Theta Vega
______ _______ ___________ ______ ______ _____ ______
13.217 0.13217 -3.5527e-15 1 58.885 0 66.691
This example shows the workflow to price a Cliquet instrument when you use a BlackScholes model and an AssetMonteCarlo pricing method. This example demonstrates how variations in caps and floors affect option prices on European Cliquet options.
This example uses three 1-year call cliquet options with quarterly observation dates. The first Cliquet option has no caps or floors, the second Cliquet option has a local floor, and the third Cliquet option has a local cap and a local floor.
Create ratecurve Object
Create a ratecurve object using ratecurve.
Settle = datetime(2020,01,01);
Dates = datetime(2021,01,01);
Rate = 0.035;
Compounding = -1;
ZeroCurve = ratecurve('zero',Settle,Dates,Rate,Compounding=Compounding)ZeroCurve =
ratecurve with properties:
Type: "zero"
Compounding: -1
Basis: 0
Dates: 01-Jan-2021
Rates: 0.0350
Settle: 01-Jan-2020
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create BlackScholes Model Object
Use finmodel to create a BlackScholes model object.
BSModel = finmodel("BlackScholes",Volatility=0.20)BSModel =
BlackScholes with properties:
Volatility: 0.2000
Correlation: 1
Create Cliquet Instrument Objects with Quarterly Observation Dates
Use fininstrument to create the first Cliquet instrument object with no caps or floors.
ResetDates = Settle + years(0:0.25:1); Cliquet = fininstrument("Cliquet",ResetDates=ResetDates,ReturnType="relative",LocalFloor="-inf",GlobalFloor="-inf",Name="Vanilla_Cliquet")
Cliquet =
Cliquet with properties:
OptionType: "call"
ExerciseStyle: "european"
ResetDates: [01-Jan-2020 00:00:00 01-Apr-2020 07:27:18 01-Jul-2020 14:54:36 30-Sep-2020 22:21:54 31-Dec-2020 05:49:12]
LocalCap: Inf
LocalFloor: -Inf
GlobalCap: Inf
GlobalFloor: -Inf
ReturnType: "relative"
InitialStrike: NaN
Name: "Vanilla_Cliquet"
Use fininstrument to create the second Cliquet instrument object with a local floor of 0%.
LFCliquet = fininstrument("Cliquet",ResetDates=ResetDates,ReturnType="relative",GlobalFloor="-inf",Name="LFCliquet")
LFCliquet =
Cliquet with properties:
OptionType: "call"
ExerciseStyle: "european"
ResetDates: [01-Jan-2020 00:00:00 01-Apr-2020 07:27:18 01-Jul-2020 14:54:36 30-Sep-2020 22:21:54 31-Dec-2020 05:49:12]
LocalCap: Inf
LocalFloor: 0
GlobalCap: Inf
GlobalFloor: -Inf
ReturnType: "relative"
InitialStrike: NaN
Name: "LFCliquet"
Use fininstrument to create the third Cliquet instrument object with a local cap of 7% and a local floor of 0%.
LocalCap = 0.07; LFLCCliquet = fininstrument("Cliquet",ResetDates=ResetDates,ReturnType="relative",LocalCap=LocalCap,GlobalFloor="-inf",Name="LFLCCLiquet")
LFLCCliquet =
Cliquet with properties:
OptionType: "call"
ExerciseStyle: "european"
ResetDates: [01-Jan-2020 00:00:00 01-Apr-2020 07:27:18 01-Jul-2020 14:54:36 30-Sep-2020 22:21:54 31-Dec-2020 05:49:12]
LocalCap: 0.0700
LocalFloor: 0
GlobalCap: Inf
GlobalFloor: -Inf
ReturnType: "relative"
InitialStrike: NaN
Name: "LFLCCLiquet"
Create AssetMonteCarlo Pricer Object
Use finpricer to create an AssetMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.
SpotPrice = 100; NumTrials = 5000; MCPricer = finpricer("AssetMonteCarlo",DiscountCurve=ZeroCurve,Model=BSModel,... SpotPrice=SpotPrice,SimulationDates=[Settle+years(0:0.25:1),Settle+calmonths(0:1:12)],NumTrials=NumTrials)
MCPricer =
GBMMonteCarlo with properties:
DiscountCurve: [1×1 ratecurve]
SpotPrice: 100
SimulationDates: [01-Jan-2020 00:00:00 01-Feb-2020 00:00:00 01-Mar-2020 00:00:00 01-Apr-2020 00:00:00 01-Apr-2020 07:27:18 01-May-2020 00:00:00 01-Jun-2020 00:00:00 01-Jul-2020 00:00:00 … ] (1×17 datetime)
NumTrials: 5000
RandomNumbers: []
Model: [1×1 finmodel.BlackScholes]
DividendType: "continuous"
DividendValue: 0
MonteCarloMethod: "standard"
BrownianMotionMethod: "standard"
Price Cliquet Instruments
Use price to compute the prices for the three Cliquet instruments.
Price = price(MCPricer,[Cliquet;LFCliquet;LFLCCliquet])
Price = 3×1
0.0337
0.1717
0.1042
The underlying asset has good and poor performances when simulating Cliquet option returns. You can observe the effect of caps and floors on these performances when computing the payoff of the three Cliquet instruments:
The first Cliquet option has no local floor, so it picks up all the poor performances. Since there is no local cap, none of the returns are capped for this Cliquet option.
The price of the second Cliquet option is higher than the price of the first Cliquet option. The effect of the local floor on the second Cliquet option is that none of the performances below 0% are considered.
The price of the third Cliquet option is lower than the price of the second Cliquet option because of the capped performances (returns above 7% are not considered), but it is higher than the price of the first Cliquet option with no local floor, since poor performances below 0% are not considered.
This example shows the workflow to price multiple Cliquet instruments when you use a BlackScholes model and a Rubinstein pricing method.
Create ratecurve Object
Create a flat ratecurve object using ratecurve.
Settle = datetime(2018,9,15);
Maturity = datetime(2023,9,15);
Rate = 0.035;
myRC = ratecurve('zero',Settle,Maturity,Rate,Basis=12)myRC =
ratecurve with properties:
Type: "zero"
Compounding: -1
Basis: 12
Dates: 15-Sep-2023
Rates: 0.0350
Settle: 15-Sep-2018
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create Cliquet Instrument Object
Use fininstrument to create a Cliquet instrument object for three Cliquet instruments.
ResetDates = Settle + years(0:0.25:1); CliquetOpt = fininstrument("Cliquet",ResetDates=ResetDates,InitialStrike=[140;150;160],ExerciseStyle="european",Name="cliquet_option")
CliquetOpt=3×1 Cliquet array with properties:
OptionType
ExerciseStyle
ResetDates
LocalCap
LocalFloor
GlobalCap
GlobalFloor
ReturnType
InitialStrike
Name
Create BlackScholes Model Object
Use finmodel to create a BlackScholes model object.
BlackScholesModel = finmodel("BlackScholes",Volatility=0.28)BlackScholesModel =
BlackScholes with properties:
Volatility: 0.2800
Correlation: 1
Create Rubinstein Pricer Object
Use finpricer to create a Rubinstein pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.
outPricer = finpricer("analytic",DiscountCurve=myRC,Model=BlackScholesModel,SpotPrice=135,DividendValue=0.025,PricingMethod="Rubinstein")
outPricer =
Rubinstein with properties:
DiscountCurve: [1×1 ratecurve]
Model: [1×1 finmodel.BlackScholes]
SpotPrice: 135
DividendValue: 0.0250
DividendType: "continuous"
Price Cliquet Instruments
Use price to compute the prices and sensitivities for the three Cliquet instruments.
[Price, outPR] = price(outPricer,CliquetOpt,"all")Price = 3×1
28.1905
25.3226
23.8168
outPR=3×1 priceresult array with properties:
Results
PricerData
outPR.Results
ans=1×7 table
Price Delta Gamma Lambda Vega Rho Theta
______ _______ ________ ______ ______ ______ ______
28.191 0.59697 0.020662 2.8588 105.38 60.643 -14.62
ans=1×7 table
Price Delta Gamma Lambda Vega Rho Theta
______ _______ ________ ______ ______ ______ _______
25.323 0.41949 0.016816 2.2364 100.47 55.367 -11.708
ans=1×7 table
Price Delta Gamma Lambda Vega Rho Theta
______ _______ ________ ______ ______ ______ ______
23.817 0.29729 0.011133 1.6851 93.219 51.616 -7.511
More About
A cliquet option, also called a "ratchet option," is a series of at-the-money (ATM) options, either puts or calls, where each successive option becomes active when the previous one expires.
A cliquet option is a series of forward start options, all related to each other. Each forward start option represents the advance purchase of a put, or call, option with an at-the-money strike price to be determined at a later date, typically when the option becomes active. A forward start option becomes active at a specified date in the future. The premium is paid in advance, while the time to expiration and the underlying security are established at the time the forward start option is purchased.
For example, a comparison of a European cliquet with a European vanilla option illustrates the behavior of a cliquet option. Assume that a cliquet call and put option has these characteristics:
Underlying index = FTST 100 index Settle = June 19, 2019 Maturity = June 19, 2022 Initial Strike = 3000 % Assume that the underlying asset has the following values at these ResetDates: ResetDate(1) = Strike = 3300 ResetDate(2) = Strike = 2700 ResetDate(3) = Strike = 2900 Local floor = 0
Underlying index = FTST 100 index Settle = June 19, 2019 Maturity = June 19, 2022 Strike = 3000
A three-year cliquet call on the FTST with annual resets is a series of three annual at-the-money spot calls. The initial strike is set at 3000. If at the end of year 1, the FTST closes at 3300, the first call matures in-the-money and the holder makes $300 in profit on the one-year start call. The call strike for year 2 is then reset at 3300. If at the end of year 2, the FTST closes at 2700, the call will expire worthless. The call strike for year 3 is then reset at 2700. If at the end of year 3 the underlying asset is trading at 2900, the call matures in-the-money and the holder makes a profit of $200. In summary, the holder has locked $500 in profit.
| Year | Strike | Payoff at End of Each Year |
|---|---|---|
| 1 | $3000 | $300 |
| 2 | $3300 | $0 |
| 3 | $2700 | $200 |
On the other hand, a three-year call vanilla option with a strike of 3000 will expire worthless.
A three-year cliquet put on the FTST with annual resets is a series of three annual at-the-money spot puts. The initial strike is set at 3000. If at the end of year 1, the FTST closes at 3300, the first put expires worthless. The put strike for year 2 is then reset at 3300. If at the end of year 2, the FTST closes at 2700, the put matures in-the-money and the holder makes $600 in profit on the second-year start put. The put strike for year 3 is then reset at 2700. If at the end of year 3 the underlying asset is trading at 2900, the put matures worthless. In summary, the holder has locked $600 in profit.
| Year | Strike | Payoff at End of Each Year |
|---|---|---|
| 1 | $3000 | 0 |
| 2 | $3300 | $600 |
| 3 | $2700 | 0 |
On the other hand, a three-year vanilla put option with a strike of $3000 will expire in-the-money with a $100 profit.
Algorithms
A cliquet option is constructed as a series of forward start options. The premium and observation (reset) dates are set in advance and its payoff depends on the returns of the underlying asset at given observation or reset dates. This return can be based in terms of absolute or relative returns. The return during the period [Tn-1, Tn] is defined as follows:
Where n = 1,…,Nobs and Nobs is the number of observations (reset dates) during the life of the contract, Sn is the price of the underlying asset at observation time n.
Since the cliquet instrument is built as a series of forward start options, then its payoff is the sum of the returns:
Depending on the underlying asset performance, there would be positive and negative returns, and the presence of caps and floors play a big role in the payoff and price of the cliquet instrument.
If a local cap (LC) and a local floor (LF) of the individual returns are considered, then the payoff of the cliquet option is the sum of the returns, capped and floored by LC and LF, at every observation time tn:
At maturity, the sum of these modified local returns might also be globally capped and floored. If a global cap (GC) and a global floor (GF) are also considered, the cliquet option has a final payoff of:
In this case the total sum of all the cliquets is now globally capped and floored.
There are two popular cliquets in the market, the globally capped and locally floored cliquet (GCLF) and the globally floored and locally capped cliquet (GFLC). Their payoffs are defined as follows:
In summary, the payoff of a cliquet instrument is the sum of the capped and floored returns.
Version History
Introduced in R2021bThe Cliquet instrument object supports pricing with a RoughHeston model and
a RoughVolMonteCarlo pricing method.
The Cliquet instrument object supports pricing with a RoughBergomi model
and a RoughVolMonteCarlo pricing method.
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.
Seleziona un sito web
Seleziona un sito web per visualizzare contenuto tradotto dove disponibile e vedere eventi e offerte locali. In base alla tua area geografica, ti consigliamo di selezionare: .
Puoi anche selezionare un sito web dal seguente elenco:
Come ottenere le migliori prestazioni del sito
Per ottenere le migliori prestazioni del sito, seleziona il sito cinese (in cinese o in inglese). I siti MathWorks per gli altri paesi non sono ottimizzati per essere visitati dalla tua area geografica.
Americhe
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- 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)