polybot

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.

  1. Fetch polls on a schedule (default hourly).
  2. Convert poll margin → implied probability using a configurable translation (default: scaled logistic).
  3. Compute divergence = poll_probability - market_price.
  4. Entry when |divergence| > threshold AND a recency filter says the poll is fresher than the last market trade.
  5. 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

Where it fails

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.