9.48 Do Prediction Markets Match Option Prices? The Binary Benchmark

Bitcoin threshold binaries: invert a listed call into the discounted risk-neutral Yes price. Polymarket sits about six points above it, widest at low probability, and the gap halves in four hours.

9.48 Do Prediction Markets Match Option Prices? The Binary Benchmark

Victoria Portnaya lines up the Polymarket contract "BTC above $27,000 at end of September?" with the Binance call BTC-230929-27000-C, same strike, hour by hour. A Yes share pays one unit if bitcoin finishes above 27,000. The call's mid is a premium in USDT, so she solves the Black-Scholes call formula, the map from spot, strike, rate, time, and volatility into a premium, for the volatility that matches that mid. She then prices a cash-or-nothing call at that volatility: the discounted risk-neutral chance of finishing above the same strike. Over 214 aligned hours the Yes averages 0.4043 and the cash-or-nothing averages 0.3484, a gap of 5.58 percentage points.

The cash-or-nothing is the discounted chance of finishing above the strike

A Yes share and a cash-or-nothing call pay the same thing at expiry: one unit if spot finishes above the strike, and zero if it finishes below. Under Black-Scholes the price of that payoff, before any prediction-market quote enters, is a discount factor times a normal probability.

$$ P_{fair,t} = e^{-r\tau}\Phi(d_2), \qquad d_2 = \frac{\log(S_t/K) + (r - \tfrac{1}{2}\sigma^2)\tau}{\sigma\sqrt{\tau}}, \qquad d_1 = d_2 + \sigma\sqrt{\tau} $$

Tau is the year fraction (T minus t) divided by 365, the day count she prints. The rate r is the constant short rate. Sigma is the volatility that reprices the listed call, in annual units. Phi is the standard normal cumulative, so Phi of d2 is the risk-neutral probability of finishing above the strike, and the exponential discounts it back to today. d1 sits one volatility-times-square-root-of-time above d2, and it shows up again in the call premium and in the hedge.

She does not print r. On a contract this short the discount is a small number, and it is worth computing before anyone treats the missing rate as an explanation of the gap. At 5% and ten days the discount factor is e to the minus 0.05 times 10/365, which equals 0.9986. That knocks 0.14 points off a contract priced at one, and about 0.05 points off a contract priced near 0.36. Use the same r inside the call inversion and inside the binary. The rate moves this binary by a few hundredths of a point. The gap is 5.58 points.

Work one hour with r set to zero, which is the case the missing print leaves you. Spot is the sample-average bitcoin price, 26,664.80. Strike is 27,000. Time is ten days, so tau is 10/365. Volatility is 0.2251. Log of 26,664.80 over 27,000 is -0.012493. Half of volatility squared times tau is 0.000694. The numerator of d2 is -0.013187. Volatility times the square root of tau is 0.03726. Divide and d2 equals -0.3539. The normal cumulative of -0.3539 is 0.3617, and with a zero rate that is the whole binary price.

Cash-or-nothing price of finishing above 27,000 versus spot, at ten days and 22.51 percent volatility. The dot is spot 26,665 and price 0.36. The dashed line is the strike.

The curve is the object. At 23,000 the binary is near zero, at 33,000 it is near one, and at the sample spot, a few hundred dollars under the strike, it is 0.36. Ten days of volatility turns the expiry step into that slope. The dot is this one hour, built so the arithmetic closes. Her average binary, 0.3484, mixes many hours.

The old article "There Is No Black-Scholes for Prediction Markets (Yet)" is about a diffusion on the Yes price itself. That kernel needs the traded price to be a martingale, and real books violate it. The old article "A Black-Scholes for Beliefs: Logit Jump-Diffusion and Tradable Belief-Vol" builds the kernel anyway, which is what you want when the contract is an election and no listed option shares the payoff. A threshold on bitcoin has a listed call. Mark the Yes off that call.

One call premium pins the binary when the rate is zero

Solve for the volatility that makes the listed call's model price equal the mid, then drop that volatility into the binary. The 0.2251 above is that root, rounded to four decimals.

