Loading ticker...
Loading… @TheOddsGap
Home · Research · Exchange price autopsy

Exchange price autopsy

For months this site published exchange prop prices that could not be bet. Here is the arithmetic, the damage, and the three checks that now make it impossible.
The Odds Gap · Published 2026-08-12 · Found 2026-08-12 · killed the same day · signal v1 retired publicly

The short answer

For months this site published exchange prop prices that could not actually be bet: 635 of 3,339 quoted ProphetX prop sides, about 19 percent, were derived from the opposite side of the order book rather than read from a real offer. The confidence signal's own selection concentrated on exactly those, with 597 of the 602 flagged plays sitting on ProphetX, or 99.2 percent, resting on a derived price. Repriced at the measured correction the published record's 8,691 graded plays turn from +7.59 percent to -3.46 percent, so the record measured a pricing defect rather than an edge; the bug was killed and signal v1 retired publicly the day it was found, and no money was ever staked on any of it.

Why this page exists

A research section that only publishes work it is proud of is marketing. The useful test of whether the two studies next to this one can be trusted is what happens on this site when a number turns out to be wrong. So this page is the account of the worst pricing failure this site has had, written the day it was found.

What happened

On 2026-08-12 the founder was about to stake real money on five prop bets that this site's own signal had flagged, all priced at the prediction market ProphetX. He opened the ProphetX app and screenshotted each one. Every single price was far worse than what had been published, and every gap ran the same direction.

BetOur published priceActual price in the app
Spencer Horwitz Under 0.5 RBIs-198-300
Jacob Gonzalez Under 0.5 RBIs-240-375
Jared Young Under 0.5 RBIs-235-350
Colton Cowser Under 0.5 HR-684-1250
Jonah Heim Under 0.5 HR-541market not findable

The arithmetic

ProphetX is an exchange. Its API returns, for each outcome, a stack of takeable offers, each one funded by a trader who wants the other side of that bet. Two resting orders cannot cross, so the two displayed sides always sum to more than 100 percent implied. Measured on one live MLB event: 195 of 195 two-sided markets, minimum 100.59 percent, median 106.24, not one below 100.

When our code decided a side had too little money resting on it, it filled the gap by deriving that side's price as 100 percent minus the opposite side's implied probability. That is better than the real price by the entire width of the book, by construction. It does not find a cheaper seat. It quotes a seat already occupied by a trader who also wants our side, and who will therefore never take the other end of our bet.

The trigger underneath was a units mistake. The order-book walk read each level's stake field as dollars a taker could put down. It is not: stake is the resting counterparty's own money, the maximum winnings, and a separate field carries the takeable dollars. On a heavy favourite the two differ by the odds. Colton Cowser's Under book read $37.72 of one and $457.26 of the other. So the hundred dollar minimum-fill gate failed on sides holding hundreds of real dollars, and the code fell through to the mirror every time. Every one of the five bets above was an Under on a 0.5 line, which is the exact shape where the misread is largest.

Cowser reproduces end to end. The Over top was +670 with $1,418 resting, which derives to -684, which is what we served. The Under book actually held -870 at $26.88, -1200 at $60 and -1250 at $370.38, so a hundred dollars fills at -1250. That is the number in the screenshot.

How bad

Measured against the raw order books rather than against reasoning: of 49 derived sides whose own book could fill a hundred dollars, 49 were published better than that fill. Median gap 7.9 probability points, maximum 20.2, zero exceptions. Sixteen more were published on a side holding literally nothing.

Across the board, 635 of 3,339 quoted ProphetX prop sides were derived, about 19 percent. But the signal did not sample the board evenly. Replaying its own selection over that day: 602 of 753 flagged plays sat on ProphetX and 597 of those 602, or 99.2 percent, were derived. Seventy-nine percent of every prop play the signal would flag rested on a price nobody could get. The selection logic was hunting for the best available number, and the fabricated numbers were always the best available.

