Election Night — March 17, 2026
← Back to IL9Cast
Analysis February 2026

Bid-Ask Spreads Even Moses Can't Part

How one outsized Kalshi trade exposed the flaw in raw prediction market data, and why IL9Cast didn't flinch.

Moses parted the Red Sea and walked through on dry ground. Last week, a trader on Kalshi tried something similar, parting right through Laura Fine's bid-ask spread and keeping going.

Here's what happened. Laura Fine's Kalshi market had a bid-ask spread of 14–16%. That means the most any buyer was willing to pay was 14 cents, and the cheapest any seller would accept was 16 cents. That two-cent gap is the market's actual consensus: quiet, unglamorous, and real.

Then someone bought aggressively. They swept through every ask on the order book, pushing the last trade price all the way to 30%. Kalshi's headline number dutifully updated to 30%. To a casual observer, Laura Fine had just doubled her odds overnight.

But she hadn't. The moment that buyer stopped, the spread settled right back to 14–16%. No one else was willing to pay anywhere near 30%.

The problem

Most prediction market trackers would have shown you 30%. That's the last trade price: the number Kalshi displays, the number APIs return, the number every aggregator blindly passes through. It's technically correct and practically useless.

The last trade price tells you where a transaction happened. The bid-ask spread tells you where the market actually is. When those two diverge, you have to choose which one to trust. Most trackers don't even notice the difference.

What IL9Cast saw instead

IL9Cast didn't show 30%. Not even close. Here's why, layer by layer:

Manifold Markets 40% weight
Manifold runs a completely separate market with its own traders. It never reacted to the Kalshi spike. This alone anchored 40% of our aggregate to reality.
Kalshi Midpoint 12% → 28%
We calculate the midpoint of the current bid-ask spread: (14 + 16) / 2 = 15%. Not 30%. Because the last price was outside the spread, our spread-based throttle boosted this component's weight from 12% to 28%.
Kalshi Last Price 42% → 20%
The outlier trade does contain some signal (someone was willing to pay 30 cents), so we don't ignore it. But our spread throttle detects that last price (30%) is above the ask (16%), and automatically cuts its weight from 42% down to 20%.
Liquidity-Weighted 6% → 12%
This component uses the spread to calculate a volume-adjusted price, landing around 15%. Its weight doubles under the throttle, further anchoring the aggregate to the spread.
Spike Dampening ±3% cap
Even after all that weighting, the final change is capped at 3 percentage points per 3-minute interval. The outlier bleeds in slowly and usually gets corrected before it matters.

The result: while Kalshi's headline read 30%, IL9Cast showed Laura Fine around 15–17%, almost exactly where the spread said the market actually was. No drama, no misleading spike, just the real number.

Why not just ignore the outlier entirely?

It's tempting to throw out the last trade price when it's clearly an outlier. But that would be throwing out real information. Someone did pay 30 cents for Laura Fine contracts. Maybe they know something. Maybe they're wrong. The market will sort it out.

Our approach is to listen but not defer. The outlier trade gets 20% weight instead of 42%, still a voice at the table but no longer the loudest one. The spread-based components (midpoint and liquidity-weighted price) take up the slack, keeping the aggregate grounded in what the market is actually willing to trade at right now.

The bottom line

Every prediction market has these moments. A big order sweeps the book, the headline number lurches, and a thousand dashboards parrot the spike as if it's gospel. The spread is still sitting there, quietly telling you the truth.

The takeaway

Raw prediction market prices tell you what happened last. IL9Cast tells you what the market actually thinks right now. The difference matters most exactly when the stakes are highest — when a single trade tries to part the sea.