Event Contract Price as Probability: How E Work
Event contract go pay $1 or $0, so price dey show probability. Learn why Yes plus No fit pass $1 and how to remove spread for clearer odds.
Event contract price na probability wey spread wrap around. The contract go pay $1.00 if the stated outcome happen, and $0.00 if e no happen. Na this fixed payout dey make the arithmetic work: 30 cents for contract wey go pay one dollar mean say market dey quote roughly 30% chance. To read the number correctly, adjust am once for the spread and once for the settlement mechanics wey dey behind am.
Wetin event contract price dey talk about probability
Everything start from the payout. Buy Yes contract for price p and you go collect $1.00 if the outcome resolve Yes, and nothing if e resolve No. If you repeat am many times, the average payout go equal the real probability of Yes. If you pay exactly that probability, you break even. The price wey you pay na the break-even probability. Na why one number fit serve both purposes.
Four terms, define once:
- Yes contract: e pay $1.00 if the outcome happen, and $0.00 otherwise.
- No contract: e pay $1.00 if the outcome no happen. Yes and No na two sides of one coin.
- Settlement: na the moment wey the contract resolve and one side collect the dollar.
- Resolution source: na the named report or feed wey the contract dey settle against. E pay based on wetin that source state, no be based on wetin happen.
Event contract quotes no dey part of the data set behind this page. Every panel below dey measure the same arithmetic where dem fit measure am directly, for listed US equity options. Call option delta dey run from 0 to 1, and e dey approximate the market odds say the contract go expire in the money. Na the same binary question event contract dey ask: price go dey above the line on settlement date, or e no go? Delta na approximation of that probability, and e use risk-neutral measure, no be forecast. Both limits dey show for the panels. The option delta guide explain the measure itself.
Why Yes and No dey add up pass $1?
Yes and the matching No cover the whole outcome space, and na exactly one of dem go pay. For options chain, the same pair na call and put for one strike and one expiry: call go finish in the money above the strike, while put go finish in the money below am. Their probabilities must add up to 100%. Na this pair for one SPY chain on one day, grouped into 2% bands around the spot price.
The exact SQL behind every number
WITH chain AS (
SELECT strike_price,
toFloat64(any(underlying_close)) AS spot,
avgIf(delta, delta > 0) AS call_delta,
avgIf(-delta, delta < 0) AS put_delta_abs,
countIf(delta > 0) AS calls,
countIf(delta < 0) AS puts
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = toDate('2026-06-30')
AND expiration_date = toDate('2026-07-31')
AND iv_converged = 1
AND volume > 0
GROUP BY strike_price
HAVING calls > 0 AND puts > 0
),
banded AS (
SELECT toInt32(round(100 * (toFloat64(strike_price) / spot - 1) / 2) * 2) AS band,
call_delta,
put_delta_abs
FROM chain
)
SELECT concat(if(band > 0, '+', ''), toString(band), '% vs spot') AS strike_vs_spot,
round(100 * avg(call_delta), 1) AS yes_prob_pct,
round(100 * avg(put_delta_abs), 1) AS no_prob_pct,
round(100 * avg(call_delta + put_delta_abs), 1) AS pair_total_pct,
count() AS strikes
FROM banded
WHERE abs(band) <= 8
GROUP BY band
ORDER BY bandFor -8% vs spot the call side dey show 91.6% and the put side 7.8%, making pair total of 99.5%. For the far end of the ladder, +6% vs spot, the two dey show 3.6% and 82.5%, totalling 86.2%. All 8 bands dey fall within rounding of 100. That flat line across the chart na the constraint wey every binary market dey under. Aggregate positioning for both sides na wetin the put call ratio dey count.
Model values dey behave. Quotes no dey. Suppose contract get 62 bid and 66 ask, while the No side get 36 bid and 40 ask. If you buy Yes at 66 and No at 40, you don pay $1.06 for position wey guaranteed to return $1.00. If you sell both at their bids, you collect 98 cents against $1.00 liability. The 6 cent gap between the two asks na overround, the amount wey sports bettor dey call vig. Na wetin the venue and market maker dey collect for standing there. The bid ask spread page explain why that gap dey exist at all.
De-vig arithmetic, step by step
Two quoted prices dey enter. Two fair probabilities wey total one dey come out.
- Take the mid for each side. Yes mid na 64 cents, No mid na 38 cents.
- Add dem. The book total na 102 cents.
- Divide each mid by that total. 64 / 102 na 62.7%. 38 / 102 na 37.3%.
- Check the sum. The pair now total 100%.
Na all be this de-vigging mean, and na the same normalization wey bettor dey use for decimal odds.
Now apply am to a tighter market. Quote the same contract 63 bid at 64 ask, with No at 36 bid and 37 ask. The mids na 63.5 and 36.5, the book total exactly 100 cents, and the de-vigged probability na 63.5%. The two answers, 62.7% from the wide market and 63.5% from the tight one, dey less than one point apart. But the honest band around dem no be the same. Any probability between the 62 cent bid and the 66 cent ask fit agree with the wide quote, so a 4 cent market dey pin the odds to about 4 points of precision and no more. If you write "62.7%" from a 4 cent market, you dey claim three digits of precision wey the market no get. Spread width na precision.
Price of 30% mean say e dey happen 30% of the time?
Calibration na the test: gather everything wey market price near 30%, then count how often e happen. Every SPY call contract on file from January 2022, snapshot about 30 days before expiry, arrange into implied probability buckets, against whether SPY close above that strike on the expiration date.
The exact SQL behind every number
WITH px AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
argMax(toFloat64(close), window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2022-01-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY session
),
snap AS (
SELECT ticker AS contract,
argMin(delta, abs(days_to_expiry - 30)) AS implied_prob,
toFloat64(any(strike_price)) AS strike,
any(expiration_date) AS expiry
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= toDate('2022-01-01')
AND expiration_date <= toDate('2026-06-30')
AND days_to_expiry BETWEEN 25 AND 35
AND iv_converged = 1
AND volume > 0
AND delta > 0.02
AND delta < 0.98
GROUP BY contract
)
SELECT multiIf(implied_prob < 0.10, '2-10%',
implied_prob < 0.20, '10-20%',
implied_prob < 0.30, '20-30%',
implied_prob < 0.40, '30-40%',
implied_prob < 0.50, '40-50%',
implied_prob < 0.60, '50-60%',
implied_prob < 0.70, '60-70%',
implied_prob < 0.80, '70-80%',
implied_prob < 0.90, '80-90%',
'90-98%') AS implied_bucket,
count() AS contracts,
round(100 * avg(implied_prob), 1) AS implied_prob_pct,
round(100 * avg(close_px > strike), 1) AS finished_above_pct
FROM snap
INNER JOIN px ON px.session = snap.expiry
GROUP BY implied_bucket
ORDER BY implied_prob_pctThe implied column dey rise across the ladder by construction. The realized column na the part wey nobody know ahead of time. For bottom, the 2-10% bucket average 4.7% implied across 4276 contracts and finish above its strike 4.9% of the time. For top, 90-98% average 94.3% and land at 97.8%. The realized share for bottom of the ladder dey far below the realized share for top. Na this calibration look like when e roughly hold.
Two caveats dey follow any table like this. The window matter: sample wey mostly cover rising prices go lift the realized column for every call bucket, while another period fit change the same measurement. And delta answer the probability wey make the pricing internally consistent, no be wetin any forecaster believe. The same chain price one whole distribution instead of one threshold (the expected move).
If we narrow am to contracts wey market call a coin flip, near 50 cents on the dollar, across six household names:
The exact SQL behind every number
WITH px AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session,
argMax(toFloat64(close), window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'XOM')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2023-01-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, session
),
snap AS (
SELECT underlying_symbol AS symbol,
ticker AS contract,
argMin(delta, abs(days_to_expiry - 30)) AS implied_prob,
toFloat64(any(strike_price)) AS strike,
any(expiration_date) AS expiry
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'XOM')
AND date >= toDate('2023-01-01')
AND expiration_date <= toDate('2026-06-30')
AND days_to_expiry BETWEEN 25 AND 35
AND iv_converged = 1
AND volume > 0
AND delta BETWEEN 0.40 AND 0.60
GROUP BY symbol, contract
)
SELECT snap.symbol AS symbol,
count() AS contracts,
round(100 * avg(implied_prob), 1) AS implied_prob_pct,
round(100 * avg(close_px > strike), 1) AS finished_above_pct
FROM snap
INNER JOIN px ON px.ticker = snap.symbol AND px.session = snap.expiry
GROUP BY symbol
ORDER BY finished_above_pct DESCImplied probability dey near 50% for every row by construction. The realized column spread out: SPY finish above its strike 68.4% of the time across 4785 contracts, against 49.9% for XOM. 6 names, one shared implied probability, and wide range of wetin actually happen. Price near 50 cents describe market odds. But any single contract still settle at $1.00 or $0.00.
Wetin be the break-even for a $0.70 contract?
Contract wey person buy for 70 cents go pay $1.00 if na Yes, and nothing if na No. Profit na 30 cents, while loss na 70 cents. The break-even probability na exactly the price. If the true probability na 70%, the position na coin flip with extra steps. Above 70%, the arithmetic dey favor the buyer. Below 70%, e dey work against the buyer, before costs.
Costs no dey move that line equally. Add one cent round-trip cost to a 70-cent contract, and the break-even go shift from 70% to about 71%. For that position, na small rounding error. Add the same one cent to a 5-cent contract, and break-even go move from 5% to 6%. That one go carry one-fifth of the theoretical edge. Fixed fees dey cause the most damage for the cheapest long shots, because the fee make up the biggest part of the price wey person pay. Order type work the same way: crossing the spread mean say person pay the full ask, while resting limit order dey wait for the price wey you name and fit never fill (market order vs limit order).
Why near certain outcome dey trade at $0.97?
Even when nobody dey dispute the outcome, e still rarely dey trade at $1.00. Four things dey inside those last 3 cents:
- Time value of money. The dollar go arrive at settlement. To pay 97 cents today for $1.00 wey you go receive in three months na return on capital, and that cash fit get other uses (keeping idle cash).
- Resolution source risk. The contract go settle based on wetin the named source report, and according to the schedule wey that source follow. Revisions, delays, and unclear wording still dey matter even when people agree on the outcome.
- The spread itself. Market wey get 96 bid and 98 ask get 97 cent mid, but no trade happen at 97. In percentage terms, the book often get the widest spread right for the edges.
- The tail. People dey use “certain” loosely. Contracts settle according to the definition inside the rulebook.
You fit measure the convergence. Take SPY calls wey price near a coin flip one month before expiry, divide dem based on wetin eventually happen, then check the average implied probability at six checkpoints.
The exact SQL behind every number
WITH px AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
argMax(toFloat64(close), window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2025-06-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY session
),
coin_flips AS (
SELECT ticker AS contract
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= toDate('2025-06-01')
AND expiration_date <= toDate('2026-06-30')
AND days_to_expiry BETWEEN 28 AND 32
AND iv_converged = 1
AND volume > 0
AND delta > 0
GROUP BY contract
HAVING avg(delta) BETWEEN 0.35 AND 0.65
),
obs AS (
SELECT g.days_to_expiry AS dte,
g.delta AS implied_prob,
if(px.close_px > toFloat64(g.strike_price), 1, 0) AS finished_above
FROM global_markets.options_greeks AS g
INNER JOIN coin_flips AS c ON g.ticker = c.contract
INNER JOIN px ON px.session = g.expiration_date
WHERE g.underlying_symbol = 'SPY'
AND g.date >= toDate('2025-06-01')
AND g.expiration_date <= toDate('2026-06-30')
AND g.iv_converged = 1
AND g.volume > 0
AND g.delta > 0
AND (g.days_to_expiry BETWEEN 28 AND 32
OR g.days_to_expiry BETWEEN 19 AND 23
OR g.days_to_expiry BETWEEN 12 AND 16
OR g.days_to_expiry BETWEEN 6 AND 8
OR g.days_to_expiry BETWEEN 3 AND 4
OR g.days_to_expiry <= 1)
)
SELECT multiIf(dte >= 28, '30 days out',
dte >= 19, '21 days out',
dte >= 12, '14 days out',
dte >= 6, '7 days out',
dte >= 3, '3 days out',
'1 day out') AS checkpoint,
round(100 * avgIf(implied_prob, finished_above = 1), 1) AS eventual_yes_pct,
round(100 * avgIf(implied_prob, finished_above = 0), 1) AS eventual_no_pct,
count() AS contract_days
FROM obs
GROUP BY checkpoint
HAVING countIf(finished_above = 1) > 0 AND countIf(finished_above = 0) > 0
ORDER BY avg(dte) DESCAt 30 days out, the contracts wey eventually finish above their strike get average implied probability of 52.6%, against 47.8% for the ones wey no finish above am. By 1 day out, the same two groups show 79.8% and 14.4%. Hindsight na im draw the split. Nobody wey read the chain at the first checkpoint fit know which contracts belong to which group. Na the same situation live event contract dey always face. Certainty go arrive on the settlement date, and price dey move reach there gradually. Settlement rules determine the exact moment: AM versus PM settled options shows how much that timing detail fit matter, while implied volatility na the answer from the same chain to the size question, no be the direction question.
Data notes and limits
Delta na stand-in for a Yes price, but e no be the same thing. E dey approximate the risk-neutral odds of expiring in the money, and e differ small from the model probability of the same event. The outcomes here compare the regular-session closing price on the expiration date with the strike. That one approximate settlement, but e no reproduce official settlement value. Every options panel filters for converged implied volatility and non-zero volume for that contract on that date, so quiet contracts no enter the sample. Each contract enter the calibration panels once, at the snapshot wey dey closest to 30 days before expiry.
Event contract pricing FAQ
Event contract price na the same thing as probability?
Na probability wey carry two adjustments. The quote include spread wey venue and market makers charge. E also price dollar wey dem go receive for settlement, no be today. If you remove both, wetin remain na market clearing estimate of the odds.
Wetin de-vigging a two sided market dey do?
E rescale the two mids make dem add up to 100%. Add the Yes mid and No mid, then divide each one by that total. A 64 cent Yes beside 38 cent No total 102 cents, and the de-vigged pair become 62.7% and 37.3%.
Why Yes and No prices dey add up pass one dollar?
One of the two must pay $1.00, so frictionless pair suppose cost exactly $1.00 together. The extra cents for the ask side na overround, wey be spread revenue built inside two sided market. If you sell both sides, you go end up below one dollar, as the mirror image of the same gap.
Contract wey price at 90 cents dey fail one time for ten?
Roughly, if market dey well calibrated across plenty similar contracts. For the SPY panel above, the 90-98% bucket get average implied probability of 94.3% and finish above its strike 97.8% of the time. But one contract still go resolve at one dollar or zero.
How much wide spread dey change implied probability?
By about the spread width. A 1 cent market pin the odds within one point. A 4 cent market leave 4 point band, and every probability inside that band dey consistent with the quote.
Every number above come from stored query over listed contract data. The SQL behind each panel dey one click away. Run the same de-vig arithmetic against live chain for the Strasmore terminal.