Testing Market Efficiency on Polymarket
Prediction markets are supposed to be efficient. Prices aggregate dispersed information, and traders with better signals earn profits by pushing prices toward true probabilities. In theory, obvious arbitrage should not persist.
Retail markets like Polymarket feel different. They mix professionals, hobbyists, and casual bettors. That combination should create cracks.
I built a system to look for them.
Short answer: I could not find any tradeable arbitrage.
Hypothesis
I looked for inefficiencies from three sources.
First, complement mispricing. In any binary market, Yes and No should sum to exactly $1.00. If they do not, free money exists.
Second, cross-market inconsistencies. Related markets should obey simple logic. Multiple outcomes that exhaust a set should sum to their natural total.
Third, stale prices. Low-attention markets should react slowly to new information.
The first is pure arbitrage. The second is logical arbitrage. The third requires speed and domain knowledge.
Data
Over 12.6 hours of continuous scanning:
| Metric | Value |
|---|---|
| Markets tracked | 3,335 |
| Price snapshots | 51,430 |
| WebSocket updates | ~57 per 30 seconds |
The system polls the Polymarket Gamma API every 30 seconds for metadata and prices and maintains a live WebSocket connection to the CLOB for order book updates.
All snapshots are stored locally and replayable.

Finding 1: Complement Arbitrage Does Not Exist
For every snapshot, I checked whether Yes + No equaled $1.00.
Across all 51,430 observations, there were zero violations.
Every market priced perfectly.

In hindsight this is obvious. The CLOB infrastructure is designed to enforce this constraint. But it eliminates the simplest possible edge.
Finding 2: Cross-Market Relationships Are Efficient Within Costs
The more interesting test is whether related markets violate logical relationships.
Two examples:
| Market Type | Expected Sum | Observed Sum | Deviation |
|---|---|---|---|
| Fed rate outcomes | ~100% | 97.5% | -2.5% |
| Oscar Best Actor (5 slots) | ~500% | 520.6% | +4.1% |
Fed rate markets. Multiple outcomes should sum to roughly 100 percent. The observed total was 97.5 percent, well within market-making spreads.
Oscar nominations. Best Actor has five slots. The sum of Yes prices across nominees should be near 500 percent. The observed total was 520.6 percent.
That looks like a 4 percent overpricing. But Polymarket charges 2 percent fees and spreads consume another 1 to 2 percent. The apparent edge disappears after transaction costs.
The mispricings exist, but they are smaller than friction.
Finding 3: Low-Attention Markets Are Not Tradeable
The scanner surfaced thin, inactive markets with stale prices.
They all shared the same problem.
Wide spreads. Minimal depth. Tiny position sizes.
These markets look inefficient because market makers deliberately widen spreads when uncertainty and adverse selection are highest. Even when prices are wrong, there is not enough liquidity to trade them profitably.
Why Naive Arbitrage Fails
Five factors explain the results:
- CLOB efficiency corrects deviations in milliseconds
- Thirty-second polling is far too slow
- Two percent fees eliminate small edges
- Wide spreads of 5 to 10 percent on most books
- Low depth prevents meaningful sizing
The system reliably finds theoretical mispricings that are not executable.
Where Alpha Might Exist
| Strategy | Viability |
|---|---|
| Simple arbitrage | Not viable |
| Cross-market arbitrage | Marginal after fees |
| Mean reversion | Rarely applies (moves reflect real information) |
| Information edge | Viable with domain expertise |
| Event trading | Viable during price discovery |
The conclusion is simple. Execution is not the edge. Information is.
The only durable edge is domain expertise. Knowing which legal ruling will land. Which nomination has momentum. Which policy outcome is misunderstood.
That is true of every market.
Architecture
The system consists of four parts:
Scanner polls 5,000+ markets and stores snapshots in SQLite.
WebSocket listener provides real-time order book updates from wss://ws-subscriptions-clob.polymarket.com/ws/market.
Signal engine flags complement violations, anchoring effects, deadline pressure, and low-attention markets.
Backtesting framework replays historical data with realistic fees and tracks Sharpe, Sortino, and drawdown.
For market relationships, I used local embeddings with all-MiniLM-L6-v2 to cluster related markets automatically. Markets about Elon Musk, Fed policy, and Oscar nominations clustered correctly without manual labeling.
Conclusion
Polymarket is more efficient than expected.
Yes and No prices are always perfectly constrained. Cross-market relationships are priced within transaction costs. Apparent inefficiencies vanish once fees, spreads, and liquidity are considered.
This is exactly what the efficient market hypothesis predicts. Prediction markets aggregate information effectively.
The infrastructure I built works. It can scan, cluster, stream, and backtest at scale.
But no scanner can replace knowing something the market does not.
The market is doing its job.
Code and full methodology available on GitHub.