DoubleBarrier
DoubleBarrier instrument object
Description
Create and price a DoubleBarrier instrument object for one
of more Double Barrier instruments using this workflow:
Use
fininstrumentto create aDoubleBarrierinstrument object for one of more Double Barrier instruments.Use
finmodelto specify aBlackScholes,Heston,Bates, orMertonmodel for theDoubleBarrierinstrument object.Choose a pricing method.
When using a
BlackScholesmodel, usefinpricerto specify anIkedaKunitomoorVannaVolgapricing method for one or moreDoubleBarrierinstruments.When using a
BlackScholes,Heston,Bates, orMertonmodel, usefinpricerto specify aFiniteDifferenceor anAssetMonteCarlopricing method for one or moreDoubleBarrierinstruments.
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
DoubleBarrier instrument, see Choose Instruments, Models, and Pricers.
Creation
Syntax
Description
creates a DoubleBarrierOpt = fininstrument(InstrumentType,'Strike',strike_value,'ExerciseDate',exercise_date,'BarrierValue',barrier_value)DoubleBarrier instrument object for one of more
Double Barrier instruments by specifying InstrumentType
and sets properties using
the required name-value pair arguments Strike,
ExerciseDate, and
BarrierValue.
sets optional properties using
additional name-value pair arguments in addition to the required arguments
in the previous syntax. For example, DoubleBarrierOpt = fininstrument(___,Name,Value)DoubleBarrierOpt =
fininstrument("DoubleBarrier",'Strike',100,'ExerciseDate',datetime(2019,1,30),'BarrierValue',110,'OptionType',"put",'ExerciseStyle',"European",'BarrierType',"DKI",'Name',"doublebarrier_option")
creates a DoubleBarrier put option with a European
exercise. You can specify multiple name-value pair arguments.
Input Arguments
Instrument type, specified as a string with the value of
"DoubleBarrier", a character vector with the
value of 'DoubleBarrier', an
NINST-by-1 string array with
values of "DoubleBarrier", or an
NINST-by-1 cell array of
character vectors with values of
'DoubleBarrier'.
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.
Before R2021a, use commas to separate each name and value, and enclose
Name in quotes.
Example: DoubleBarrierOpt =
fininstrument("DoubleBarrier",'Strike',100,'ExerciseDate',datetime(2019,1,30),'BarrierValue',110,'OptionType',"put",'ExerciseStyle',"European",'BarrierType',"DKI",'Name',"doublebarrier_option")
Required DoubleBarrier Name-Value Pair Arguments
Option strike price value, specified as the comma-separated pair
consisting of 'Strike' and a scalar nonnegative
value or an NINST-by-1 vector
of nonnegative values.
Data Types: double
Option exercise date, specified as the comma-separated pair
consisting of 'ExerciseDate' and a scalar or an
NINST-by-1 vector using a
datetime array, string array, or date character vectors.
Note
For a European option, there is only one
ExerciseDate value on the option
expiry date.
To support existing code, DoubleBarrier also
accepts serial date numbers as inputs, but they are not recommended.
If you use date character vectors or strings, the format must be
recognizable by datetime because
the ExerciseDate property is stored as a
datetime.
Double barrier value, specified as the comma-separated pair
consisting of 'BarrierValue' and an
NINST-by-1 matrix of
numeric values, where each element is a
1-by-2 vector where the
first column is Barrier(1)(UB) and the second column is
Barrier(2)(LB). Barrier(1) must be greater than Barrier(2).
Data Types: double
Optional DoubleBarrier Name-Value Pair Arguments
Option type, specified as the comma-separated pair consisting of
'OptionType' 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
Option exercise style, specified as the comma-separated pair
consisting of 'ExerciseStyle' and a scalar string
or character vector or an
NINST-by-1 cell array of
character vectors or string array.
Note
For a DoubleBarrier option, the IkedaKunitomo pricer supports only a
"European" exercise and the FiniteDifference pricer supports an
"American" or
"European" exercise.
Data Types: string | cell | char
Double barrier type, specified as the comma-separated pair
consisting of 'BarrierType' and a scalar
character vector or string or an
NINST-by-1 cell array of
character vectors or string array with one of the following values:
'DKI'— Double knock-inThe
'DKI'option becomes effective when the price of the underlying asset reaches one of the barriers. It gives the option holder the right but not the obligation to buy or sell the underlying security at the strike price, if the underlying asset goes above or below the barrier levels during the life of the option.'DKO'— Double knock-outThe
'DKO'option gives the option holder the right but not the obligation to buy or sell the underlying security at the strike price, as long as the underlying asset remains between the barrier levels during the life of the option. This option terminates when the price of the underlying asset passes one of the barriers.
| Option | Barrier Type | Payoff If Any Barrier Crossed | Payoff If Barriers Not Crossed |
|---|---|---|---|
| Call/Put | Double Knock-in | Standard Call/Put | Worthless |
| Call/Put | Double Knock-out | Worthless | Standard Call/Put |
Data Types: char | cell | string
Barrier rebate, specified as the comma-separated pair consisting
of 'Rebate' and a numeric matrix.
For knock-in options, the
Rebateis paid at expiry.For knock-out options, the
Rebateis paid if the Upper Barrier(1)(UB) is hit and the second value is paid if the Lower Barrier(2)(LB) is hit.
Data Types: double
User-defined name for the instrument, specified as the
comma-separated pair consisting of '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
Double Barrier instrument, returned as a
DoubleBarrier object.
Properties
Option strike price value, returned as a scalar nonnegative value or an
NINST-by-1 vector of nonnegative
values.
Data Types: double
Option exercise date, returned as a datetime or an
NINST-by-1 vector of
datetimes.
Data Types: datetime
Double barrier value, returned as a numeric matrix.
Data Types: double
Option type, returned as a scalar string or an
NINST-by-1 string array with the
values "call" or "put".
Data Types: string
Option exercise style, returned as a scalar string or an
NINST-by-1 string array with the
values of "European" or "American".
Data Types: string
Double barrier type, returned as a scalar string or an
NINST-by-1 string array with the
values of "DKI" or "DKO".
Data Types: string
Barrier rebate, returned as a numeric matrix.
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 an DoubleBarrier instrument when you use a BlackScholes model and a FiniteDifference pricing method.
Create DoubleBarrier Instrument Object
Use fininstrument to create a DoubleBarrier instrument object.
DoubleBarrierOpt = fininstrument("DoubleBarrier",'Strike',75,'ExerciseDate',datetime(2019,1,1),'OptionType',"call",'ExerciseStyle',"american",'BarrierType',"DKO",'BarrierValue',[110 80],'Name',"doublebarrier_option")
DoubleBarrierOpt =
DoubleBarrier with properties:
OptionType: "call"
Strike: 75
BarrierValue: [110 80]
ExerciseStyle: "american"
ExerciseDate: 01-Jan-2019
BarrierType: "dko"
Rebate: [0 0]
Name: "doublebarrier_option"
Create BlackScholes Model Object
Use finmodel to create a BlackScholes model object.
BlackScholesModel = finmodel("BlackScholes",'Volatility',0.30)
BlackScholesModel =
BlackScholes with properties:
Volatility: 0.3000
Correlation: 1
Create ratecurve Object
Create a flat ratecurve object using ratecurve.
Settle = datetime(2018,1,1); Maturity = datetime(2023,1,1); Rate = 0.035; myRC = ratecurve('zero',Settle,Maturity,Rate,'Basis',1)
myRC =
ratecurve with properties:
Type: "zero"
Compounding: -1
Basis: 1
Dates: 01-Jan-2023
Rates: 0.0350
Settle: 01-Jan-2018
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create FiniteDifference Pricer Object
Use finpricer to create a FiniteDifference pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.
outPricer = finpricer("FiniteDifference",'Model',BlackScholesModel,'DiscountCurve',myRC,'SpotPrice',100)
outPricer =
FiniteDifference with properties:
DiscountCurve: [1×1 ratecurve]
Model: [1×1 finmodel.BlackScholes]
SpotPrice: 100
GridProperties: [1×1 struct]
DividendType: "continuous"
DividendValue: 0
Price DoubleBarrier Instrument
Use price to compute the price and sensitivities for the DoubleBarrier instrument.
[Price, outPR] = price(outPricer,DoubleBarrierOpt,["all"])Price = 25
outPR =
priceresult with properties:
Results: [1×7 table]
PricerData: [1×1 struct]
outPR.Results
ans=1×7 table
Price Delta Gamma Lambda Theta Rho Vega
_____ _____ _____ ______ __________ ___ ____
25 1 0 4 2.2737e-13 0 0
This example shows the workflow to price multiple DoubleBarrier instruments when you use a BlackScholes model and a FiniteDifference pricing method.
Create DoubleBarrier Instrument Object
Use fininstrument to create a DoubleBarrier instrument object for three Double Barrier instruments.
DoubleBarrierOpt = fininstrument("DoubleBarrier",'Strike',[75 ; 85 ; 95],'ExerciseDate',datetime([2019,1,1 ; 2019,1,2 ; 2019,1,3]),'OptionType',"call",'ExerciseStyle',"american",'BarrierType',"DKO",'BarrierValue',[110 80],'Name',"doublebarrier_option")
DoubleBarrierOpt=3×1 DoubleBarrier array with properties:
OptionType
Strike
BarrierValue
ExerciseStyle
ExerciseDate
BarrierType
Rebate
Name
Create BlackScholes Model Object
Use finmodel to create a BlackScholes model object.
BlackScholesModel = finmodel("BlackScholes",'Volatility',0.30)
BlackScholesModel =
BlackScholes with properties:
Volatility: 0.3000
Correlation: 1
Create ratecurve Object
Create a flat ratecurve object using ratecurve.
Settle = datetime(2018,1,1); Maturity = datetime(2023,1,1); Rate = 0.035; myRC = ratecurve('zero',Settle,Maturity,Rate,'Basis',1)
myRC =
ratecurve with properties:
Type: "zero"
Compounding: -1
Basis: 1
Dates: 01-Jan-2023
Rates: 0.0350
Settle: 01-Jan-2018
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create FiniteDifference Pricer Object
Use finpricer to create a FiniteDifference pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.
outPricer = finpricer("FiniteDifference",'Model',BlackScholesModel,'DiscountCurve',myRC,'SpotPrice',100)
outPricer =
FiniteDifference with properties:
DiscountCurve: [1×1 ratecurve]
Model: [1×1 finmodel.BlackScholes]
SpotPrice: 100
GridProperties: [1×1 struct]
DividendType: "continuous"
DividendValue: 0
Price DoubleBarrier Instruments
Use price to compute the prices and sensitivities for the DoubleBarrier instruments.
[Price, outPR] = price(outPricer,DoubleBarrierOpt,["all"])Price = 3×1
25.0000
15.6821
7.8957
outPR=3×1 priceresult array with properties:
Results
PricerData
outPR.Results
ans=1×7 table
Price Delta Gamma Lambda Theta Rho Vega
_____ _____ _____ ______ __________ ___ ____
25 1 0 4 2.2737e-13 0 0
ans=1×7 table
Price Delta Gamma Lambda Theta Rho Vega
______ ______ _______ ______ _______ _____ _______
15.682 0.7196 0.28626 4.5887 0.88484 6.467 -6.3778
ans=1×7 table
Price Delta Gamma Lambda Theta Rho Vega
______ _______ __________ ______ _________ ______ _______
7.8957 0.36913 -0.0020435 4.675 -0.057311 4.3022 -6.9367
This example shows the workflow to price a DoubleBarrier instrument when you use a Heston model and an AssetMonteCarlo pricing method.
Create DoubleBarrier Instrument Object
Use fininstrument to create a DoubleBarrier instrument object.
DoubleBarrierOpt = fininstrument("DoubleBarrier",'Strike',75,'ExerciseDate',datetime(2020,9,15),'OptionType',"call",'ExerciseStyle',"american",'BarrierType',"DKO",'BarrierValue',[110 80],'Name',"doublebarrier_option")
DoubleBarrierOpt =
DoubleBarrier with properties:
OptionType: "call"
Strike: 75
BarrierValue: [110 80]
ExerciseStyle: "american"
ExerciseDate: 15-Sep-2020
BarrierType: "dko"
Rebate: [0 0]
Name: "doublebarrier_option"
Create Heston Model Object
Use finmodel to create a Heston model object.
HestonModel = finmodel("Heston",'V0',0.032,'ThetaV',0.1,'Kappa',0.003,'SigmaV',0.2,'RhoSV',0.9)
HestonModel =
Heston with properties:
V0: 0.0320
ThetaV: 0.1000
Kappa: 0.0030
SigmaV: 0.2000
RhoSV: 0.9000
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 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',myRC,"Model",HestonModel,'SpotPrice',102,'simulationDates',datetime(2020,9,15))
outPricer =
HestonMonteCarlo with properties:
DiscountCurve: [1×1 ratecurve]
SpotPrice: 102
SimulationDates: 15-Sep-2020
NumTrials: 1000
RandomNumbers: []
Model: [1×1 finmodel.Heston]
DividendType: "continuous"
DividendValue: 0
MonteCarloMethod: "standard"
BrownianMotionMethod: "standard"
Price DoubleBarrier Instrument
Use price to compute the price and sensitivities for the DoubleBarrier instrument.
[Price, outPR] = price(outPricer,DoubleBarrierOpt,["all"])Price = 32.6351
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
______ ___________ __________ __________ _______ ______ _______ _________
32.635 -0.00089196 -0.0025511 -0.0027878 -76.828 1.1334 -0.2616 -0.002986
This example shows the workflow to price a DoubleBarrier instrument when you use a Heston model and an AssetMonteCarlo pricing method with quasi-Monte Carlo simulation..
Create DoubleBarrier Instrument Object
Use fininstrument to create a DoubleBarrier instrument object.
DoubleBarrierOpt = fininstrument("DoubleBarrier",'Strike',75,'ExerciseDate',datetime(2020,9,15),'OptionType',"call",'ExerciseStyle',"american",'BarrierType',"DKO",'BarrierValue',[110 80],'Name',"doublebarrier_option")
DoubleBarrierOpt =
DoubleBarrier with properties:
OptionType: "call"
Strike: 75
BarrierValue: [110 80]
ExerciseStyle: "american"
ExerciseDate: 15-Sep-2020
BarrierType: "dko"
Rebate: [0 0]
Name: "doublebarrier_option"
Create Heston Model Object
Use finmodel to create a Heston model object.
HestonModel = finmodel("Heston",'V0',0.032,'ThetaV',0.1,'Kappa',0.003,'SigmaV',0.2,'RhoSV',0.9)
HestonModel =
Heston with properties:
V0: 0.0320
ThetaV: 0.1000
Kappa: 0.0030
SigmaV: 0.2000
RhoSV: 0.9000
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 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',myRC,"Model",HestonModel,'SpotPrice',102,'simulationDates',datetime(2020,9,15),'NumTrials',1e3, ... 'MonteCarloMethod',"quasi",'BrownianMotionMethod',"brownian-bridge")
outPricer =
HestonMonteCarlo with properties:
DiscountCurve: [1×1 ratecurve]
SpotPrice: 102
SimulationDates: 15-Sep-2020
NumTrials: 1000
RandomNumbers: []
Model: [1×1 finmodel.Heston]
DividendType: "continuous"
DividendValue: 0
MonteCarloMethod: "quasi"
BrownianMotionMethod: "brownian-bridge"
Price DoubleBarrier Instrument
Use price to compute the price and sensitivities for the DoubleBarrier instrument.
[Price, outPR] = price(outPricer,DoubleBarrierOpt,"all")Price = 32.6329
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
______ _____ _____ ______ _______ ______ ____ ______
32.633 0 0 0 -65.286 1.1398 0 0
This example shows the workflow to price a DoubleBarrier instrument when you use a BlackScholes model and an AssetMonteCarlo pricing method.
Create DoubleBarrier Instrument Object
Use fininstrument to create a DoubleBarrier instrument object.
DoubleBarrierOpt = fininstrument("DoubleBarrier",'Strike',100,'ExerciseDate',datetime(2020,8,15),'OptionType',"call",'ExerciseStyle',"american",'BarrierType',"DKO",'BarrierValue',[110 80],'Name',"doublebarrier_option")
DoubleBarrierOpt =
DoubleBarrier with properties:
OptionType: "call"
Strike: 100
BarrierValue: [110 80]
ExerciseStyle: "american"
ExerciseDate: 15-Aug-2020
BarrierType: "dko"
Rebate: [0 0]
Name: "doublebarrier_option"
Create BlackScholes Model Object
Use finmodel to create a BlackScholes model object.
BlackScholesModel = finmodel("BlackScholes","Volatility",.3)
BlackScholesModel =
BlackScholes with properties:
Volatility: 0.3000
Correlation: 1
Create ratecurve Object
Create a flat ratecurve object using ratecurve.
Settle = datetime(2017,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-2017
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create AssetMonteCarlo Pricer Object
Use finpricer to create an AssetMonteCarlo pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.
ExerciseDate = datetime(2020,08,15); Settle = datetime(2017,09,15); outPricer = finpricer("AssetMonteCarlo","DiscountCurve",myRC,"Model",BlackScholesModel,'SpotPrice',100,'simulationDates', Settle+days(1):days(1):ExerciseDate);
Price DoubleBarrier Instrument
Use price to compute the price and sensitivities for the DoubleBarrier instrument.
[Price, outPR] = price(outPricer,DoubleBarrierOpt,["all"])Price = 6.9667
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
______ _______ _________ ______ _______ ______ _______
6.9667 0.26875 -0.096337 3.8576 0.39855 9.5406 -1.2907
This example shows the workflow to price a DoubleBarrier instrument when you use a BlackScholes model and an IkedaKunitomo pricing method.
Create DoubleBarrier Instrument Object
Use fininstrument to create a DoubleBarrier instrument object.
DoubleBarrierOpt = fininstrument("DoubleBarrier",'Strike',100,'ExerciseDate',datetime(2020,8,15),'OptionType',"call",'ExerciseStyle',"European",'BarrierType',"DKO",'BarrierValue',[110 80],'Name',"doublebarrier_option")
DoubleBarrierOpt =
DoubleBarrier with properties:
OptionType: "call"
Strike: 100
BarrierValue: [110 80]
ExerciseStyle: "european"
ExerciseDate: 15-Aug-2020
BarrierType: "dko"
Rebate: [0 0]
Name: "doublebarrier_option"
Create BlackScholes Model Object
Use finmodel to create a BlackScholes model object.
BlackScholesModel = finmodel("BlackScholes","Volatility",.3)
BlackScholesModel =
BlackScholes with properties:
Volatility: 0.3000
Correlation: 1
Create ratecurve Object
Create a flat ratecurve object using ratecurve.
Settle = datetime(2017,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-2017
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create IkedaKunitomo Pricer Object
Use finpricer to create an IkedaKunitomo pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.
outPricer = finpricer("Analytic","DiscountCurve",myRC,"Model",BlackScholesModel,'SpotPrice',100,'Curvature',[0.03 -0.03],'DividendValue',0.029,"PricingMethod","IkedaKunitomo")
outPricer =
IkedaKunitomo with properties:
DiscountCurve: [1×1 ratecurve]
Model: [1×1 finmodel.BlackScholes]
SpotPrice: 100
DividendValue: 0.0290
DividendType: "continuous"
Curvature: [0.0300 -0.0300]
Price DoubleBarrier Instrument
Use price to compute the price and sensitivities for the DoubleBarrier instrument.
[Price, outPR] = price(outPricer,DoubleBarrierOpt,["all"])Price = 5.6848e-04
outPR =
priceresult with properties:
Results: [1×7 table]
PricerData: []
outPR.Results
ans=1×7 table
Price Delta Gamma Lambda Vega Theta Rho
__________ ___________ ___________ _______ _________ _________ ___________
0.00056848 -3.7713e-05 -4.2071e-06 -6.6339 -0.031332 0.0008912 -0.00035113
This example shows the workflow to price a DoubleBarrier instrument when you use a BlackScholes model and a VannaVolga pricing method.
Create DoubleBarrier Instrument Object
Use fininstrument to create a DoubleBarrier instrument object.
DoubleBarrierOpt = fininstrument("DoubleBarrier",'Strike',100,'ExerciseDate',datetime(2020,8,15),'OptionType',"call",'ExerciseStyle',"European",'BarrierType',"DKO",'BarrierValue',[110 80],'Name',"doublebarrier_option")
DoubleBarrierOpt =
DoubleBarrier with properties:
OptionType: "call"
Strike: 100
BarrierValue: [110 80]
ExerciseStyle: "european"
ExerciseDate: 15-Aug-2020
BarrierType: "dko"
Rebate: [0 0]
Name: "doublebarrier_option"
Create BlackScholes Model Object
Use finmodel to create a BlackScholes model object.
BlackScholesModel = finmodel("BlackScholes","Volatility",0.02)
BlackScholesModel =
BlackScholes with properties:
Volatility: 0.0200
Correlation: 1
Create ratecurve Object
Create a flat ratecurve object using ratecurve.
Settle = datetime(2019,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-2019
InterpMethod: "linear"
ShortExtrapMethod: "next"
LongExtrapMethod: "previous"
Create VannaVolga Pricer Object
Use finpricer to create a VannaVolga pricer object and use the ratecurve object for the 'DiscountCurve' name-value pair argument.
VolRR = -0.0045; VolBF = 0.0037; RateF = 0.0210; outPricer = finpricer("VannaVolga","DiscountCurve",myRC,"Model",BlackScholesModel,'SpotPrice',100,'DividendValue',RateF,'VolatilityRR',VolRR,'VolatilityBF',VolBF)
outPricer =
VannaVolga with properties:
DiscountCurve: [1×1 ratecurve]
Model: [1×1 finmodel.BlackScholes]
SpotPrice: 100
DividendType: "continuous"
DividendValue: 0.0210
VolatilityRR: -0.0045
VolatilityBF: 0.0037
Price DoubleBarrier Instrument
Use price to compute the price and sensitivities for the DoubleBarrier instrument.
[Price, outPR] = price(outPricer,DoubleBarrierOpt,["all"])Price = 1.6450
outPR =
priceresult with properties:
Results: [1×7 table]
PricerData: [1×1 struct]
outPR.Results
ans=1×7 table
Price Delta Gamma Lambda Vega Theta Rho
_____ _______ ______ ______ ______ _______ ______
1.645 0.82818 75.662 50.346 14.697 -1.3145 74.666
More About
A double barrier option is similar to the standard single barrier option except that they have two barrier levels: a lower barrier (LB) and an upper barrier (UB).
The payoff for a double barrier option depends on whether the underlying asset remains between the barrier levels during the life of the option. Double barrier options are less expensive than single barrier options as the probability of being knocked out is higher. Because of this, double barrier options allow investors to achieve reduction in the option premiums and match an investor’s belief about the future movement of the underlying price process.
There are two types of double barrier options:
Double knock-in
This option becomes effective when the price of the underlying asset reaches one of the barriers. It gives the option holder the right but not the obligation to buy or sell the underlying security at the strike price, if the underlying asset goes above or below the barrier levels during the life of the option.
Double knock-out
This option gives the option holder the right but not the obligation to buy or sell the underlying security at the strike price, as long as the underlying asset remains between the barrier levels during the life of the option. This option terminates when the price of the underlying asset passes one of the barriers.
The payoff for this type of option depends on whether the underlying asset crosses
the predetermined trigger value (barrier level), indicated by
BarrierValue, during the life of the option. If the option
cannot be exercised because the barrier level either has or has not been reached, a
fixed rebate amount is paid. For more information, see Double Barrier Option.
Tips
After creating an DoubleBarrier instrument object with an
ExerciseStyle set to "American", you can
modify the ExerciseStyle property to change it to
"European" using dot
notation.
DoubleBarrier.ExerciseStyle = "European"Strike and
ExerciseDate value and an American option has a 2-element
vector for Strike and ExerciseDate values,
when you change to ExerciseStyle from "American"
to "European", the Strike and
ExerciseDate values become the last element in the 2-element
vector for the Strike and ExerciseDate
values.Version History
Introduced in R2020bAlthough DoubleBarrier supports serial date numbers,
datetime values are recommended instead. The
datetime data type provides flexible date and time
formats, storage out to nanosecond precision, and properties to account for time
zones and daylight saving time.
To convert serial date numbers or text to datetime values, use the datetime function. For example:
t = datetime(738427.656845093,"ConvertFrom","datenum"); y = year(t)
y =
2021
There are no plans to remove support for serial date number inputs.
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.
Website auswählen
Wählen Sie eine Website aus, um übersetzte Inhalte (sofern verfügbar) sowie lokale Veranstaltungen und Angebote anzuzeigen. Auf der Grundlage Ihres Standorts empfehlen wir Ihnen die folgende Auswahl: .
Sie können auch eine Website aus der folgenden Liste auswählen:
So erhalten Sie die bestmögliche Leistung auf der Website
Wählen Sie für die bestmögliche Website-Leistung die Website für China (auf Chinesisch oder Englisch). Andere landesspezifische Websites von MathWorks sind für Besuche von Ihrem Standort aus nicht optimiert.
Amerika
- 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)