Skip to content
All library documents

Monte Carlo Variance and Volatility Swap Pricing in the Variance-Gamma Model

Article Quant Q&A · Author: Frido

Summary

The document compares Monte Carlo estimates for discretely monitored variance and volatility swaps under a Variance-Gamma model. It defines the variance swap value as the square root of expected realized variance, while the volatility swap value is the expectation of the square root of realized variance. The Octave example simulates daily gamma time changes and Gaussian shocks, then calculates both quantities from squared log returns.

The reported variance swap estimate is close to the stated continuous-monitoring benchmark, while the volatility swap estimate is lower. The post asks readers to identify a possible error but does not provide a resolution. The distinction between the two formulas is central: taking a square root before averaging generally produces a lower value than taking it after averaging. The example also concerns a finite monitoring schedule and a particular parameter set, so its discrepancy alone does not establish a coding error. It does not report confidence intervals or a systematic convergence analysis.

Key ideas

  • The variance swap expression takes the square root after averaging realized variance.
  • The volatility swap expression averages the square root of realized variance across simulations.
  • The example uses simulated gamma time changes and normal shocks to generate log returns.
  • The reported discrete-monitoring estimates differ from the stated continuous-monitoring benchmarks, especially for the volatility swap.
  • The post raises a pricing question but does not resolve whether the discrepancy comes from implementation or monitoring effects.

Tags

Full text
# MC pricing of varswap and volswap in Variance-Gamma model


# MC pricing of varswap and volswap in Variance-Gamma model












I am trying to price a discretely monitored (daily) varswap and volswap in the variance gamma model (see Madan, Carr and Chang paper for more details about VG model).

I expect the values to be close to exact continuously monitored values, which for the parameters I use should be varswap = 12.14% and volswap = 11.64%.

The MC simulation indeed gives varswap value close to exact value, but the volswap is consistently underestimated at 11.06%. Granted I'm not using control variates, but the difference is too large. Something is not right but I can't figure out what it is.

In the VG model I define a varswap as $$ \sqrt{E \left[ \frac1T \sum_i ( \log S_{i+1}/S_i )^2 \right]} $$ and the volswap as $$ E \left[\sqrt{ \frac1T \sum_i ( \log S_{i+1}/S_i )^2 }\right] $$

If anybody sees the error I'd be happy to hear! The code below is Octave (free Matlab) code.

```
tic

pkg load statistics;
output_precision(7);

S0 = 1;  %Hence ln S0 = 0
r = 0; q = 0;
T = 0.5;

sigma = 0.1214;
nu = 0.1686;
theta = -0.5*sigma^2; 

nsteps = 180; nsims = 500000;

dt = T/nsteps;

a = dt/nu; 
b = nu;

vgmat = gamrnd(a,b,nsteps,nsims);
smat = randn(nsteps,nsims);

omega = (1/nu)*log(1-theta*nu-0.5*sigma^2*nu)
mat = ((r- q + omega)*dt + theta*vgmat + sigma*sqrt(vgmat).*smat).^2;

varsw = sqrt(mean((1/T)*sum(mat(:,:))))
volsw = mean(sqrt((1/T)*sum(mat(:,:))))

toc
```

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.