Skip to content
CONTENTS
Press a letter to jump to a section

Fourier option pricing: compute the price from a characteristic function

Published Updated 5 min readOptions pricing:Part 1Part 2Part 3Part 4Part 5Part 6Part 7Part 8

Black–Scholes gives a European call price using normal cumulative probabilities. Monte Carlo estimates the same price by drawing terminal stocks. Fourier pricing reaches it through a different representation of the distribution.

Why bother changing representation?

For some models, the probability density is awkward to write down but the characteristic function is tractable. That includes important stochastic-volatility and jump models. A transform method can exploit what we know analytically rather than simulate every payoff.

The transform is a computational tool. It does not choose the market model, estimate its parameters, or remove model risk.

The risk-neutral characteristic function

Let XT=log⁡STX_T=\log S_T. Its characteristic function under the pricing measure is:

ϕT(u)=EQ[eiuXT].\phi_T(u)=\mathbb E^{\mathbb Q}[e^{iuX_T}].

For real uu, this complex-valued function encodes the terminal distribution. Differentiating at zero can recover moments when they exist; Fourier inversion can recover a density under suitable conditions.

Under our GBM benchmark:

ϕT(u)=exp⁡[iu{log⁡S0+(r−q−12σ2)T}−12σ2Tu2].\phi_T(u)=\exp\left[iu\{\log S_0+(r-q-\tfrac12\sigma^2)T\}-\tfrac12\sigma^2Tu^2\right].

Check two anchors. ϕT(0)=1\phi_T(0)=1 because a distribution has total probability one. The analytic continuation at u=−iu=-i equals E[ST]=S0e(r−q)T\mathbb E[S_T]=S_0e^{(r-q)T}. That second check targets the pricing drift.

The latter identity is the initial-date consequence of the martingale condition used in risk-neutral pricing. For our GBM benchmark, Itô's lemma supplies the log-drift correction. A characteristic function with the wrong expected stock carry can return smooth prices while representing the wrong pricing model.

Real-valued characteristic functions are not required. Complex arithmetic is part of the method. Throwing away imaginary components before the inversion changes the answer.

Real imaginary and magnitude components of a GBM log-return characteristic function
Real imaginary and magnitude components of a GBM log-return characteristic function
The illustration uses log return log(S_T/S_0), so it removes the log-spot phase shown in the log-spot formula. It equals one at zero frequency.

Carr–Madan Fourier pricing and damping

Write strike as K=ekK=e^k and call value as C(k)C(k). A direct Fourier transform in log strike faces an integrability problem: as strike approaches zero, a call's price does not decay to zero.

Carr and Madan multiply the price by eαke^{\alpha k} for a positive damping parameter α\alpha. The damped function can be integrable when the relevant moments exist. With constant discounting, its transform is:

ψ(v)=e−rTϕT(v−i(α+1))α2+α−v2+i(2α+1)v.\psi(v)=\frac{e^{-rT}\phi_T(v-i(\alpha+1))} {\alpha^2+\alpha-v^2+i(2\alpha+1)v}.

The call value follows by inversion:

C(k)=e−αkπ∫0∞Re⁡{e−ivkψ(v)} dv.C(k)=\frac{e^{-\alpha k}}{\pi} \int_0^\infty\operatorname{Re}\{e^{-ivk}\psi(v)\}\,dv.

This is a transform identity under its integrability conditions. The numerical work is now a one-dimensional integral over frequencies.

The shifted argument v−i(α+1)v-i(\alpha+1) explains why not every positive α\alpha is safe in every model. We need a finite moment of order α+1\alpha+1. GBM has all positive moments, but other models can have a restricted moment domain. An arbitrary damping parameter can take the characteristic function outside the admissible strip.

Price the same call before changing models

The lab implements that integral using GBM's characteristic function, with α=1.5\alpha=1.5 and an integration upper limit of 150. It returns 9.227005508154049.22700550815404 for the benchmark call. The direct BSM formula returns 9.2270055081540369.227005508154036.

Black–Scholes and Fourier integration across strikes
Black–Scholes and Fourier integration across strikes
These are the same GBM prices computed through different representations. The agreement validates this numerical benchmark, not the use of GBM for every traded option.

