# 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:

1. Use `fininstrument` to create a `Vanilla`, `Barrier`, `DoubleBarrier`, `Touch`, or `DoubleTouch` instrument object.

2. Use `finmodel` to specify the `BlackScholes` model for the `Vanilla`, `Barrier`, `DoubleBarrier`, `Touch`, or `DoubleTouch` instrument.

3. Use `finpricer` to specify the `VannaVolga` pricer object for the `Vanilla`, `Barrier`, `DoubleBarrier`, `Touch`, or `DoubleTouch` instrument.

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

### Syntax

``VannaVolgaPricerObj = finpricer(PricerType,'DiscountCurve',ratecurve_obj,'Model',model,'SpotPrice',spot_price,'VolatilityRR',volatilityrr_value,'VolatilityBF',volatilitybf_value)``

### Description

example

````VannaVolgaPricerObj = finpricer(PricerType,'DiscountCurve',ratecurve_obj,'Model',model,'SpotPrice',spot_price,'VolatilityRR',volatilityrr_value,'VolatilityBF',volatilitybf_value)` creates a `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,'DividendValue',RateF)``` creates a `VannaVolga` pricer object.```

example

````VannaVolgaPricerObj = finpricer(___,Name,Value)` sets optional properties using additional name-value pairs in addition to the required arguments in the previous syntax. For example, ```VannaVolgaPricerObj = finpricer("VannaVolga",'DiscountCurve',ratecurve_obj,'Model',BSModel,'SpotPrice',Spot,'VolatilityRR',VolRR,'VolatilityBF',VolBF,'DividendValue',RateF)``` creates a `VannaVolga` pricer object. You can specify multiple name-value pair arguments.```

### Input Arguments

expand all

Pricer type, specified as a string with the value `"VannaVolga"` or a character vector with the value `'VannaVolga'`.

Data Types: `char` | `string`

Required `VannaVolga` Name-Value Pair Arguments

Specify required comma-separated pairs of `Name,Value` arguments. `Name` is the argument name and `Value` is the corresponding value. `Name` must appear inside quotes. You can specify several name and value pair arguments in any order as `Name1,Value1,...,NameN,ValueN`.

Example: ```VannaVolgaPricerObj = finpricer("VannaVolga",'DiscountCurve',ratecurve_obj,'Model',BSModel,'SpotPrice',Spot,'VolatilityRR',VolRR,'VolatilityBF',VolBF,'DividendValue',RateF)```

`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

expand all

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`

## Properties

expand all

`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`

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

collapse all

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: [1x1 ratecurve] Model: [1x1 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: [1x7 table] PricerData: [1x1 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 ```

expand all

## 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.

### Functions

Introduced in R2020b