Characteristic Function Pricing Methods
Characteristic-function pricing replaces repeated simulation with numerical Fourier inversion. A characteristic function compactly represents the risk-neutral distribution of log price:
phi(u) = E_Q[exp(i*u*X_T)], X_T = log(S_T)
When phi is known analytically or cheaply evaluated—as in many affine stochastic-volatility and jump models—European option prices, digital probabilities, and moments can be computed quickly across strikes. The speed is valuable, but it does not excuse poor measure choice, unstable complex arithmetic, or untested inversion settings.
From a distribution transform to a call price
The characteristic function is always bounded on the real line, unlike a moment-generating function which may not exist. Fourier inversion recovers probabilities or a density, then integrates a payoff. A common Heston-style representation is:
C = S0*exp(-qT)*P1 - K*exp(-rT)*P2
Pj = 1/2 + (1/pi) integral_0^infinity
Re[exp(-i*u*log(K))*f_j(u)/(i*u)] du
Alternative formulations damp the payoff first, as in Carr-Madan FFT pricing. The methods are mathematically related but have different numerical behavior and moment requirements.
| Method | Best use | Main numerical concern |
|---|---|---|
| Direct quadrature | few strikes, transparency | integration cutoff and oscillation |
| FFT | many regular strike-grid prices | aliasing and grid coupling |
| COS expansion | high accuracy for smooth densities | truncation interval |
| Lewis contour integral | flexible payoff transforms | contour and branch selection |
| Monte Carlo | path-dependent products | statistical error and slow calibration |
Risk-neutral specification comes first
Pricing needs the characteristic function under the pricing measure. A historical return fit cannot simply be inserted into an option formula: variance-risk and jump-risk premia alter the dynamics. Inputs must satisfy the model's forward:
E_Q[S_T] = S0 * exp((r-q)*T)
Use this identity as a unit test. It catches an omitted dividend yield, wrong drift, or a characteristic function defined for returns rather than log prices. For FX, replace q with the foreign rate; for futures options, use the corresponding futures-measure convention.
Direct quadrature workflow
For a modest number of strikes, adaptive integration can be more reliable than FFT because it avoids grid interpolation:
from scipy.integrate import quad
import numpy as np
def real_integral(integrand, upper=200.0):
value, error = quad(integrand, 0.0, upper,
epsabs=1e-9, epsrel=1e-9, limit=300)
return value, error
The error estimate only describes the selected integrator on the selected interval. Increase upper, tighten tolerances, and compare alternative transforms. Oscillatory integrands can look converged while truncation bias remains. The right cutoff varies by maturity, strike, and model parameters.
Models and complex branches
The Heston model has an exponential-affine characteristic function from Riccati equations. Jump-diffusion and Lévy models often have one as well. In all cases, complex square roots and logarithms require consistent branches. A discontinuity in phi(u) becomes a jagged option surface and unstable calibration gradients.
Check:
phi(0) = 1
phi(-u) = conjugate(phi(u)) # for real-valued X
Then validate price monotonicity, convexity, and put-call parity. These tests should run over the complete calibration strike/maturity region, not just ATM examples.
COS methods and interval selection
The COS method expands the density on a finite interval [a,b] using cosine coefficients derived from phi. It can converge rapidly because it avoids direct oscillatory integration at every strike. Its weakness is interval truncation: if [a,b] excludes meaningful tail probability, wing options are biased. Choose bounds from cumulants when reliable, then enlarge them and test price stability.
| Validation layer | Question |
|---|---|
| Transform | are phi(0) and forward moments correct? |
| Numerical | do tolerance/grid/interval changes stabilize prices? |
| Static arbitrage | are prices monotone and convex in strike? |
| Market | are IV residuals within bid-ask? |
| Hedge | do calibrated dynamics explain realized surface moves? |
Calibration and governance
Calibrating a characteristic-function model is an inverse problem. Fit liquid implied-volatility quotes with bid-ask weights, enforce economically defensible bounds, and use multiple starts. A low error can conceal unstable parameters or a violation between quoted nodes. Parameter moves should be reported separately from market quote moves; otherwise a recalibration can be mistaken for trading P&L.
Characteristic functions price European terminal payoffs efficiently. They do not by themselves solve American exercise, discrete barriers, or realized-variance sampling. Combine them with PDE, trees, or Monte Carlo only where the product requires it.
Key takeaways
- Characteristic functions encode risk-neutral log-price distributions for efficient European pricing.
- Verify the pricing measure and forward moment before trusting any inversion.
- Direct quadrature, FFT, and COS trade off flexibility, speed, and truncation risk.
- Complex-branch continuity and static-arbitrage tests are essential.
- Calibration quality is separate from parameter stability and hedge performance.
