Polymarket Bot Tutorial · Chapter 23 of 32
Polymarket 5-minute BTC/ETH up-down markets bot patterns: 288 expirations per day, latency-critical execution, edge sources, why most retail bots lose, and code skeleton for the strategy.
What this chapter covers
Polymarket's 5-minute BTC up/down series resolves 288 times per day, compounding any edge across many repetitions. Most retail bots lose here despite the volume because the latency and edge bar is set by professional firms. This chapter is what survives.
- What the 5-min crypto markets are
- 288 expirations per day = compounding reps
- Why retail bots lose here
- Edge sources that survive
- Latency budget
- Risk: small per-trade, big per-day
- Code: 5-min strategy skeleton
What the 5-min crypto markets are
Polymarket's 5-minute crypto markets are binary up/down questions on BTC (and ETH) price. New markets open every 5 minutes; each resolves on the closing price 5 minutes after open, sourced from a published oracle.
This produces 288 markets per asset per day. The compounding opportunity for any edge is enormous: even a small per-trade edge becomes meaningful when you can take it 100+ times daily.
The flip side: the bar is set by professional firms. The mid moves in tight lockstep with the underlying price feed, and the books are usually thin on the wrong-side leg.
288 expirations per day = compounding reps
If your edge is 0.5c per trade with a 55% win rate and you can take 60 trades per day, expected daily PnL is 60 × 0.5c = $0.30 on 10-share positions = $3/day. Sounds tiny, but it compounds: 252 trading days × $3 = $750/year on near-zero capital exposure (positions resolve within 5 minutes).
For the same edge to produce $750/year on a binary that resolves once per quarter, you'd need a much larger per-trade size and much wider tails of loss.
5-min markets are the only segment on Polymarket where small-but-frequent edges add up to meaningful annual income.
Why retail bots lose here
Three failure modes that consistently kill retail entrants.
- Latency: pro firms place orders in 50-100ms; retail bots take 1-3 seconds. By the time you fire, the price is already in the new mid.
- Information asymmetry: the underlying CEX (Binance, Coinbase) prints trade tape faster than Polymarket's price feed. Bots without direct CEX subscriptions are trading on stale data.
- Spread tax: at 5-min cadence, even a 0.5c spread × 60 trades = 30c per day in unavoidable cost. Edge must clear that before being profitable.
Retail bots usually break even or lose because they can't outpace pros and can't escape the spread tax. The strategies that work for retail are not edge-against-pros; they are slow-decision strategies with specific information advantages.
Edge sources that survive
What works for retail on 5-min markets.
- Funding-rate-driven directional bias: extreme positive funding on perp futures forecasts mean reversion; trade against the funding rate.
- Open-interest-clearing windows: at the top of each hour, perp futures liquidations are more likely; fade extreme moves in that window.
- Late-window resolution arbitrage: in the last 30 seconds of a 5-min window, the resolution price is increasingly knowable; book often offers thin liquidity at probabilities that don't match the live tape.
What does not work: pure technical signals (RSI, moving averages), simple momentum copying, anything that requires the bot to be faster than pros.
Latency budget
For a viable 5-min strategy, the budget breakdown is roughly:
- Read signal source (CEX trade tape, funding rate): 100-300ms
- Compute decision: 50ms
- Place FOK order: 200-500ms
- Receive fill confirmation: 200ms
Total: 550-1050ms. Achievable on a VPS with paid RPC and a direct CEX WebSocket subscription. Not achievable on a home laptop or with free-tier APIs.
Strategies needing < 500ms total are pro territory; retail should not compete there.
Risk: small per-trade, big per-day
Sizing for 5-min markets: small per-trade, capped daily.
- Per-trade: 5-15 shares ($1-6) per market. Below 5 makes GTC sells impossible; above 15 walks the book on the entry.
- Daily total: 50-100 trades. More creates correlated exposure to a single oracle quirk.
- Daily PnL kill switch: halt if cumulative PnL down > $10 (or 5% of allocated capital). Bad days on 5-min markets are usually due to a strategy assumption that has broken; survive the day, debug, redeploy.
The asymmetry between per-trade size and daily count is intentional. You're playing breadth, not depth.
Code: 5-min strategy skeleton
Reference: the trading loop for a funding-rate-driven 5-min bot.
def five_min_loop():
while True:
wait_for_next_window_open() # blocks until xx:x0:00 or xx:x5:00
markets = find_open_5min_markets("btc")
if not markets: continue
funding = fetch_perp_funding_rate("BTCUSDT")
bias = "DOWN" if funding > 0.001 else "UP" if funding < -0.001 else None
if bias is None: continue
market = markets[0]
token = market["clobTokenIds"][0 if bias == "UP" else 1]
book = fetch_book(token)
if not book.best_ask or book.best_ask > 0.55: continue
place_fok(token, "BUY", book.best_ask + 0.01, 10)
Production-version additions: track positions across the 5-min window for accurate exit timing, paper-trade for 30 windows before live, halt on consecutive losses.





