VannaVolga
Create VannaVolga pricer object for
Vanilla, Barrier,
DoubleBarrier, Touch, or
DoubleTouch instrument using BlackScholes
model
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
fininstrumentto create aVanilla,Barrier,DoubleBarrier,Touch, orDoubleTouchinstrument object.Use
finmodelto specify theBlackScholesmodel for theVanilla,Barrier,DoubleBarrier,Touch, orDoubleTouchinstrument object.Use
finpricerto specify theVannaVolgapricer object for theVanilla,Barrier,DoubleBarrier,Touch, orDoubleTouchinstrument 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.
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)