Resolved Markets logoResolved Markets logo
Abstract blue gradient background with a soft light streakAbstract blue gradient background with a soft light streak
Analytics

Mid-price volatility, measured

The mid price is an implied probability that bounces between 0 and 1. Measuring its realized volatility, across timeframes, through quiet and active regimes, needs high-frequency snapshots and a little care.

9 min read · Updated Jun 22, 2026

  • mid_price (0-1)Variable
  • Realized volatilityMeasure
  • 5m · 15m · 1h · 1dTimeframes
  • ~20 Hz cryptoSampling

On a prediction market the mid price is not a dollar figure, it is the market’s implied probability, bounded between 0 and 1, settling at one or zero. Measuring how violently that probability moves is volatility analysis on a bounded variable, and the high-frequency snapshots give you the raw material to do it honestly across every timeframe.

Realized volatility is just the dispersion of returns over a window. The twist on a prediction market is the variable: mid_price is a probability between 0 and 1, not an unbounded price. That bound changes how you should think about it, a market at 0.5 has room to swing both ways, while one pinned near 0.95 is compressed against the wall and will look artificially calm unless you account for it.

The mid_price field rides on every snapshot, pre-computed as the midpoint of the touch, so the input is already there. The work is in measuring its movement carefully: choosing a sampling cadence, handling the bound, and separating quiet regimes from active ones rather than blending them into one misleading average.

What volatility on a bounded variable looks like

The 0-1 bound

A probability cannot run away the way a price can. Near the edges it compresses; in the middle it has the most room to move.

  • Bounded both ends
  • Compressed near 0 and 1
  • Most variance near 0.5

Volatility clustering

Active stretches cluster together and quiet stretches cluster together, volatility is autocorrelated, not evenly spread.

  • Bursts, not uniform
  • Quiet follows quiet
  • Active follows active

Regimes by timeframe

A 5m market lives a full life in minutes; a 1d market grinds slowly. The same volatility measure means different things across them.

  • 5m vs 1d character
  • Per-timeframe scaling
  • Compare like with like

Measuring it from snapshots

  1. 1Pull the snapshots for the market and window, you only need mid_price and the timestamps, not the full book, so the queries stay light.
  2. 2Resample to a fixed cadence so unevenly spaced snapshots don’t bias the dispersion, pick a step that suits the timeframe you are studying.
  3. 3Compute returns of the mid across that cadence and take their dispersion over a rolling window to get realized volatility.
  4. 4Annualise or otherwise scale by the timeframe so a 5m market and a 1d market can be compared on the same axis rather than by raw numbers.
  5. 5Plot the volatility series itself and look for clustering, the calm and active regimes are the structure you actually want to see.

The fields the measure reads

  • mid_priceThe implied probability you measure
  • event_timestampPolymarket emit time, when it actually moved
  • capture_timestampWhen we processed it, for cadence checks
  • crypto_priceSpot reference to compare against the implied move

Ordering returns on event_timestamp keeps your volatility honest about when the probability moved rather than when it was processed. The crypto_price field is a bonus on crypto markets, you can put implied-probability volatility next to spot volatility and study whether the market’s probability moves faster or slower than the underlying it tracks.

Why high frequency matters here

  • Realized volatility is sensitive to sampling, too coarse and you miss intrabar moves that round-trip; the ~20 Hz crypto capture lets you measure at fine cadences and downsample deliberately.
  • Short-timeframe markets live fast: a 5m BTC market can traverse most of its probability range in minutes, so a sparse sample badly understates how active it was.
  • Slower categories sample slower, sports near ~2 Hz, so set your cadence to the data you actually have there, and treat fine-grained volatility as unavailable rather than guessed.
  • Microstructure noise inflates very high-frequency volatility; downsampling from a dense series is cleaner than trying to upsample a coarse one, which is why capture density is the thing that matters.
Be honest about the measure

Mid volatility is quote volatility

You are measuring the volatility of the quoted midpoint, not of executed trades. Near the bound, thin or one-sided books can make the mid jump on small changes, and a mid built from a wide spread is a noisier estimate of the “true” probability. The measure is rigorous and reproducible, and it is volatility of the book’s implied probability, which is a proxy for, not identical to, the market’s conviction.

A probability cannot run to infinity, it can only swing between certainty and its opposite. Measuring how fast it swings is volatility analysis with a ceiling and a floor built in.

Measure the volatility yourself

Pull mid_price series across timeframes with the historical guide, then take a volatility-aware view into the backtester.

Frequently asked questions