Characteristic Function Pricing

Heston, Merton, and Variance Gamma models for binary option pricing

Standard Black-Scholes assumes constant volatility and no jumps. Real markets have volatility smiles, sudden jumps, and fat tails. Characteristic function pricing handles all of these by working in Fourier space.

Horizon implements three stochastic models for pricing binary options on prediction markets and equities.

Models

Heston (stochastic volatility)

python
import horizon as hz

params = hz.HestonParams(
    v0=0.04,       # initial variance
    kappa=2.0,     # mean reversion speed
    theta=0.04,    # long-run variance
    sigma=0.3,     # vol of vol
    rho=-0.7,      # correlation with price
)

price = hz.heston_binary_price(params, S=100, K=105, T=0.25, r=0.05)

Merton (jump-diffusion)

python
params = hz.MertonParams(
    lam=3.0,       # jump intensity (jumps per year)
    mu_j=-0.02,    # mean jump size
    sigma_j=0.05,  # jump size volatility
)

price = hz.merton_binary_price(params, S=100, K=105, T=0.25, r=0.05, sigma=0.2)

Variance Gamma

python
params = hz.VGParams(
    sigma=0.2,     # diffusion volatility
    theta=-0.1,    # drift of the subordinator
    nu=0.5,        # variance rate of the subordinator
)

price = hz.vg_binary_price(params, S=100, K=105, T=0.25, r=0.05)

Implied volatility from binary prices

python
iv = hz.implied_vol_from_binary(price=0.42, T=0.25, K=105, S=100, r=0.05)

When to use

  • Heston: when you see a volatility smile/skew in the options chain
  • Merton: when the underlying has occasional large jumps (earnings, events)
  • Variance Gamma: when returns have heavier tails than normal but continuous paths

Next