Skip to main content
Ultra Feature. Requires an Ultra subscription. Get started at api.mathematicalcompany.com
What is this? In options markets, implied volatility tells you how uncertain the market is. Prediction markets don’t have this - until now. The belief-volatility surface estimates a “belief vol” parameter from streaming prediction market prices, decomposing price changes into gradual drift (diffusion) and sudden jumps. Use it to calibrate logit-space market making, detect regime changes, and price the uncertainty of uncertainty.

Belief-Volatility Surface

Horizon’s BeliefVolSurface is a streaming estimator that processes tick-by-tick prediction market data and produces a calibrated belief-volatility estimate. It uses online Expectation-Maximization (EM) to separate price changes into:
  • Diffusion: gradual belief shifts (estimated as “belief vol”)
  • Jumps: sudden information shocks (estimated as jump probability)
The estimator operates in logit space and accounts for bid-ask spread as microstructure noise.

Streaming EM

Online EM separates diffusion and jump components without batch processing. Updates in O(1) per tick.

Noise Filtering

Bid-ask spread is treated as microstructure noise, producing cleaner vol estimates.

Jump Detection

Automatically estimates the probability that each price move was a jump vs. diffusion.

Vol Surface

Interpolated volatility surface across time-to-resolution horizons.

API

BeliefVolSurface

surface.update

Process a new price observation. Returns the current belief vol estimate.
The algorithm:
  1. Converts price to logit space
  2. Estimates microstructure noise from bid-ask spread: noise_var = (logit(ask) - logit(bid))^2 / 12
  3. Computes observed variance: delta_x^2 - noise_var
  4. Runs online EM to separate diffusion and jump components
  5. Returns sqrt(diffusion_var) as belief vol

surface.current_vol

surface.jump_probability

surface.surface_point

Interpolated vol at a given time-to-resolution.

surface.reset

Clear all state and return to initial values.

Online EM Algorithm

The surface decomposes each price change into two regimes: E-step (per observation):
M-step (EWMA update):
This produces three outputs:
  • belief_vol = sqrt(diff_var) - the smooth component
  • jump_var - the sudden component
  • jump_prob - estimated probability that any given move is a jump

Pipeline Integration

hz.belief_vol_tracker

Automatically maintains per-market BeliefVolSurface instances and injects estimates into ctx.params.
Injects into ctx.params:
  • "belief_vol": Current belief volatility estimate
  • "jump_prob": Estimated jump probability
The logit market maker reads "belief_vol" from params if present, so these two pipeline functions compose naturally.

Example: Full Logit + Belief Vol Pipeline