Momentum Trading on Prediction Markets
Combined monthly trading volume on Kalshi and Polymarket grew from under $5 billion in September 2025 to roughly $24 billion by April 2026, according to Pew Research Center analysis of data from The Block. That growth has brought real liquidity to a wider set of markets, and with liquidity comes the possibility of systematic, rules-based trading. Momentum is one of the most tractable strategies to start with, because the mechanics are visible: you are trading the gap between where a contract is priced now and where it is likely to be priced in an hour, a day, or a week.
Why Momentum Exists in Binary Contracts
A prediction market contract pays $1 if an event resolves true and $0 if it resolves false. The price at any moment is the crowd's probability estimate. Momentum appears because that crowd does not update instantaneously. When new information arrives, a subset of traders reprices immediately; the rest adjust over minutes or hours. That lag creates drift: a directional tendency in the contract price that persists briefly after the catalyst.
This is not unique to prediction markets. In equities, the same mechanism is called post-announcement drift: slow market incorporation of new information produces forecastable short-term price direction. In binary contracts the dynamic is tighter because the price is bounded between 0 and 1 and must converge to a hard value at resolution. That boundary compresses the profit window but also reduces the tail risk of an open-ended position.
Two Distinct Momentum Setups
Traders conflate two very different setups under the label 'momentum.' It helps to separate them.
- News-driven repricing. A data release, a court ruling, a political development, or a sports score moves the probability sharply in seconds. The first-mover captures the repricing. Everyone after the first few seconds is chasing, not leading. This is latency-sensitive and not friendly to discretionary traders.
- Resolution drift. This is the structural pull toward 0 or 1 as an event approaches its settlement date and the likely outcome becomes clearer. A contract trading at 0.72 two weeks before resolution that drifts to 0.85 on no single news event is exhibiting resolution drift. The edge here is patience and position sizing, not speed.
- Cross-market confirmation. A move in one related market, say a Federal Reserve rate decision contract, often precedes correlated moves in inflation, employment, and macro contracts on the same platform. Watching for that lead-lag relationship is a form of inter-market momentum.
Resolution drift is the most accessible setup for systematic traders. It is slower, does not require co-location, and can be backtested against historical closing prices.
Filtering Noise in Thin Order Books
Prediction market order books are thin outside the top two or three contract categories. On Polymarket, sports is the single largest category at roughly 39% of volume, with politics (32%) and crypto (20%) behind it, per Pew Research Center data since July 2024. On Kalshi, sports alone has accounted for roughly 80% of volume over the same period, though that figure is shifting as parlays and other categories grow. Everything outside those top categories trades with wide spreads and shallow depth.
In a thin book, a single large order can move the price several cents without reflecting any new information. That is noise, not signal. Three filters help distinguish the two:
- Volume confirmation. A price move on above-average volume is more likely to carry information than one on a single taker print. If the last 10 trades are all small and from the same side, be skeptical.
- Bid-ask spread relative to the move. If the spread is 4 cents and the price moved 3 cents, you have not cleared the spread. The apparent momentum could reverse entirely on the next print. Only trade when the move materially exceeds the prevailing spread.
- Time to resolution. A contract with 60 days remaining has far more time for noise to overwhelm short-term drift. Contracts inside 14 days with a developing trend are cleaner because randomizing factors have less time to act.
- Open interest growth. A price move accompanied by growing open interest suggests new capital entering on the move, which tends to sustain drift. Price moves on flat or declining open interest can be temporary.
The Regulatory Backdrop for US Traders
US persons have two legal venues. Kalshi has been a CFTC Designated Contract Market since November 2020 and is the longer-tenured default. Polymarket US (operated by QCX LLC) launched December 3, 2025, after Polymarket acquired a CFTC-registered exchange and received an Amended Order of Designation from the CFTC in November 2025. The international polymarket.com remains geoblocked for US IP addresses under a 2022 CFTC settlement that imposed a $1.4 million civil penalty; VPN access violates Polymarket's terms of service and forfeits any federal recourse. Trade on the regulated venues only.
A Banger Strategy: Resolution Drift Momentum
The strategy below enters a contract when it crosses a rolling momentum threshold within a defined time-to-resolution window, then exits either at a take-profit level or at a time-based stop. It runs via Banger, which handles order routing to Kalshi or Polymarket US while you hold your own venue keys. Banger never custodies funds.
import banger
from banger import Strategy, MarketSnapshot, Order
class ResolutionDriftMomentum(Strategy):
"""
Buys YES when:
- contract price has risen >= DRIFT_THRESHOLD over the lookback window
- time to resolution is within [MIN_DAYS, MAX_DAYS]
- bid-ask spread is <= MAX_SPREAD
Exits at TAKE_PROFIT or after HOLD_HOURS, whichever comes first.
"""
DRIFT_THRESHOLD = 0.06 # 6-cent move over lookback
LOOKBACK_HOURS = 24
MIN_DAYS = 3
MAX_DAYS = 14
MAX_SPREAD = 0.04 # ignore markets wider than 4 cents
TAKE_PROFIT = 0.08 # exit when up 8 cents
HOLD_HOURS = 48 # time-based exit
def on_snapshot(self, snap: MarketSnapshot) -> list[Order]:
orders = []
for market in snap.markets:
spread = market.ask - market.bid
if spread > self.MAX_SPREAD:
continue
days_left = market.days_to_resolution
if not (self.MIN_DAYS <= days_left <= self.MAX_DAYS):
continue
drift = market.price_change(hours=self.LOOKBACK_HOURS)
if drift >= self.DRIFT_THRESHOLD and not self.has_position(market):
orders.append(
Order.buy_yes(
market_id=market.id,
size_usd=self.risk.per_trade_cap, # from risk envelope
take_profit=market.mid + self.TAKE_PROFIT,
time_exit_hours=self.HOLD_HOURS,
)
)
return ordersRun it in paper mode first to see how it behaves on the live order book without risking real capital:
pip install bangertrades
banger run strategy.py --paper --venue kalshiRisk Envelope: The Part Most Traders Skip
Momentum strategies in thin markets can go wrong fast. A single contested resolution, a news reversal, or an insider-informed participant can erase several winning trades at once. TRM Labs and other researchers have flagged clusters of potentially coordinated activity on prediction markets around major events, and both Kalshi and Polymarket published new anti-insider-trading measures in March 2026. Legislative proposals in Congress have called for explicit bans on MNPI use in prediction markets, confirming that asymmetric information is a real feature of these markets, not a theoretical one.
Banger's risk envelope sits outside the strategy code and enforces four constraints regardless of what the strategy signals:
- per_trade_cap: maximum dollars allocated to any single contract entry.
- daily_loss_stop: the strategy halts for the calendar day once this loss threshold is hit.
- max_open_positions: prevents stacking too many correlated contracts in the same news cycle.
- kill_switch: a manual or automated boolean that halts all new orders instantly.
Declare the envelope in a separate config file so it cannot be accidentally overridden inside strategy logic:
# risk.yaml
per_trade_cap: 50 # USD
daily_loss_stop: 150 # USD
max_open_positions: 6
kill_switch: falseWhat to Watch For
A few known failure modes for momentum in this asset class:
- Wash trading inflates apparent volume. A Columbia University study estimated roughly 25% of Polymarket's historical volume reflected wash trading, though fees introduced in 2025 have reduced the incentive. Do not use raw trade count as a signal without checking that open interest is growing.
- Resolution edge cases. Prediction markets sometimes resolve ambiguously or later than expected. If you are holding a near-expiry position and resolution is delayed, your time-based exit logic may need to account for this.
- Correlated liquidation. When a major political or economic event resolves, many contracts reprice simultaneously. Holding six open positions across loosely related markets in the same news cycle is effectively one concentrated bet.
- Insider-informed moves. A sudden sharp move with no visible public catalyst should be treated as a red flag, not a momentum entry. Both platforms have surveillance obligations under their DCM rules, and the CFTC treats misuse of material non-public information in event contracts as a potential violation of the Commodity Exchange Act.
The Practical Edge
The genuine edge in prediction market momentum is not that the markets are inefficient in some deep sense. It is that most participants are casual, position sizes are small, and updating behavior is slow. That creates short windows of exploitable drift. A rules-based system running 24/7 with hard risk limits captures that drift more consistently than manual trading, and it does so without requiring any opinion on the underlying event. You are trading the repricing, not the outcome.