Strasmore Research
Deep Dives Matt ConnorBy Matt Connor

Market Making in Prediction Markets

How market makers quote prediction markets: why a payoff capped at $1 makes inventory risk computable up front, and why spreads widen into resolution.

Market making in prediction markets is the job of posting a two-sided quote on an event contract and getting paid the spread for standing there. The structure underneath that job is unusual. The contract settles at $1 if the event happens and $0 if it does not, so the worst outcome on any position is a known number before the trade prints, and the same bound applies to every contract in the series.

One boundary before the mechanics. This post covers how a maker prices a quote and manages the position behind it. Matching-engine detail and queue priority sit outside it.

How market making in prediction markets differs from an equity book

An equity maker who ends the day long 1,000 shares of a $40 stock carries an open question into tomorrow. The loss has no defined floor short of zero, and the position has to be hedged or worked out of over time.

An event contract maker who ends the day long 10,000 yes contracts at 62 cents already knows the full range. The position pays $10,000 on a yes resolution and $0 on a no resolution. The cash committed is $6,200. Nothing that happens tomorrow moves those numbers. Inventory risk is capped at a dollar per contract and computable before the quote goes up.

The second structural difference is that the two-sided book is one book. Buying a yes at 62 cents and selling a no at 38 cents leave a trader in the same place, so a bid for yes at 61 is an offer of no at 39. A maker quoting both sides of an event is not running two inventories against each other. There is one position, expressed in whichever unit the venue prints.

Price does the work of probability in these markets, which our page on event contract prices as probabilities treats in full. A quote at 62 cents carries an implied chance near 62%, before the spread is stripped out.

What the spread has to cover

The spread pays for adverse selection: the standing risk that whoever lifts the quote knows something the maker does not. The general version of that trade-off is in how market makers make money. Event books sharpen it. Informed flow in an equity book is diffuse and slow. Informed flow in an event book concerns one question with one answer on one date, and the people who learn that answer early are a small, identifiable group.

There is a second sharpening. In an equity book the arrival rate of new information is roughly stationary across the life of a position. In an event book it is not. The hazard climbs into the resolution date, and the final hours carry more of the total information than the first month did.

Listed options give the closest measurable version of that mechanic. An option's delta is the rate its price moves per $1 of underlying, and for a call it runs from 0 to 1, which makes it a serviceable stand-in for the market's implied chance the contract finishes in the money. The panel below takes every SPY contract expiring on May 15, 2026 that traded, and tracks where those deltas sat on each session from April 1 into expiry.

QueryWhere traded contracts sat, session by session, into one SPY expiry
31 rows (showing 20)
sessionsession_labelcoin_flip_pctnear_settled_pctcontract_count
2026-04-01Apr 118.841.7218
2026-04-02Apr 220.439.3211
2026-04-06Apr 619.842.5207
2026-04-07Apr 721.240.8184
2026-04-08Apr 815.135.6239
2026-04-09Apr 915.735.6216
2026-04-10Apr 1012.640270
2026-04-13Apr 1311.740.2256
2026-04-14Apr 1411.344.5265
2026-04-15Apr 1511.450.2263
2026-04-16Apr 1610.553.3276
2026-04-17Apr 176.860.4293
2026-04-20Apr 209.452.3298
2026-04-21Apr 218.851.6318
2026-04-22Apr 229.550.3296
2026-04-23Apr 239.750.3300
2026-04-24Apr 248.253.8316
2026-04-27Apr 278.457.3274
2026-04-28Apr 288.656.3279
2026-04-29Apr 299.357.3248
The exact SQL behind every number
SELECT
    toString(date)                        AS session,
    formatDateTime(date, '%b %e')         AS session_label,
    round(100 * countIf(abs(delta) >= 0.4 AND abs(delta) <= 0.6) / count(), 1) AS coin_flip_pct,
    round(100 * countIf(abs(delta) < 0.1 OR abs(delta) > 0.9) / count(), 1)    AS near_settled_pct,
    count()                               AS contract_count
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
  AND expiration_date = '2026-05-15'
  AND date >= '2026-04-01'
  AND date <= '2026-05-15'
  AND iv_converged = 1
  AND volume > 0
GROUP BY date
ORDER BY date
Run this yourself

On Apr 1, 18.8% of the traded contracts sat in the coin-flip band, a delta between 0.4 and 0.6, and 41.7% were already parked near 0 or near 1. By May 14, the coin-flip band held 1.8% and the parked group held 86.6%, across the 31 sessions in view. The middle drains. An event contract book does the same thing on its way to settlement, and a maker holding inventory watches the range of surviving outcomes narrow onto one of the two ends.