$$ C_{BS} = S_t\Phi(d_1) - Ke^{-r\tau}\Phi(d_2) $$

The call pays the usual hockey stick, spot minus strike when that is positive. Its price is spot times Phi of d1, minus the discounted strike times Phi of d2. The mid is the average of the best bid and the best ask on the Binance end-of-hour summary. Implied volatility is the sigma that sets this expression equal to the mid. She substitutes that sigma into the cash-or-nothing.

The root that hits the sample-mean premium of 253.45 on this hour is 0.22512, which rounds to the 0.2251 used above. At that root, d1 is -0.3166 and d2 is -0.3539. The normal cumulative of d1 is 0.375760, and spot times 0.375760 equals 10,019.56. The cumulative of d2 is 0.361708. Strike times 0.361708 equals 9,766.12 if you multiply the six-decimal cumulative, and the unrounded product is 9,766.11. Then 10,019.56 minus 9,766.11 equals 253.45. The six-decimal version is one cent light, at 253.44. The cent is rounding. The binary is the cumulative of d2, 0.3617.

At a zero rate a single call price pins one product, volatility times the square root of time, and that product pins d2 and the binary. The product that reprices a 253.45 call here is 0.03726. Ten days at 0.2251 is one split. One day at 0.7119 is another. Both give d2 of -0.3539 and a binary of 0.3617. Invert on the option's own expiry anyway. The paper keeps two clocks: tau for the Polymarket resolution, and a second tau for the Binance expiry, and the inversion uses the option clock. The September call code is 230929, so the listed expiry is 29 September, a Friday. The question says end of September, which is the next day. The August matches are the same shape: calls coded 230901, 1 September, against questions that say end of August. Her discussion calls the mapping close. The two symbols are there because the expiries differ. A one-day gap is small with ten days left and is the whole position on the last day, which is when her uncertainty band explodes.

Treat the average spot and the average premium as one hour at ten days and the binary comes out 0.3617. The average of her hourly binaries is 0.3484. The 1.33 points are the curvature of Black-Scholes. She inverts each hour and then averages. Do that.

The gap has to clear a toll and a standard error

The measurement is the Yes price minus the binary.

$$ D_t = P_{poly,t} - P_{fair,t} $$

A Yes trade at price p enters as p. A No trade at price p enters as one minus p. Both series are on the unit interval. The 253 USDT premium stays inside the call formula. The subtraction is between the Yes and the binary. Subtract the printed sample averages, 0.4043 minus 0.3484, and you get 0.0559. She prints the mean of the hourly differences as 0.0558. The 0.0001 is what four-decimal rounding of the two averages does. Keep 0.0558 as the mean gap.

The standard deviation of those hourly gaps is 0.1264. Divide 0.1264 by the square root of 214, which is 14.629, and the standard error of the mean is 0.00864. Divide 0.0558 by 0.00864 and the one-sample t-statistic is 6.46, the number in her table. A Newey-West interval that allows for persistence runs from 0.0228 to 0.0889. A circular block bootstrap, with blocks of length the cube root of 214 rounded down to 5 hours, runs from 0.0212 to 0.0911. All three sit above zero. The lower ends are about two points, so the durable claim is a gap of at least a couple of points in this window, around a point estimate of 5.58.

Friction is a separate object from that statistical interval. She adds fees on both venues to half the sum of the two spreads.

$$ TF_t = (f_B + f_P) + \tfrac{1}{2}(s_{B,t} + s_P) $$

f_B and f_P are the Binance and Polymarket fee parameters, and s_B and s_P are the relative bid-ask spreads. She prints the average of this term, 0.0427, and she does not print the fee rates that went into it. Treat 0.0427 as the sample's average toll. The mean gap exceeds that average toll by 0.0558 minus 0.0427, which is 0.0131, about 1.3 points. Clearing the average toll compares two averages. Each hour still carries its own toll.

