The Variance Gamma Model
The variance gamma (VG) model replaces calendar time in Brownian motion with a random gamma clock. Trading time sometimes advances unusually fast and sometimes slowly; conditional on that clock, returns are Gaussian, but unconditionally they are asymmetric and heavy tailed. The construction is analytically convenient because it is a pure-jump Levy process with a closed-form characteristic function.
VG is useful when Black-Scholes underprices moderate and far-out-of-the-money options while a finite-activity jump model produces visibly artificial gaps. It is not a universal volatility model. Its independent increments mean that it does not create persistent volatility states unless it is extended with stochastic parameters or a time change.
Gamma-subordinated Brownian motion
Let G_t be a gamma process with mean t and variance nu t. Define:
X_t = theta G_t + sigma W_(G_t)
G_t ~ Gamma(shape=t/nu, scale=nu)
Here theta controls skew, sigma controls conditional dispersion, and nu controls the variability of business time and therefore tail thickness. As nu tends to zero, G_t approaches deterministic time and VG approaches a Brownian motion with drift theta and volatility sigma.
| Parameter | Primary role | Typical smile effect |
|---|---|---|
sigma | conditional Gaussian scale | overall dispersion |
theta | directional asymmetry | skew direction |
nu | clock variability | excess kurtosis, wings |
T | aggregation horizon | shape changes with maturity |
The characteristic exponent under this convention is:
psi(u) = -(1/nu) log(1 - i theta nu u + 0.5 sigma^2 nu u^2)
phi_T(u) = exp(T psi(u))
Conventions vary across vendors and papers. Some parameterizations absorb scale into the gamma process or use C, G, and M. Porting parameters without the exact characteristic exponent is a common and expensive source of calibration errors.
Risk-neutral drift is not the physical drift
For an equity index with constant rate r and dividend yield q, write:
S_t = S_0 exp((r - q + omega)t + X_t)
omega = (1/nu) log(1 - theta nu - 0.5 sigma^2 nu)
The expression requires 1 - thetanu - 0.5sigma^2*nu > 0. It enforces EQ[St] = S_0 exp((r-q)t). A valid VG parameter set for return fitting can therefore be invalid for exponential option pricing. Always test the analytic forward and simulated forward before fitting options.
def vg_martingale_correction(theta, sigma, nu):
base = 1.0 - theta * nu - 0.5 * sigma**2 * nu
if base <= 0:
raise ValueError("VG exponential moment at one does not exist")
return np.log(base) / nu
This correction belongs to the risk-neutral model. Estimating theta from historical returns then attaching it unchanged to option quotes silently assumes zero jump-risk premium.
Pricing with transforms
VG’s characteristic function supports Fourier pricing of European calls and puts. A practical implementation evaluates a damped transform on a frequency grid, inverts it, and maps output to log strikes. The same machinery can price a full expiry slice quickly enough for calibration.
| Check | Failure it detects |
|---|---|
| Forward match | missing or incorrect omega |
| Put-call parity | transform sign or discount error |
| Nonnegative density | unstable inversion range |
| Convex call prices | strike-grid aliasing |
| Parameter bounds | nonexistent moments or optimizer escape |
The FFT is a speed optimization, not a validation method. Damping, frequency cutoff, and grid spacing must be sensitivity-tested. Use adaptive quadrature for a small set of strikes as a reference, and fit in implied-volatility or normalized-price units with liquidity-aware weights.
Simulation and path-dependent payoffs
The subordination representation provides an exact increment sampler:
import numpy as np
def vg_increment(dt, theta, sigma, nu, rng):
g = rng.gamma(shape=dt / nu, scale=nu)
return theta * g + sigma * np.sqrt(g) * rng.standard_normal()
This is exact for a single increment assuming fixed parameters. It does not solve barrier monitoring between grid points, discrete dividends, or changing rates. For barrier options, a VG path can cross by a jump and overshoot the barrier, so Brownian bridge corrections derived for continuous diffusions are inappropriate.
Calibration and model risk
At one maturity, theta, sigma, and nu can often trade off. Across maturities, constant VG parameters impose a rigid term structure that may miss front-end event risk or long-dated skew. Adding maturity-dependent parameters improves fit but can destroy time consistency and create unstable hedges. Start with a parsimonious shared model, then document where residuals are material.
VG captures unconditional return shape but not stochastic variance dynamics. Compare it against jump-diffusion models for event-gap interpretation and Heston stochastic volatility for persistent variance. For products with early exercise, the relevant engine is a PIDE or simulation method tied to American options and early exercise, not a European FFT shortcut.
Key takeaways
- VG randomizes Brownian business time with a gamma clock, producing skew and heavy tails.
theta,sigma, andnuhave distinct but partially confounded smile effects.- The exponential-moment condition and martingale correction are mandatory in pricing.
- Characteristic-function pricing is efficient only when numerical grids are tested.
- VG is strong for static return shape but weak for volatility clustering without extensions.
