DEV Community

Cover image for Polymarket Bid Ask Spread: Measuring Liquidity Behavior
Nagi
Nagi

Posted on

Polymarket Bid Ask Spread: Measuring Liquidity Behavior

Measure Polymarket bid ask spread behavior using order-book data, spread regimes, depth, execution costs, and reproducible quantitative methods.

Measuring Bid-Ask Spread Behavior on Polymarket

A Polymarket bid-ask spread is easy to calculate:

Spread_t = Ask_t - Bid_t
Enter fullscreen mode Exit fullscreen mode

The difficult question is what that number actually tells us.

A two-cent spread in a market priced around $0.50 is not the same market condition as a two-cent spread around $0.02. Likewise, a one-cent spread backed by substantial depth is very different from a one-cent spread supported by a single small order.

The useful research problem is therefore not simply “What is the Polymarket spread?” It is:

How does the spread behave through time, and what does that behavior reveal about liquidity, execution cost, and market conditions?

That distinction turns spread measurement into a market-microstructure problem.


Contacts

Nagi writes about Polymarket bots, algorithmic trading, quantitative strategies, Python automation, Web3, and prediction-market infrastructure.

Github: https://github.com/nagi777x/Polymarket-Trading-Bot
X: https://x.com/nagi__777__
Telegram: https://t.me/nagi_777x


The Core Question

Can spread dynamics be used to distinguish:

  • normally liquid periods,
  • deteriorating liquidity,
  • information-driven repricing,
  • thin markets,
  • and temporary execution dislocations?

This article develops a practical framework for answering that question from Polymarket order-book data.

What We Are Analyzing

Polymarket's CLOB exposes order-book information containing bid and ask levels, sizes, timestamps, tick size, and last trade price. Its public market WebSocket can provide order-book snapshots, price changes, last-trade events, and best-bid/ask updates. ([Polymarket Documentation][1])

For each observation (t), record:

  • best bid (B_t)
  • best ask (A_t)
  • spread (S_t=A_t-B_t)
  • midpoint (M_t=(A_t+B_t)/2)
  • bid depth
  • ask depth
  • last trade price
  • timestamp
  • tick size
  • market identifier

The analysis should be performed over a defined market population and time window rather than mixing unrelated markets.

Spread Is a Distribution, Not a Number

The simplest statistic is the mean spread:

\bar S = \frac{1}{T}\sum_{t=1}^{T}S_t
Enter fullscreen mode Exit fullscreen mode

But the mean hides the behavior that usually matters most.

A better measurement set includes:

Median(S),\quad P_{90}(S),\quad P_{95}(S)
Enter fullscreen mode Exit fullscreen mode

and:

SpreadCV = \frac{\sigma(S)}{\mu(S)}
Enter fullscreen mode Exit fullscreen mode

The median describes the typical state. The upper percentiles describe deterioration. The coefficient of variation measures how unstable liquidity is.

This leads to an important framework:

Spread Regime Profile

Instead of labeling a market simply “liquid” or “illiquid,” classify each observation into:

  1. Tight regime — spread near the market's normal minimum.
  2. Normal regime — spread within its historical distribution.
  3. Wide regime — unusually expensive execution.
  4. Dislocated regime — spread expands sharply relative to its recent baseline.

The thresholds should be estimated from historical observations rather than arbitrarily choosing values such as “two cents = wide.”

Absolute Spread vs Relative Spread

Absolute spread is measured in probability points.

If:

B=0.48,\quad A=0.52
Enter fullscreen mode Exit fullscreen mode

then:

S=0.04
Enter fullscreen mode Exit fullscreen mode

The midpoint is:

M=0.50
Enter fullscreen mode Exit fullscreen mode

A useful normalized measure is:

S_{rel}=\frac{A-B}{(A+B)/2}
Enter fullscreen mode Exit fullscreen mode

Here:

S_{rel}=\frac{0.04}{0.50}=8\%
Enter fullscreen mode Exit fullscreen mode

This normalization becomes especially important near the boundaries of the probability range.

A four-cent spread around $0.50 represents a different economic condition from four cents around $0.05.