The binary itself is estimated, because the call mid is a noisy quote. She propagates that noise with the delta method. Call vega is the derivative of the call with respect to volatility, spot times the normal density at d1 times the square root of time. The derivative of the binary with respect to volatility is in her appendix.

$$ g'(\sigma) = -e^{-r\tau}\,\phi(d_2)\,\frac{d_1}{\sigma}, \qquad SE(P_{fair,t}) = |g'(\hat\sigma_t)|\,\frac{\hat\sigma_{C,t}}{\mathcal{V}_t} $$

Phi-lowercase is the standard normal density. V is call vega. Sigma-hat-C is the scale of quote noise: half the intra-hour high-minus-low of the call, floored at 1% of the absolute mid, and floored again at a negligible 10 to the minus 10. The standard error is the absolute binary vega times that quote noise, divided by call vega. Her Section 3.3 prints the discount inside g as e to the minus r with a subscript n, times t. Appendix Proposition A.3 prints e to the minus r tau, which is the discount in the binary price. The main-text exponent looks like a typesetting slip. The number below uses the appendix.

On the worked hour d1 is negative, so the leading minus sign makes binary vega positive: higher volatility raises the chance of finishing above a strike spot has not reached. The normal density at d2 is 0.375. Times 0.3166, divided by 0.2251, binary vega equals 0.527. Call vega equals 1,675. A 1% floor on a 253 premium is 2.53 of quote noise. Then 0.527 times 2.53, divided by 1,675, equals 0.00080. Under a tenth of a point.

Her average standard error across the 214 hours is 0.0458, about 57 times this hour. Vega collapses into expiry, and the same dollar of quote noise maps into a wide probability. The adjusted band around the binary is 1.96 standard errors plus the friction term on each side. The average width of one side is 1.96 times 0.0458 plus 0.0427, which equals 0.132. The 5.58 point mean sits inside a 13-point average band. Even so, 41.1% of the hours fall outside their own band, because the gap clusters in runs, and because the last two days of the chart have a band that covers almost the whole unit interval.

A coefficient of 0.849 halves in four hours

She fits the gap as an AR(1), a regression of this hour's gap on the previous hour's gap.

$$ D_t = a + \phi D_{t-1} + u_t, \qquad h_{1/2} = \frac{\log 0.5}{\log\phi} $$

Phi in this equation is the autoregressive coefficient. The normal cumulative was the other Phi. The half-life is how many hours it takes a shock to decay halfway, if the coefficient stays constant. She prints phi as 0.849 plus or minus 0.051, and a half-life of 4.2 hours. Natural log of 0.5 is -0.6931. Natural log of 0.849 is -0.1637. Divide and you get 4.23 hours, which rounds to her 4.2. At the two ends of the printed band, 0.798 and 0.900, the same division gives 3.1 hours and 6.6 hours. The four-hour figure is the point estimate. A 0.05 move in the coefficient moves the half-life by a couple of hours.

An augmented Dickey-Fuller statistic of -3.69, with a p-value of 0.004, rejects a unit root on this sample. The gap comes back. It comes back slowly. A stale Polymarket print, merged backward to the last trade at or before the Binance hour, produces the same shape: high phi, a half-life of a few hours, and a test that still says the series is stationary. She does not print the age of the Polymarket quote. A slow quote and slow capital share this half-life. The cross-section is what separates them.

Low fair prices and long calendars widen the gap

On the pooled 287 hours she regresses the gap on the binary price, on the binary's standard error, and on hours to expiry, with a fixed effect for each of the three markets. The coefficients are the partial effects.

$$ \Delta D \approx -0.398\,\Delta P_{fair} + 0.039\,\Delta SE + 0.0008\,\Delta\text{hours} $$

She prints the coefficients in a table, with robust standard errors 0.063, 0.019, and 0.0001, and she does not print the intercept. The card is that table as a change, holding the other two regressors and the market fixed. A fair probability 0.10 lower raises the fitted gap by 0.398 times 0.10, which is 0.0398, about 4.0 points. An extra 24 hours raises it by 0.0008 times 24, which is 0.0192, about 1.9 points a day. A standard error 0.05 higher, roughly the sample-average standard error, raises it by 0.039 times 0.05, which is 0.002, two tenths of a point. Quote-noise uncertainty is detectable in the table and economically small next to the other two slopes. R-squared is 0.221. The three terms and the market dummies account for 0.221 of the hourly variation. The path in the lower panel is mostly something else.

