Quantitative finance collector
C++ Matlab VBA/Excel Java Mathematica R/Splus Net Code Site Other
Jan 5

Vanna Volga Method

Posted by abiao at 22:11 | Code » Matlab | Comments(0) | Reads(16246)
The vanna volga method is a popular pricing model for implied volatilities, especially for foreign exchange options, it is an empirical procedure that can be applied to "draw" an implied volatility smile curve from three given quotes (reversal, ATM and butterfly) for a certan time to maturity. Empirical research shows the vanna volga method has a comparable pricing performance with some stochastic volatility model, for example, Castagna and Mercurio (2007) show the implied volatility curve of vanna volga method outperforms that of Malz (1997), and performs equally well as of SABR (2002).

By building a self-financing portfolio consisting a unit of option at strike K, -delta1 units of underlying asset, and -xi units of options at strike ki, Castagna and Mercurio (2007) calculate the weight xi for three given quotes with the help of Ito's lemma and then approximate the European option value under vanna volga method, as stated in the paper, VV pricing model has several advantages: "it has a clear financial rationale supporting, based on the hedging argument...; it allows for an automatic calibration to the main volatility data...; ... it can be extended to any European-style derivative..."

Below is a simple Matlab code to price a call option based on Castagna and Mercurio (2007):
% option price under Vanna volga model for any strike k
% sigma2 is ATM implied vol, k2 is ATM strike
s = 1.205;
t = 94/365;
r = -log(0.9902752)/t;
rf = -log(0.9945049)/t;
sigma1 = 0.0979;
sigma3 = 0.0929;
sigma2 = 0.09375;
k1 = 1.172;
k3 = 1.2504;
k2 = 1.2115;
k = 1.24;
Vega1 = Vega(s,k1,r,t,sigma2,rf);
Vega3 = Vega(s,k3,r,t,sigma2,rf);
Vegak = Vega(s,k,r,t,sigma2,rf);
x1 = Vegak*log(k2/k)*log(k3/k)/(Vega1*log(k2/k1)*log(k3/k1));
x3 = Vegak*log(k/k1)*log(k/k2)/(Vega3*log(k3/k1)*log(k3/k2));
price = blsprice(s,k,r,t,sigma2,rf)+x1*(blsprice(s,k1,r,t,sigma1,rf)...
    -blsprice(s,k1,r,t,sigma2,rf))+x3*(blsprice(s,k3,r,t,sigma3,rf)...
    -blsprice(s,k3,r,t,sigma2,rf));

where Vega is a function to compute vega under black scholes formula
function VegaValue = Vega(s,k,r,t,sigma,rf)
d1 = (log(s/k)+(r-rf+0.5*sigma^2)*t)/(sigma*sqrt(t));
VegaValue = s*exp(-rf*t)*sqrt(t)*normpdf(d1,0,1);


Implied volatilities curve is therefore easily achieved by inverting VV pricing model. Interested ppl please refer to http://www.risk.net/risk/technical-paper/1506580/the-vanna-volga-method-implied-volatilities or an advanced one www.mathfinance.de/wystup/papers/wystup_vannavolga_eqf.pdf


Tags:
Add a comment
Emots
Enable HTML
Enable UBB
Enable Emots
Hidden
Remember
Nickname   Password   Optional
Site URI   Email   [Register]