Why quotes widen ahead of resolution

The draining is gradual. The sensitivity underneath it is not. The next panel groups near-the-money SPY contracts by days left and reports two measurements: the implied volatility carried in the price, and how far delta travels on a 1% move in the underlying.

QueryImplied volatility and delta sensitivity by time left, near-the-money SPY
dte_bucketatm_iv_pctdelta_shiftcontract_count
0-1d20.40.2752387
2-3d17.40.2293666
4-7d14.70.1919744
8-14d14.80.14913644
15-30d15.70.1039574
31-60d15.70.07510446
The exact SQL behind every number
SELECT
    multiIf(days_to_expiry <= 1,  '0-1d',
            days_to_expiry <= 3,  '2-3d',
            days_to_expiry <= 7,  '4-7d',
            days_to_expiry <= 14, '8-14d',
            days_to_expiry <= 30, '15-30d',
                                  '31-60d')           AS dte_bucket,
    round(100 * avg(toFloat64(implied_volatility)), 1) AS atm_iv_pct,
    round(avg(toFloat64(gamma) * toFloat64(underlying_close)) / 100, 3) AS delta_shift,
    count()                                            AS contract_count
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
  AND date >= '2026-04-01'
  AND date <= '2026-06-30'
  AND iv_converged = 1
  AND volume > 0
  AND days_to_expiry >= 0
  AND days_to_expiry <= 60
  AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.02
GROUP BY dte_bucket
ORDER BY min(days_to_expiry)
Run this yourself

Inside a day of expiry, a 1% move in the underlying shifted delta by 0.275. In the 31-60d bucket the same move shifted it by 0.075. Implied volatility on the same near-the-money contracts ran 20.4% at the front of the curve against 15.7% at the back.

Translate that into an event book. A month out, a headline moves a contract a few cents and the maker's inventory reprices gently. Twenty minutes before a scheduled release, the same headline can carry the price from 20 cents to 90, and every contract of inventory moves with it. Quoting behaviour around those windows follows the sensitivity: spreads widen ahead of scheduled resolution events, and some makers withdraw across the window entirely. A book that looks abandoned half an hour before a number lands is usually a book whose makers have priced that window and declined it.

Inventory skewing on a bounded payoff

A maker filled repeatedly on the yes side does not usually pull the quote. The standard response is a skew: keep quoting both sides, with both prices shifted a tick or two toward the inventory the maker wants to shed. In a bounded market the skew has a natural reference point. Every contract of yes inventory carries a known worst case, so the skew can be sized against a loss number rather than against a volatility estimate.

The yes and no symmetry is measurable in options as well. At a matched strike, a call delta and a put delta describe the same event from opposite ends, and the pair adds to about 1.

QueryCall delta and put delta at matched strikes, SPY, 20 to 45 days out
strike_vs_spotcall_deltaput_delta_absdelta_sumcontract_count
-5%0.8360.1761.0121391
-4%0.8080.2061.0142864
-3%0.7580.2541.0113087
-2%0.6990.3121.0113387
-1%0.6230.3821.0053510
+0%0.5370.4631.0013678
+1%0.4420.5520.9943282
+2%0.3430.6430.9862739
+3%0.2450.7250.972263
+4%0.1650.7930.9581919
+5%0.1150.8220.937817
The exact SQL behind every number
SELECT
    concat(if(strike_pct >= 0, '+', ''), toString(strike_pct), '%') AS strike_vs_spot,
    round(avgIf(d, is_call), 3)                                     AS call_delta,
    round(-avgIf(d, NOT is_call), 3)                                AS put_delta_abs,
    round(avgIf(d, is_call) - avgIf(d, NOT is_call), 3)             AS delta_sum,
    count()                                                         AS contract_count
FROM
(
    SELECT
        toFloat64(delta)                    AS d,
        startsWith(lower(option_type), 'c') AS is_call,
        toInt32(round(100 * (toFloat64(strike_price) / toFloat64(underlying_close) - 1))) AS strike_pct
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'SPY'
      AND date >= '2026-04-01'
      AND date <= '2026-06-30'
      AND iv_converged = 1
      AND volume > 0
      AND days_to_expiry >= 20
      AND days_to_expiry <= 45
      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) <= 0.05
)
GROUP BY strike_pct
HAVING countIf(is_call) > 0 AND countIf(NOT is_call) > 0
ORDER BY strike_pct
Run this yourself