Mean gap by tercile of fair probability and of time to expiry, and the three regression coefficients with 95 percent intervals.

Look at the low bar in the fair-probability panel and the long bar in the time-to-expiry panel. Those two are the long ones. The middle bars are shorter than the low bar and the long bar. The linear slopes still point the way the table says, because the low-probability hours and the long-dated hours carry the mean. That is the signature of demand for cheap contracts: the Yes is richest, relative to the option, when the option says the event is unlikely, and when there is a long calendar left to be wrong. A liquidity premium or a settlement-risk haircut would have to be largest in that same corner to mimic it. She does not estimate either haircut. The slope is the evidence she has, on 0.221 of the variance.

Binance prints six points and Deribit prints eleven

Look at the blue Yes line against the red benchmark in the top panel, and at the green gap in the bottom panel. The blue line spends multi-day stretches above the red line. The green line sits on one side of zero for hours at a time. The shaded band is the binary plus or minus 1.96 standard errors, plus the friction term. Where the blue line leaves that band, the hour is one of the 41.1%.

September 2023 hourly series. Top: Polymarket Yes in blue, Binance cash-or-nothing in red, friction-adjusted band shaded. Bottom: the gap.

The September Binance gap averages 5.58 points. The three-contract Binance pool averages 6.33 points on 287 hours. The same three contracts marked off Deribit calls average 11.05 points on 2,585 hours. The $28,000 August book averages 9.57 points on 37 hours, the $26,000 August book averages 7.45 points on 36 hours while its HAC interval runs from -2.7 to 17.6 points and its median is -3.6 points, September against Deribit averages 12.48 points on 645 hours, and four Ether contracts average 1.29 points, with the March market at 18.99 and the February markets slightly negative.

The star on the $26,000 row and the HAC interval disagree. The interval is the one that respects the four-hour persistence, and it includes zero. The pooled Binance interval, 0.033 to 0.094, lies entirely above zero. The median gap on the pool is 0.064 and the 10% trimmed mean is 0.058, with 68.6% of hours positive, so the pooled center sits with the mean. The $26,000 contract is the exception: its median is -0.036.

The old article "Cross-Venue Arb: Deribit Inverse Options × Polymarket Binaries" shows why the Deribit number needs a conversion the paper does not document. A Deribit bitcoin call is paid and settled in BTC. Only the dollar value of that payoff lines up with a one-dollar binary. Portnaya reruns the three contracts against Deribit calls and does not say whether the mark was converted out of coin before the inversion. Read 11.05 points as the same sign on a larger tape. Wait for the coin-to-dollar step before treating it as a second measurement of the Binance object. She also notes that a left-skewed bitcoin smile would usually lower the risk-neutral chance of finishing above a near-the-money strike relative to the lognormal she uses, which would widen the gap. She does not estimate the correction. The 5.58 points are the Black-Scholes number.

Sixteen hedged trades, and the interval includes zero

When the absolute gap exceeds the binary's standard error plus the friction term, she opens a delta-hedged package and rebalances the spot leg every hour. The package replicates one long binary with the listed call and with spot. Selling a rich Yes means holding the opposite signs.

$$ q_0 = \frac{\mathcal{V}^{D}}{\mathcal{V}^{C}}, \qquad x = \Delta^{D} - q_0\Delta^{C}, \qquad \Delta^{D} = \frac{e^{-r\tau}\phi(d_2)}{S_t\sigma\sqrt{\tau}} $$

q is the number of one-bitcoin calls per one unit of binary payoff. V with a D is binary vega, the g-prime above, and V with a C is call vega. x is the spot position in bitcoin. Call delta is Phi of d1. She names the digital delta and does not print it. The expression is the derivative of her binary price with respect to spot: the discounted normal density at d2, divided by spot times volatility times the square root of time.