An earlier bug ledger entry had asserted that a derived pair always sums to over 100 percent and so could never manufacture an arbitrage. That was false, and it was observed false on the live board the same day: one market served Over -180 and Under +211, a 3.6 percent arbitrage inside a single book.

What it did to the published record

This site published a signal record page with a live performance figure on it. 7,512 of the 8,691 graded plays, 86 percent, were priced at ProphetX, and 5,536 of 5,636 Strong tier plays, 98.2 percent. The page never mentioned that concentration.

SlicePlaysAs publishedRepriced
Whole graded record8,691+7.59%-3.46%
Strong tier5,636+10.42%-2.50%
Never priced at the affected venue1,179+1.18%unchanged

Break-even sat at about 5.1 probability points of correction, below the 7.9 that was measured. And the repriced column is the generous reading: at the real price most of these plays would never have been flagged at all, because the edge that flagged them was the pricing error. Removal, not repricing, is the more honest counterfactual, and it leaves 1,179 plays.

Signal v1 was retired publicly the same day and the real-stakes forward test was canceled before its first bet, at zero wagers and zero dollars. The retirement is a label and nothing else: no row, interval, chain link or scoring value was edited, and all three frozen hashes stay byte-identical. That is the only reason the claim "the scoring never moved, the prices under it were wrong" is checkable by anyone else. The record is still up, with the correction on it, which is the living example of the rule this section runs on.

The three permanent checks

These are the generalizable outputs. Each is written so it can be tested rather than remembered.

1. A served two-sided price pair from a single book may never sum below 100 percent implied. Genuine two-sided pairs carry a hold. A pair that does not is either an arbitrage against a real book, which it is not, or a price we invented. This check costs nothing, needs no venue access, and would have fired from our own payload on day one.

2. Never derive an order-book price from the opposite side on a venue that already publishes both sides as offers. The test for which kind of venue you are looking at is the same arithmetic: if the two displayed sides sum above 100 percent, they are both takeable and there is nothing to derive. Where a venue publishes bids only, derivation is correct and necessary. Getting this wrong is not a coding error, it is a misreading of the venue, so it needs one end-to-end reconciliation against the venue's own screen before its prices are trusted, and again whenever the pricing path changes.

3. A record concentrated in one venue inherits that venue's bugs, and has to be reported by venue as well as in total. Concentration is not a footnote about diversification. It is a single point of failure for the entire claim, and one venue's defect became the whole result.

The part that actually cost the most

Two earlier fixes had landed on this exact code. Both were correct. Both accepted the surrounding documentation's model of how the venue worked, and that model was wrong. When a symptom survives two correct fixes, the answer is one layer up.

Nobody put a hundred dollar bet next to the app until the day this was found. An exchange integration needs one end-to-end reconciliation against the venue's own screen before its prices are trusted. That is now a rule here.

What is still open

The kill switch shipped the same day and drops derived sides at the fetch boundary, so they reach no surface at all. That is stop-the-bleeding, not the repair. The repair is to walk the correct capacity field, quote the honest own-book price and delete the mirror, and that is a pricing change that belongs in a reviewed commit rather than in an incident. Until it lands, every prop-based study on this site is on hold, including a finished one that would otherwise be published in this section.

The data behind this

Every figure above was computed from the site's own price archive, and the whole archive is free to download on the historical odds data page: one row per snapshot, book, market and side, with de-vigged fair probabilities already in the file. If you rebuild this study from it and get a different answer, that is a result worth sending to admin@theoddsgap.com.

Revision history

2026-08-12
First publishedWritten the day the defect was found and the kill switch shipped. The underlying capacity misread is documented here as open, not fixed.
Standing
If this study is ever corrected or superseded, the note goes here and the page stays up. Work is not quietly deleted when it turns out to be wrong.

The morning gap report.

The best gaps on the board, in your inbox at 10 AM ET. Free.