For prediction-market research, both measurements should therefore be retained.

Spread and Depth Must Be Studied Together

Spread alone does not describe executable liquidity.

Suppose two hypothetical books are:

Book A

  • Bid: $0.49 × 1,000
  • Ask: $0.50 × 1,000

Book B

  • Bid: $0.49 × 10
  • Ask: $0.50 × 10

Both have:

Spread=0.01
Enter fullscreen mode Exit fullscreen mode

Yet a large order interacts with these books very differently.

Define cumulative executable depth at distance (d) from the midpoint:

Depth(d)=\sum_{p \in [M-d,M+d]} Size(p)
Enter fullscreen mode Exit fullscreen mode

This produces a more useful liquidity surface:

spread × depth × time

rather than a single spread statistic.

Polymarket's order-book endpoint returns price levels and sizes, making this type of analysis directly measurable. ([Polymarket Documentation][1])

A Practical Python Measurement

A minimal synthetic example:

def spread_metrics(bid, ask):
    spread = ask - bid
    midpoint = (ask + bid) / 2

    return {
        "spread": spread,
        "midpoint": midpoint,
        "relative_spread": spread / midpoint if midpoint else None,
    }

print(spread_metrics(0.48, 0.52))
Enter fullscreen mode Exit fullscreen mode

Example only: this does not represent observed Polymarket performance.

For production research, collect repeated order-book observations and calculate the distribution rather than evaluating isolated snapshots.

The public CLOB also provides a dedicated spread endpoint, where the spread is defined as best ask minus best bid. ([Polymarket Documentation][2])

The More Interesting Signal: Spread Change

The level of the spread is useful. Its change can be more informative.

Define:

\Delta S_t=S_t-S_{t-1}
Enter fullscreen mode Exit fullscreen mode

A sudden positive (\Delta S_t) indicates liquidity has deteriorated.

Now compare it with midpoint movement:

\Delta M_t=M_t-M_{t-1}
Enter fullscreen mode Exit fullscreen mode

Four states become interesting:

Spread Midpoint Possible interpretation
Stable Stable Normal liquidity
Wider Stable Liquidity withdrawal
Stable Moving Repricing with maintained liquidity
Wider Moving sharply Information shock or market stress

These are interpretations, not causal conclusions. The same pattern can arise from different underlying mechanisms.

That distinction is essential when doing market surveillance.

Trading Cost Is Not Equal to Spread

For a taker crossing the book, the half-spread provides an intuitive execution-cost component relative to the midpoint:

Cost_{spread}\approx\frac{A-B}{2}
Enter fullscreen mode Exit fullscreen mode

But total trading cost can include more:

Cost \approx SpreadCost + Slippage + Fees
Enter fullscreen mode Exit fullscreen mode

Polymarket currently documents a protocol fee on takers for certain markets, while makers are not charged fees. The fee is calculated at match time and depends on market-specific parameters and price. ([Polymarket Documentation][3])

Therefore, a research dataset should never treat the displayed spread as the complete cost of execution.

What Can Go Wrong?

Stale observations

A snapshot can become obsolete quickly. Historical analysis should preserve timestamps and avoid assuming every observation represents the book continuously.

Tick-size effects

If the minimum tick is coarse relative to the market's natural spread, measured spread behavior can become discretized. Polymarket exposes tick-size information through market data, and its real-time feed can report tick-size changes. ([Polymarket Documentation][4])

Selection bias

Studying only highly active markets creates survivorship and selection bias. A spread model should define its market universe before observing results.

Depth blindness

A narrow spread with almost no executable size can look healthy in a spread-only dataset.

Event-driven regimes

Political announcements, sports events, economic releases, or crypto price shocks can produce temporary liquidity withdrawal. Averaging these periods together with ordinary trading can conceal the actual structure.

A Better Experiment

A useful research experiment is:

Hypothesis: spread widening is associated with deteriorating executable liquidity.

Experiment: collect timestamped order-book snapshots and calculate:

S_t,\quad Depth_t,\quad \Delta S_t,\quad \Delta M_t
Enter fullscreen mode Exit fullscreen mode

