methods & assumptions · one page

The Hope Index

polls vs. cash

What is the wedge?

For each race, two probabilities are compared: what current polling implies and what prediction-market prices suggest. The wedge is their difference in percentage points:

wedge = market price − poll-implied probability

Every race is read from the Democratic side (the chamber-control rows included), so a positive (amber) wedge means the money leans more Democratic than the polls and a negative (teal) wedge means it leans more Republican. The size of the wedge is the hope: someone is betting the polls are wrong. The sign says whose hope it is. The Hope Index at the top of the front page is the average absolute wedge across the board. The wedge interestingly conflates (at least) two things: information the polls haven't absorbed yet, and sentiment — the hopes, fears, and biases of the betting crowd. The wedge cannot differentiate the two. One aim of the tracker is to see which is correct.

Market prices

Prices come from Polymarket's public API using the liquid party-level contract for each race (“Will the Democrats win the Maine Senate race in 2026?”). For example, a price of 61.5¢ for a $1 payout is read as a 61.5% implied probability. The price used is the midpoint of the best bid and best ask. Note that a thin market can sit at the same midpoint for days without a trade.

Each race also records the same midpoint from Kalshi, shown on request (“add Kalshi” under the chart). Kalshi is a CFTC-regulated US exchange whereas Polymarket is crypto-settled with a global audience, meaning the two sites likely differ in who is betting.

Poll benchmarks

The poll benchmark for each race is the RealClearPolling average, which is pulled automatically once a week on Sundays from RCP's public data feed. I do not pick polls or do any averaging. RCP was used because it has a page for every race needed. The source and date range of each benchmark are shown under the race on the tracker. The House row uses RCP's generic ballot average, which is a rough proxy for House control. A polling margin is converted to a win probability with a normal (probit) model of historical polling error:

P(win) = Φ(margin / σ),  σ = 5.5 points

σ = 5.5 is roughly the historical error of state-level polling averages against the result. This is held fixed through election day so the wedge series stays comparable over time. For example, a candidate up 5.5 points gets ~84%, and a tied race gets 50%.

Senate control has no polling margin to convert, so its benchmark is a published model probability rather than a poll. I use Decision Desk HQ's Senate forecast, entered by hand about once a week. This row is the only one where the "polls" side is a model rather than a polling average.

How to read the wedge

Assumptions / concernsWhat it does to the wedge
Favorite–longshot biasMarkets rarely price above ~90¢ or below ~10¢ even for near-certainties, because the return on these bets are marginal. Hence, big wedges on lopsided races (e.g., polls at 97%, market at 87%) are likely due to this bias rather than sentiment.
Thin marketsSome of these markets rarely trade, so one trader can move the price and their wedges are noisy.
Polls aren't "ground truth"House effects, herding, and differential response mean the poll benchmark has its own error. Some of the wedge is poll error rather than market opinion.
Who is bettingPrediction-market traders are not a representative sample. The wedge measures the mood of a rather particular crowd.
σ = 5.5 is a choiceA bigger σ pulls poll probabilities toward 50 and shrinks wedges on lopsided races, while a smaller σ does the reverse. Hence, the qualitative pattern is more robust than exact wedge sizes.
Pre-launch historyMarket prices before launch (October 9, 2026) are backfilled from Polymarket's (and Kalshi's) daily price history back to August 15. The poll line before launch is an estimate, shown as a dashed line. For each pre-launch day I take the simple mean margin of the RCP-listed polls whose field period ended in the previous 28 days, widened to the most recent three polls whenever fewer than three fall in the window, and convert it with the same probit. It tracks RCP's current average to within about a point, but the pre-launch wedges should be read loosely. From launch onward, every point is a daily snapshot with RCP's own number.

NOTE: this is a data project by Daniel A. N. Goldstein about measuring public sentiment, not investment advice. Code & data on GitHub.

← back to the tracker