Strategy · Medium risk · Advanced
Poll divergence
Trade the gap between public polling averages and market prices. Works best when polls and markets disagree and you have a view on which is stale.
Published Apr 10, 2026
The idea
For political markets, two price signals coexist: the market price and aggregated polling (e.g. 538, Silver Bulletin, RealClearPolitics). They should mostly agree. When they disagree meaningfully, one is stale or biased — and if you have a prior on which, there’s a trade.
Markets are often slow to update after a big poll release (minutes to hours). Polls are often slow to reflect real-time events (days). polybot exploits the first; the second requires a human view polybot doesn’t have.
How polybot implements it
poll_divergence ingests polling data from configurable sources, normalises to a single probability, and compares to the market price.
- Fetch polls on a schedule (default hourly).
- Convert poll margin → implied probability using a configurable translation (default: scaled logistic).
- Compute
divergence = poll_probability - market_price. - Entry when
|divergence| > thresholdAND a recency filter says the poll is fresher than the last market trade. - Exit when divergence closes, time-in-trade exceeds a cap, or the poll updates in the opposite direction.
poll_p = self.poll_source.current_probability(market.topic)
if abs(poll_p - market.last_price) > self.config.threshold \
and self.poll_source.age_seconds < self.config.max_poll_age:
side = "YES" if poll_p > market.last_price else "NO"
self.emit(Signal(market.id, side=side, size=size))
Where it works
- High-profile elections with active, well-funded pollster ecosystems.
- Congressional generic-ballot markets where polling is plentiful and markets are thin.
Where it fails
- Polling methodology drift. A pollster changes likely-voter screens; aggregate shifts; the “divergence” is an artefact, not an edge.
- House effects. Some polls consistently lean one way. polybot’s
weighted_averagetranslator applies per-pollster bias corrections, but the corrections themselves are noisy. - Late-cycle races. Markets have more information than polls in the last 48h pre-election. Divergence then is usually a market edge, not a poll edge.
Configuration
polybot strategy enable poll_divergence
polybot strategy config poll_divergence \
--poll-source silver_bulletin \
--divergence-threshold 0.05 \
--max-poll-age-hours 6 \
--max-markets 10 \
--disable-last-hours-before-resolution 48
Multiple sources:
polybot plugin enable poll_source_fivethirtyeight
polybot plugin enable poll_source_silver_bulletin
polybot strategy config poll_divergence --poll-source ensemble
FAQ
Is this edge real? It has been, empirically, in the 2024 and 2026 cycles. It’s not a guarantee. Shadow aggressively.
What if polls disagree with each other? Use an ensemble source. The ensemble’s standard deviation is a confidence signal you can use to scale size down.
Source: src/polybot/strategies/poll_divergence.py.
Want this strategy tuned for your book?
Cryptuon can adapt polybot strategies to your capital, risk budget, and markets. Shadow-deployed before you go live.