At the -5% bucket, the average call delta was 0.836 and the average put delta, sign removed, was 0.176. The pair sums to 1.012. At +5%, the far end of the panel, the same sum came to 0.937. Across all 11 strike buckets the sum holds near 1. That is the options version of a yes and a no that always add up to a dollar.

What a quote costs to show

Spread and depth move together through a session in any book. The panel below takes every national best bid and offer printed for Coca-Cola, ticker KO, across one Wednesday session in June 2026, and buckets them into half hours of New York clock time.

QueryQuoted spread and quoted size through one KO session, by New York clock
32 rows (showing 20)
et_timemedian_spread_bpsmedian_quoted_size
04:0031.78200
04:3012.48300
05:0019.34250
05:3013.72200
06:008.74300
06:306.24300
07:006.24300
07:3010300
08:0011.26300
08:3013.76500
09:0021.28300
09:302.53900
10:001.261000
10:301.26900
11:001.251100
11:301.251200
12:001.251200
12:301.251200
13:001.251200
13:301.251200
The exact SQL behind every number
SELECT
    formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
    round(quantileDeterministic(0.5)(10000 * (toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2), toUInt64(sequence_number)), 2) AS median_spread_bps,
    round(quantileDeterministic(0.5)(toFloat64(bid_size) + toFloat64(ask_size), toUInt64(sequence_number)), 0) AS median_quoted_size
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'KO'
  AND sip_timestamp >= '2026-06-17 08:00:00'
  AND sip_timestamp <  '2026-06-18 00:00:00'
  AND bid_price > 0
  AND ask_price > bid_price
  AND sequence_number >= 0
GROUP BY et_time
ORDER BY et_time
Run this yourself

The first half hour with quotes on the tape, 04:00 ET, carried a median spread of 31.78 basis points with a combined 200 of size across the two sides. The final bucket, 19:30 ET, printed 10.01 basis points. Between them sits the regular session, where participation is heaviest and the quote is tightest. Event books show the same daily shape. A quote is always priced against who else is standing there at that hour.

Collateral sets the ceiling on size

An event contract maker posts the full loss as collateral. Showing 10,000 yes at 62 cents ties up $6,200 against that quote, and a quote on the no side carries its own requirement. There is no leverage inside the position, so the size a maker can display is a direct function of the capital on deposit. That arithmetic is worked through in event contract collateral and max loss.

Two practical reads follow for anyone watching an event book. Thin depth is frequently a capital constraint rather than a view on the price. And depth tends to rebuild once a contract settles and releases the collateral behind it, which is part of why settlement timing matters to liquidity; how event contracts settle covers that sequence.

One more thing the screen hides. The yes ask and the no ask usually sum above a dollar, and that gap is the maker's gross edge in the same sense that vig is a sportsbook's. Recovering the underlying probability means removing it, which is the exercise in how to devig betting odds.

What the venues actually disclose

Public disclosure stops well short of the quoting logic. Robinhood's explainer of its event contract structure names the market makers that provide liquidity and describes the exchange relationship, then stops before anything about how those quotes get priced. Venues publish market data interfaces without publishing the risk framework sitting behind a quote.

Public code repositories, meanwhile, carry open-source market making bots aimed at Polymarket, some of them actively maintained as of September 2026. Read those as evidence that the demand to quote these books is real. They are not desk strategies, and they run without the collateral base or the risk limits of the firms they imitate.

FAQ

How do market makers make money on prediction markets?

They quote a bid and an offer on the same event contract and collect the difference when both sides fill, less whatever informed flow takes out of them. The gross edge shows up as the amount by which the yes ask and the no ask sum above a dollar.

What is inventory risk on an event contract?

It is the risk of holding a position when the event resolves. That risk is bounded: every contract is worth either $1 or $0 at settlement, so the maximum loss on a long yes is the price paid, and on a short yes it is a dollar minus the price received.

Why do prediction market spreads widen before resolution?

The rate at which decisive information arrives climbs as the resolution date approaches, and the same news moves the price further the closer a contract sits to settlement. Widening the quote, or withdrawing it, is how a maker prices that window.

Is buying yes the same as selling no?

In payoff terms, yes. A long yes and a short no at mirrored prices leave the same exposure, which is why a two-sided event book behaves as one position rather than two.


Every panel above ships with the SQL that produced it. Open one and change the ticker or the expiry to test the same mechanic somewhere else on the Strasmore terminal.

#prediction markets#event contracts#market making#inventory risk#adverse selection