On the worked hour, binary vega 0.527 divided by call vega 1,675 equals 0.000315 calls per dollar of Yes, or 0.315 calls per 1,000 dollars. Digital delta is 0.000377 bitcoin per dollar. The calls already carry 0.000315 times 0.3758, which is 0.000118 bitcoin of delta, so the spot leg is 0.000259 bitcoin per dollar, or 0.259 bitcoin per 1,000 dollars. A call controls a whole coin. A Yes pays one dollar. Buying one call per Yes share over-hedges by a factor of about 3,000.

The average hour stays inside the entry bar. Mean standard error plus mean friction is 0.0458 plus 0.0427, which is 0.0885, and the mean gap is 0.0558. She still gets trades, because the gap runs in streaks that clear the bar on individual hours. The pooled backtest has 16 round trips. Gross PnL is 1.649 and net PnL is 1.113 after Polymarket, option, and spot costs. Costs take 0.536 off the gross, about a third. Median holding time is 3.5 hours, close to one half-life. Net alpha, the mean net return on deployed notional, is 0.067, with t equal to 2.10 and a p-value of 0.053. The HAC interval on that alpha runs from -0.008 to 0.143 and includes zero. The classical test is marginal. The interval that matches the persistence in the gap includes zero.

Cumulative gross PnL in blue and net PnL in red across the 16 trade exits.

Look at the red line. It finishes near 1.1, and the climb is the last week of September. The September contract contributes net 1.183 on 11 trades, the $28,000 August contract contributes 0.274 on 4 trades, and the single $26,000 trade loses 0.345. Those three nets sum to 1.112 against her printed pooled net of 1.113. The thousandth is rounding of the row figures. September's alpha is 0.018, with a HAC interval from -0.003 to 0.039. The contract that produces the dollars produces a small return on the notional tied up in the call and the spot. She labels the costs conservative and does not print the fee schedule behind the 0.536.

I am against sizing a book from 16 round trips in one month of 2023. The sign of the wedge is the finding worth keeping: on these three bitcoin thresholds the Yes averaged about six points above a listed call's cash-or-nothing, the gap took about four hours to halve, and it was widest at low fair probability and long maturity. The HAC interval on the trade that is supposed to harvest the gap includes zero. Polymarket resolves through an oracle and the option settles on the exchange print. The old article on the Deribit cross treats that mismatch as a way the hedge fails. This paper calls the settlement details minor and does not measure them. Mark the threshold off the listed call. Fade a rich Yes in an hour that clears the standard error plus the toll. Keep 1.113 of net PnL on 16 trades in the ledger as a backtest.

KEY POINTS

  • Invert the listed call on the same strike, and mark the Yes against the discounted cash-or-nothing price. On the September contract the Yes averages 0.4043 and the binary averages 0.3484.
  • Test the mean and keep the persistence-robust interval. The September gap averages 5.58 points, the t-statistic is 6.46, and the HAC interval runs from 0.0228 to 0.0889.
  • Fit an AR(1) before calling the gap a stale quote. A coefficient of 0.849 has a 4.2 hour half-life, and the ADF test rejects a unit root at p = 0.004.
  • Split the gap by fair probability and by calendar. A fair probability 0.10 lower adds 4.0 points, and an extra day adds 1.9 points. The standard-error slope is two tenths of a point.
  • Open a hedged trade only when the absolute gap clears the standard error plus the friction term. Sixteen trades net 1.113 after costs, and the HAC interval on the 0.067 alpha includes zero.

References


A note on AI. The ideas, research, analysis, and conclusions in this article are my own. I use AI tools to help with editing and wordsmithing, because English is not my first language, and I am not shy about that. AI-generated ideas and AI-assisted writing are not the same thing: the first is empty slop from a generic prompt, the second is a tool for communicating years of real research more clearly. Judge the work by its substance, not by whether software helped polish the prose.