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.

ParameterPrimary roleTypical smile effect
sigmaconditional Gaussian scaleoverall dispersion
thetadirectional asymmetryskew direction
nuclock variabilityexcess kurtosis, wings
Taggregation horizonshape 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.

CheckFailure it detects
Forward matchmissing or incorrect omega
Put-call paritytransform sign or discount error
Nonnegative densityunstable inversion range
Convex call pricesstrike-grid aliasing
Parameter boundsnonexistent 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, and nu have 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.
#variance gamma #levy process #option pricing #fourier methods