Then partition observations into spread regimes.

Observed result: should be calculated from real collected data.

Interpretation: test whether wider spreads consistently coincide with lower depth, larger midpoint movements, or both.

A stronger version uses event windows:

[-60s,-30s,-10s,0s,+10s,+30s,+60s]
Enter fullscreen mode Exit fullscreen mode

around major midpoint movements and compares spread behavior before and after the movement.

This transforms spread analysis from descriptive statistics into an event-study framework.

Production Considerations

For a real-time data pipeline, maintain a local order-book state rather than repeatedly treating individual messages as independent observations. Polymarket's market WebSocket supplies full book snapshots and incremental price-change messages. ([Polymarket Documentation][5])

The pipeline should validate:

  • monotonically sensible timestamps,
  • valid bid/ask ordering,
  • duplicate events,
  • missing updates,
  • tick-size changes,
  • empty books,
  • reconnect recovery,
  • and snapshot-to-incremental-update consistency.

Persist raw events separately from derived spread features. That makes historical reconstruction possible when the feature-generation logic changes.

Practical Example

Consider a hypothetical market with:

Bid=0.47,\quad Ask=0.51
Enter fullscreen mode Exit fullscreen mode

Then:

Spread=0.04
Enter fullscreen mode Exit fullscreen mode

and:

Midpoint=0.49
Enter fullscreen mode Exit fullscreen mode

Later:

Bid=0.485,\quad Ask=0.495
Enter fullscreen mode Exit fullscreen mode

The spread contracts to:

0.01
Enter fullscreen mode Exit fullscreen mode

while the midpoint remains approximately $0.49.

The market has therefore become dramatically cheaper to cross without materially changing its central quoted probability.

That is an important distinction: liquidity improved even though the estimated probability barely moved.

Advanced Extensions

Experienced researchers can extend the framework by adding:

  1. Spread-duration analysis — measure how long wide-spread regimes persist.
  2. Depth-adjusted spread — estimate execution cost for fixed order sizes.
  3. Cross-market comparison — compare economically related markets during identical events.
  4. Regime models — classify liquidity states using hidden Markov or clustering methods.
  5. Predictive analysis — test whether current spread conditions predict future spread expansion or execution difficulty.

The fifth should be treated as a hypothesis, not an assumed trading signal.

Key Takeaways

  • The Polymarket bid ask spread should be analyzed as a time series, not a single number.
  • Absolute spread and relative spread answer different questions.
  • Spread without depth is an incomplete liquidity measurement.
  • Sudden spread widening can identify liquidity stress, but does not prove its cause.
  • Displayed spread is not equivalent to total execution cost.
  • Historical research should preserve raw order-book events so derived measurements can be reconstructed.

FAQ

What is the Polymarket bid ask spread?

It is the difference between the best ask and best bid. Polymarket's documented spread endpoint returns this value directly. ([Polymarket Documentation][2])

Why does spread matter on Polymarket?

It represents an immediate component of the cost of crossing the order book and provides a basic measure of quoted liquidity.

Is a smaller spread always better?

Not necessarily. A narrow spread backed by very little depth may provide worse execution for a larger order than a slightly wider but deeper market.

Can spread predict price movement?

Possibly, but this must be empirically tested. Spread widening can accompany repricing, liquidity withdrawal, or temporary market stress.

Can Polymarket spread data be monitored in real time?

Yes. The documented market WebSocket provides order-book and best-bid/ask updates, alongside other market events. ([Polymarket Documentation][5])

Disclaimer

This article is for educational and research purposes only. Trading prediction markets involves market, liquidity, execution, model, and capital risk. No strategy discussed here guarantees profit.

Conclusion

The useful unit of analysis is not simply spread = ask − bid. It is the joint behavior of spread, depth, midpoint movement, and time.

For Polymarket researchers, that creates a richer research object: a liquidity regime rather than a static market statistic.

The next step is to build a historical dataset of order-book states, identify spread regimes, and test whether those regimes correspond to measurable differences in depth, volatility, execution cost, and market events.

Top comments (0)