Cliquet
Description
Create and price a Cliquet
instrument object for one or
more Cliquet instruments using this workflow:
Use
fininstrument
to create aCliquet
instrument object for one or more Cliquet instruments.Use
finmodel
to specify aBlackScholes
,Bates
,Merton
,RoughBergomi
,RoughHeston
, orHeston
model for theCliquet
instrument object.Choose a pricing method.
When using a
BlackScholes
model, usefinpricer
to specify aRubinstein
pricing method for one or moreCliquet
instruments.When using a
BlackScholes
,Heston
,Bates
, orMerton
model, usefinpricer
to specify anAssetMonteCarlo
pricing method for one or moreCliquet
instruments.When using a
RoughBergomi
orRoughHeston
model, usefinpricer
to specify aRoughVolMonteCarlo
pricing method for one or moreCliquet
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
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
InstrumentType
— Instrument type
string with value "Cliquet"
| string array with values of "Cliquet"
| character vector with value 'Cliquet'
| cell array of character vectors with values of
'Cliquet'
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
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")
Cliquet
Name-Value ArgumentsResetDates
— Reset dates when option strike is set
vector of datetimes
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
Cliquet
Name-Value ArgumentsOptionType
— Option type
"call"
(default) | string with value "call"
or "put"
| string array with values of "call"
or "put"
| character vector with value 'call'
or
'put'
| cell array of character vectors with values of
'call'
or 'put'
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
ExerciseStyle
— Option exercise style
"European"
(default) | string with value "European"
| string array with values of "European"
| character vector with value 'European'
| cell array of character vectors with values of 'European'
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
ReturnType
— Return calculation type
"absolute"
(default) | string with value "absolute"
or "relative"
| string array with values of "absolute"
or "relative"
| character vector with value 'absolute'
or
'relative'
| cell array of character vectors with values of
'absolute'
or
'relative'
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
InitialStrike
— Original strike price used for first reset date
0
(default) | nonnegative numeric | vector of nonnegative numeric
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
LocalCap
— Local cap
inf
(default) | nonnegative numeric | vector of nonnegative numeric
Local cap, specified as LocalCap
and a scalar
nonnegative numeric value or an
NINST
-by-1
vector of
nonnegative numeric values.
Data Types: double
LocalFloor
— Local floor
0
(default) | nonnegative numeric | vector of nonnegative numeric
Local floor, specified as LocalFloor
and a
scalar nonnegative numeric value or an
NINST
-by-1
vector of
nonnegative numeric values.
Data Types: double
GlobalCap
— Global cap
inf
(default) | nonnegative numeric | vector of nonnegative numeric
Global cap, specified as GlobalCap
and a scalar
nonnegative numeric value or an
NINST
-by-1
vector of
nonnegative numeric values.
Data Types: double
GlobalFloor
— Global floor
0
(default) | nonnegative numeric | vector of nonnegative numeric
Global floor, specified as GlobalFloor
and a
scalar nonnegative numeric value or an
NINST
-by-1
vector of
nonnegative numeric values.
Data Types: double
Name
— User-defined name for instrument
" "
(default) | string | string array | character vector | cell array of character vectors
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
Properties
ResetDates
— Reset dates when option strike is set
vector of datetimes
Reset dates when option strike is set, returned as a
1
-by-NumDates
vector of datetimes.
Data Types: datetime
OptionType
— Option type
"call"
(default) | string with value "call"
or "put"
Option type, returned as a scalar string.
Data Types: string
ReturnType
— Return calculation type
"absolute"
(default) | string with value "absolute"
or "relative"
Option type, returned as a scalar string.
Data Types: string
InitialStrike
— Original strike price used for first reset date
0
(default) | nonnegative numeric |
Original strike price used for first reset date, returned as a scalar nonnegative numeric value.
Data Types: double
ExerciseStyle
— Option exercise style
"European"
(default) | string with value "European"
Option exercise style, returned as a scalar string.
Data Types: string
LocalCap
— Local cap
inf
(default) | nonnegative numeric
Local cap, returned as a scalar nonnegative numeric value.
Data Types: double
LocalFloor
— Local floor
0
(default) | nonnegative numeric
Local floor, returned as a scalar nonnegative numeric value.
Data Types: double
GlobalCap
— Global cap
inf
(default) | nonnegative numeric
Global cap, returned as a scalar nonnegative numeric value.
Data Types: double
GlobalFloor
— Global floor
0
(default) | nonnegative numeric
Global floor, returned as a scalar nonnegative numeric value.
Data Types: double
Name
— User-defined name for instrument
" "
(default) | string | string array
User-defined name for the instrument, returned as a scalar string or an
NINST
-by-1
string array.
Data Types: string
Examples
Price Absolute Return for Cliquet
Instrument Using a BlackScholes
Model and AssetMonteCarlo
Pricer
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: [1x1 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 ... ] (1x366 datetime) NumTrials: 1000 RandomNumbers: [] Model: [1x1 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: [1x7 table] PricerData: [1x1 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
Price Absolute Return for Cliquet
Instrument Using RoughBergomi
Model and RoughVolMonteCarlo
Pricer
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: [1x1 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: [1x1 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: [1x7 table] PricerData: [1x1 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
Price Absolute Return for Cliquet
Instrument Using RoughHeston
Model and RoughVolMonteCarlo
Pricer
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: [1x1 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: [1x1 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: [1x8 table] PricerData: [1x1 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
Price Absolute Return for Cliquet
Instrument Using BlackScholes
Model and AssetMonteCarlo
Pricer with Quasi-Monte Carlo Simulation
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: [1x1 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 ... ] (1x366 datetime) NumTrials: 1000 RandomNumbers: [] Model: [1x1 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: [1x7 table] PricerData: [1x1 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
Price Relative Return for Cliquet
Instrument Using BlackScholes
Model and AssetMonteCarlo
Pricer
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: [1x1 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 ... ] (1x17 datetime) NumTrials: 5000 RandomNumbers: [] Model: [1x1 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.
Price Multiple Cliquet
Instruments Using BlackScholes
Model and Rubinstein
Pricer
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: [1x1 ratecurve] Model: [1x1 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
Cliquet Option
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 R2021bR2024b: Support for RoughHeston
model and RoughVolMonteCarlo
pricer
The Cliquet
instrument object supports pricing with a RoughHeston
model and
a RoughVolMonteCarlo
pricing method.
R2024a: Support for RoughBergomi
model and RoughVolMonteCarlo
pricer
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.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)