VannaVolga
Create VannaVolga
pricer object for
Vanilla
, Barrier
,
DoubleBarrier
, Touch
, or
DoubleTouch
instrument using BlackScholes
model
Since R2020b
Description
Create and price a Vanilla
, Barrier
,
DoubleBarrier
, Touch
, or
DoubleTouch
instrument object with a
BlackScholes
model and a VannaVolga
pricing
method using this workflow:
Use
fininstrument
to create aVanilla
,Barrier
,DoubleBarrier
,Touch
, orDoubleTouch
instrument object.Use
finmodel
to specify theBlackScholes
model for theVanilla
,Barrier
,DoubleBarrier
,Touch
, orDoubleTouch
instrument object.Use
finpricer
to specify theVannaVolga
pricer object for theVanilla
,Barrier
,DoubleBarrier
,Touch
, orDoubleTouch
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 instruments, models, and pricing methods for a
Vanilla
, Barrier
,
DoubleBarrier
, Touch
, or
DoubleTouch
instrument, see Choose Instruments, Models, and Pricers.
Creation
Description
creates a VannaVolgaPricerObj
= finpricer(PricerType
,'DiscountCurve
',ratecurve_obj,'Model
',model,'SpotPrice
',spot_price,'VolatilityRR
',volatilityrr_value,'VolatilityBF
',volatilitybf_value)VannaVolga
pricer object by specifying
PricerType
and sets properties using the
required name-value pair arguments DiscountCurve
,
Model
, SpotPrice
,
VolatilityRR
, and
VolatilityBF
. For example, VannaVolgaPricerObj
=
finpricer("VannaVolga",'DiscountCurve',ratecurve_obj,'Model',BSModel,'SpotPrice',Spot,'VolatilityRR',VolRR,'VolatilityBF',VolBF)
creates a VannaVolga
pricer object.
sets optional properties using additional
name-value pairs in addition to the required arguments in the previous syntax.
For example, VannaVolgaPricerObj
= finpricer(___,Name,Value
)VannaVolgaPricerObj =
finpricer("VannaVolga",'DiscountCurve',ratecurve_obj,'Model',BSModel,'SpotPrice',Spot,'VolatilityRR',VolRR,'VolatilityBF',VolBF,'DividendValue',0.0210)
creates a VannaVolga
pricer object. You can specify multiple
name-value pair arguments.
Input Arguments
Pricer type, specified as a string with the value
"VannaVolga"
or a character vector with the value
'VannaVolga'
.
Data Types: char
| string
Name-Value Arguments
Specify required
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: VannaVolgaPricerObj =
finpricer("VannaVolga",'DiscountCurve',ratecurve_obj,'Model',BSModel,'SpotPrice',Spot,'VolatilityRR',VolRR,'VolatilityBF',VolBF,'DividendValue',0.0210)
ratecurve
object for discounting cash flows,
specified as the comma-separated pair consisting of
'DiscountCurve'
and the name of a previously
created ratecurve
object.
Data Types: object
Model object, specified as the comma-separated pair consisting of
'Model'
and the name of a previously created
BlackScholes
model object using finmodel
.
Data Types: object
Current price of the underlying asset, specified as the
comma-separated pair consisting of 'SpotPrice'
and a scalar numeric.
Data Types: double
25-delta risk reversal (RR) volatility, specified as the
comma-separated pair consisting of 'VolatilityRR'
and a scalar numeric.
Data Types: double
25-delta butterfly (BF) volatility, specified as the
comma-separated pair consisting of 'VolatilityBF'
and a scalar numeric.
Data Types: double
Optional VannaVolga
Name-Value Pair Arguments
Dividend type, specified as the comma-separated pair consisting of
'DividendType'
and a string or character
vector for a continuous dividend yield.
Data Types: char
| string
Continuous dividend yield, specified as the comma-separated pair
consisting of 'DividendValue'
and a scalar
numeric.
Note
When pricing currency (FX) options, specify the optional
input argument 'DividendValue'
as the
continuously compounded risk-free interest rate in the
foreign country.
Data Types: double
Output Arguments
Vanna-Volga pricer, returned as a VannaVolga
object.
Properties
ratecurve
object for discounting cash flows, returned
as a ratecurve
object.
Data Types: object
Model, returned as a BlackScholes
model object.
Data Types: object
Current price of the underlying asset, returned as a scalar numeric.
Data Types: double
25-delta risk reversal (RR) volatility, returned as a scalar numeric.
Data Types: double
25-delta butterfly (BF) volatility, returned as a scalar numeric.
Data Types: double
This property is read-only.
Dividend type, returned as a string.
Data Types: string
Continuous dividend yield, returned as a scalar numeric.
Data Types: double
Object Functions
price | Compute price for equity instrument with VannaVolga
pricer |
Examples
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
The Vanna Volga pricing method is an empirical procedure based on adding an analytically derived correction to the Black-Scholes price of the instrument.
The Vanna-Volga method consists of adjusting the Black-Scholes theoretical value (BSTV) by the cost of a portfolio which hedges three main risks associated to the volatility of the option: the Vega, the Vanna and the Volga.
The general formulation of the Vanna-Volga method suggests that the Vega, Vanna, and Volga values can be replicated by the weighted sum of at-the-money (ATM), risk-reversal (RR), and butterfly (BF) strategies.
Here, the weights are obtained by solving the system x = Aω
Given this replication, the Vanna-Volga method adjusts the Black-Scholes price of the option by the smile cost of the above weighted sum:
The resulting correction or overhedge turns out to be too large. So, the option value is modified as follows:
ρ is the risk-neutral probability of not hitting the barrier.
References
[1] Bossens, Frédéric, Grégory Rayée, Nikos S. Skantzos, and Griselda Deelstra. "Vanna-Volga Methods Applied to FX Derivatives: From Theory to Market Practice." International Journal of Theoretical and Applied Finance. 13, no. 08 (December 2010): 1293–1324.
[2] Castagna, Antonio, and Fabio Mercurio. "The Vanna-Volga Method for Implied Volatilities." Risk. 20 (January 2007): 106–111.
[3] Castagna, Antonio, and Fabio Mercurio. "Consistent Pricing of FX Options." Working Papers Series, Banca IMI, 2006.
[4] Fisher, Travis. "Variations on the Vanna-Volga Adjustment." Bloomberg Research Paper, 2007.
[5] Wystup, Uwe. FX Options and Structured Products. Hoboken, NJ: Wiley Finance, 2006.
Version History
Introduced in R2020b
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)