This order matters. If we begin with a complicated Heston implementation and disagree with another system, we do not know whether the fault is the characteristic function, complex branches, transform convention, or integration grid. Recovering BSM first removes several uncertainties.

The quadrature routine's reported error estimate applies to its finite numerical integral. It does not include the omitted tail beyond the chosen upper limit, floating-point issues in the model's characteristic function, or model misspecification. The lab separately varies damping and checks multiple strikes. A production implementation needs broader regimes, including short expiries and extreme moneyness.

For a few strikes, direct quadrature is straightforward: run the integral at each desired kk. For a large evenly spaced log-strike grid, the fast Fourier transform can compute many related sums efficiently.

Let frequency spacing be η\eta, with NN points. The corresponding log-strike spacing is:

λ=2πNη.\lambda=\frac{2\pi}{N\eta}.

That coupling is important. Frequency truncation, frequency resolution, strike resolution, and the strike range cannot be adjusted independently by wishful thinking. Increasing NN at fixed η\eta refines the strike grid and expands the maximum frequency; changing η\eta also changes the strike range.

The lab includes a transparent FFT implementation with trapezoidal weights. With N=4096N=4096 and η=0.05\eta=0.05, interpolating to strike 100100 gives 9.23339.2333. Its error is about 0.00630.0063, noticeably larger than the quadrature error. The desired strike falls between grid nodes, so interpolation contributes.

That result is useful precisely because it is imperfect. “Uses FFT” is not a certificate of high accuracy. Grid choices and interpolation need convergence checks. If only a handful of strikes matter, adaptive quadrature may be easier to control than a whole FFT grid.

Quadrature and FFT interpolation error against the BSM benchmark
Quadrature and FFT interpolation error against the BSM benchmark
The finite FFT grid requires interpolation at strike 100. Its error is about $0.0063 in this experiment; quadrature agrees to numerical precision.

Heston and Merton jump-diffusion characteristic functions

The transform machinery can be reused once a compatible risk-neutral characteristic function is available. The Heston and Merton model comparison explains what changes economically: Heston's function comes from its affine variance dynamics, while Merton jump-diffusion adds a jump component to the exponent.

For lognormal jumps with log⁡J∼N(mJ,sJ2)\log J\sim N(m_J,s_J^2), one representation is:

ϕT(u)=exp⁡[iu{log⁡S0+(r−q−λkJ−12σ2)T}−12σ2Tu2+λT{eiumJ−12sJ2u2−1}],\phi_T(u)=\exp\left[iu\{\log S_0+(r-q-\lambda k_J-\tfrac12\sigma^2)T\}-\tfrac12\sigma^2Tu^2+\lambda T\{e^{ium_J-\tfrac12s_J^2u^2}-1\}\right],

where kJ=emJ+sJ2/2−1k_J=e^{m_J+s_J^2/2}-1. The jump compensation makes the expected stock carry consistent with r−qr-q. A missing compensator can look like a calibration error while actually being an invalid drift.

For Heston, complex square roots and logarithms need a consistent representation across the integration grid. Branch discontinuities can corrupt an otherwise valid formula. Use established stable formulations, limiting cases, and independent benchmarks. We explain the model here, but our downloadable lab deliberately validates the GBM transform rather than claiming a tested Heston calibration engine.

What this method does not solve by itself

A terminal characteristic function is particularly convenient for European payoffs. It does not automatically encode early exercise or path history. There are transform extensions for other contracts, but they require more machinery and assumptions.

Fourier pricing also depends on the quality of its calibrated inputs. A fast calculation of a misspecified distribution remains a misspecified price. Its strength is computational: it can turn a difficult distributional problem into an integral or grid sum with clear numerical checks.

Try it

Change damping from 1.5 to 0.5, 1.0, and 2.0 in the GBM lab. Increase the integration limit to 200. The result should remain stable to the stated tolerance. Then change the FFT grid and record errors against BSM. Keep model inputs fixed; this is a solver experiment.

Continue learning

Work through Fourier-transform pricing. The final article puts formula, tree, simulation, quadrature, and FFT side by side with their actual error sources.

Sources

Carr and Madan, “Option valuation using the fast Fourier transform” (1999); Heston (1993); Merton (1976). The formulas are developed here with an explicit convention for the characteristic function of log spot.

Go deeper with lessons, derivations and worked exercises behind this article.