Carr-Madan Formula and FFT Option Pricing

Carr-Madan pricing converts European option valuation into a Fourier inversion problem. If a model supplies the characteristic function of log price, a damped call price can be transformed and recovered over a grid of strikes with a fast Fourier transform (FFT). The method makes models such as Heston stochastic volatility practical for calibration, but grid design and complex-number stability matter as much as the formula.

Why damping is required

Let k=log(K) and C(k) be the undiscounted call price. Calls do not decay quickly enough as k tends to negative infinity for an ordinary Fourier transform. Introduce alpha > 0:

c_alpha(k) = exp(alpha*k) * C(k)

With characteristic function phi(u)=E[exp(iulog(S_T))], the transformed damped call is:

psi(v) = exp(-rT) * phi(v-(alpha+1)i) /
         [alpha^2 + alpha - v^2 + i*(2*alpha+1)*v]

The call follows from inversion:

C(k) = exp(-alpha*k)/pi * integral_0^infinity
       Re[exp(-i*v*k) * psi(v)] dv

The required moment condition is not cosmetic: E[S_T^(alpha+1)] must be finite. In jump models, choosing a damping parameter outside the characteristic function's admissible strip produces unstable or nonsensical prices.

Numerical choiceEffectFailure symptom
alphaintegrability, conditioningexploding/negative prices
eta frequency spacingstrike rangestrike truncation
N grid sizeresolution and rangeinterpolation bias
quadrature weightsintegration accuracyoscillating errors
CF branch handlingcontinuityjagged smile

FFT grid coupling

The FFT evaluates frequencies vj=jeta and log-strikes km=-b+mlambda, with:

lambda * eta = 2*pi/N
b = N*lambda/2

Increasing N at fixed eta improves the strike range and resolution together; changing eta changes both in another direction. It is easy to get a visually smooth curve that is wrong outside a narrow ATM area.

import numpy as np

def carr_madan_grid(n=4096, eta=0.15):
    lam = 2*np.pi / (n*eta)
    b = n*lam/2
    v = np.arange(n) * eta
    k = -b + np.arange(n)*lam
    weights = np.ones(n); weights[0] = 0.5
    return v, k, weights

For a production engine, include Simpson weights or another tested quadrature, a phase factor for the strike shift, and interpolation from the log-strike grid to requested strikes. The snippet establishes only the coupled grid.

Characteristic-function implementation

The method needs the characteristic function under the pricing measure and the correct forward/discounting convention. Test the trivial invariant phi(0)=1, conjugate symmetry where applicable, and the first moment used to recover the forward. For affine models, use a branch-stable complex logarithm and square root. The “little Heston trap” is a familiar example: algebraically equivalent forms can yield different numerical branches.

Compare FFT prices with Black-Scholes pricing by plugging in the normal log-price characteristic function. This reference catches sign errors in the transform, discounting mistakes, and incorrect shift factors before model complexity obscures them.

Aliasing and convergence

FFT assumes periodic extension. Truncating the frequency integral creates oscillations, while a finite strike grid aliases tail behavior back into the region of interest. Run a convergence table over N, eta, damping, and integration limits for representative deep ITM, ATM, and deep OTM strikes. Accept a configuration only when prices and implied vols stabilize within a tolerance smaller than the bid-ask.

TestExpected result
Put-call parityresidual near numerical tolerance
Strike monotonicitycall prices decrease in K
Convexitynon-negative call butterflies
BS benchmarkagreement across moneyness
Grid perturbationstable IVs in traded range

Calibration use

FFT is especially efficient when one parameter set prices many strikes at one expiry. During calibration, cache grids and shared model terms, but never reuse an invalid surface after parameters or maturity change. Price errors should be transformed to implied-vol errors and weighted by bid-ask; raw price errors overweight expensive ITM options.

Key takeaways

  • Carr-Madan prices damped calls by Fourier inversion of a characteristic function.
  • Damping must satisfy the model's moment domain.
  • FFT efficiency comes with coupled strike/frequency grids and aliasing risk.
  • Benchmark against Black-Scholes and test parity, monotonicity, convexity, and convergence.
  • A stable characteristic function and bid-ask-aware calibration are production requirements.
#Carr-Madan #FFT pricing #characteristic functions #options