Slippage Protection Strategies for Polymarket Market-Making Bots
Thin order books on Polymarket prediction markets can turn a profitable fill into a loss in milliseconds. We break down slippage tolerance settings, dynamic spread widening, and fill-or-kill order logic that keep your bot profitable.
Polymarket order books are structurally thinner than perpetual futures or spot DEX pools — you're often looking at $200–$800 of resting liquidity within a few ticks of mid on active markets, and far less on anything below top-20 volume. A market-making bot that ignores this reality will post quotes, get picked off during a news spike, and bleed edge on every fill. The fixes aren't exotic, but they require deliberate implementation.
Understanding the Slippage Surface on Polymarket
Polymarket runs on a CLOB (central limit order book) settled on Polygon. Orders are matched off-chain by the Polymarket operator and settled on-chain through the CTF Exchange contract. The relevant slippage surface has two layers: price slippage (how far your fill lands from your quoted price when the book moves mid-fill) and settlement slippage (gas cost and latency variance at settlement time).
For market-making purposes, price slippage is the live danger. When a news event hits — a court ruling, a polling drop, a deadline extension — the aggressive side of the book clears in 200–400 ms. If your resting quotes are inside the new fair value, you fill at a loss. A bot with no slippage controls is simply a free option for informed flow.
Slippage Tolerance Settings: What the Number Actually Means
Most teams implement a max_slippage_bps parameter and treat it as a hard cancel threshold. That's not wrong, but the threshold has to be calibrated per market, not set globally.
The right reference is your expected spread. If you're quoting a 3% wide market (150 bps each side), a 50 bps slippage tolerance is 33% of your intended edge on a single leg. On a 0.5% wide market, 50 bps is your entire edge twice over. The number should be expressed as a fraction of quoted half-spread, not an absolute figure.
A reasonable starting rule: cancel or reject any fill where slippage exceeds 40% of your current half-spread. Above that threshold you're not market-making anymore; you're paying to take on directional risk you didn't price.
Implement this at the order-submission layer, not in post-trade reconciliation. By the time a fill shows up in your trade log, the damage is done.
Dynamic Spread Widening Based on Book Depth
Static spreads are a liability in thin books. A better approach is to tie your quoted spread to a real-time measure of book depth.
A simple implementation: compute a depth score as the sum of resting liquidity within N ticks of mid on both sides, where N is your target half-spread. Sample this every 500 ms. If depth drops below a threshold — say, $300 total within your quoted range — widen your spread by a configurable multiplier (1.5× to 3× depending on how thin it gets). If depth recovers, tighten back toward your base spread with a damping factor to avoid quote flickering.
depth_score = sum(bids[mid - half_spread : mid]) + sum(asks[mid : mid + half_spread])
spread_multiplier = max(1.0, base_depth / depth_score) ** 0.5
quoted_spread = base_spread * spread_multiplier
The square-root dampening keeps you from overreacting to temporary depth fluctuations. In production you'll want to cap the multiplier at something like 4× — beyond that, your quotes are too wide to trade and you should just pull them entirely.
This is one of the core techniques built into the automated trading systems we deploy for clients, because the alternative — static spreads on a dynamic book — is the single largest source of preventable loss in market-making on prediction markets.
Fill-or-Kill Logic and When to Use It
FOK orders are underused on Polymarket. The common hesitation is that FOK orders reduce fill rate, which is true. The less-discussed benefit is that they eliminate partial fills in deteriorating books.
Partial fills are dangerous specifically because they leave you with a residual position that's harder to hedge. You posted a 100-share quote, got 40 shares filled at a price that's already stale, and now you're holding inventory you need to unwind in the same thin book that just moved against you.
Use FOK for any order where your minimum acceptable fill size is greater than 60% of your total order size. For smaller quotes where a partial fill is still profitable, IOC (immediate-or-cancel) is more appropriate. Reserve GTC (good-till-cancelled) resting orders only for your passive, wide quotes where partial accumulation is part of the strategy.
Monitoring Fill Quality in Production
Slippage controls are only as good as your observability. The three metrics that matter:
- Fill-to-quote ratio: percentage of quotes that fill versus cancel or expire. A sudden drop often signals your spreads are too wide for current depth; a sudden spike suggests your spreads are too tight and you're getting picked off.
- Edge per fill: (fill price − fair value) in bps, tracked as a rolling 1-hour average. If this number is trending toward zero or going negative, your slippage controls are failing or your fair-value model is stale.
- Adverse fill rate: percentage of fills followed by a price move against you within 30 seconds exceeding your half-spread. Above 25–30% means you're consistently filling on informed flow rather than noise.
Alert on all three. Don't wait for the daily P&L to tell you something broke.
Pulling Quotes: The Underrated Slippage Defense
The most effective slippage protection is not posting quotes at all during conditions where slippage risk is elevated. Systematically pulling quotes during:
- Pre-event windows: 5–15 minutes before scheduled resolution triggers (election day, match kickoff, deadline timestamps embedded in the market title)
- High-volatility regimes: when your fair-value model's confidence interval exceeds a threshold based on recent price volatility
- Low-liquidity periods: off-peak hours where depth is structurally thin and mean-reversion time is long
Pulling quotes costs fill rate. But fill rate with negative edge is worse than no fill at all. The P&L math is unambiguous: an unfilled quote has zero cost; a filled quote with 80 bps of adverse slippage on a 60 bps spread is a 20 bps loss that compounds across every event cycle.
If you're building or scaling a Polymarket market-making operation and want these controls implemented in production-grade infrastructure, reach out to the TierZero team — we build and operate bots purpose-built for prediction market liquidity provision.
Need a bot like this built?
We design, build and run trading bots on Solana, Hyperliquid and Polymarket.
Start a projectMore from the blog
Public vs Paid RPC: How to Run a Fair Benchmark
A fair comparison of public and paid RPC endpoints must account for quotas, workload, freshness and support guarantees.
Read articleRPC Benchmark Percentiles Explained: p50, p95 and p99
Why averages hide the latency spikes that break trading bots, wallets and production blockchain applications.
Read articleHyperliquid REST vs WebSocket Benchmark: What to Measure
A benchmark plan for Hyperliquid market data that separates request latency from streaming freshness and recovery.
Read article