DEV Community

manja316
manja316

Posted on

My Polymarket Crash Trading Bot Just Hit 85% Win Rate After 120 Trades — Here Are the Raw Numbers

I built an automated crash detector for Polymarket prediction markets. After 120 closed trades, it's sitting at 84.8% win rate with $97.78 paper P&L.

Here are the actual numbers — what worked, what didn't, and the three failure modes I didn't expect.

The Setup

The bot monitors ~7,500 active Polymarket markets every 4 minutes using data from a 6.3M-row price database. When it detects crash conditions — rapid price drops combined with orderbook thinning — it places paper buy orders.

The thesis: prediction market crashes overshoot. Retail panic sells 15-40% below fair value, and prices recover within hours.

120 Trades: The Raw Results

Metric Value
Total signals 126
Trades opened 126
Trades closed 120
Still open 6
Winners ~102
Losers ~18
Win rate 84.8%
Paper P&L $97.78
Average hold time 4-8 hours
Max drawdown -$12.30

That win rate isn't from hindsight optimization. These are live paper trades executed in real-time since late March 2026.

What the Winners Look Like

The typical winning trade follows this pattern:

  1. News event drops a market 20-35% in under 10 minutes
  2. Bot detects: price drop > 15%, bid depth thins by 60%+, spread widens 3x
  3. Bot buys at the crash price
  4. Market recovers 60-80% of the drop within 2-12 hours
  5. Bot exits at recovery target
# Simplified crash detection logic
def is_crash(price_history, orderbook):
    price_drop = (price_history[-1] - max(price_history[-30:])) / max(price_history[-30:])
    depth_ratio = orderbook.bid_depth / orderbook.ask_depth
    spread = orderbook.best_ask - orderbook.best_bid

    return (
        price_drop < -0.15 and      # 15%+ drop
        depth_ratio < 0.4 and        # bids thinned out
        spread > 0.03                 # spread widened
    )
Enter fullscreen mode Exit fullscreen mode

The median winner returns 8-12% on the position in under 8 hours. Not spectacular per-trade, but at 85% hit rate it compounds.

The 15% That Lost — Three Failure Modes

1. Fundamental shifts (8 of 18 losses)

Sometimes a "crash" isn't panic — it's a genuine probability update. A court ruling, a confirmed withdrawal from a race, or an official data release that permanently changes the odds.

The bot can't distinguish between "the crowd is wrong" and "the crowd just learned something I don't know." This is the hardest problem to solve.

2. Cascading crashes (6 of 18 losses)

The bot buys the first crash. Then the market crashes again. And again. Each "recovery" is actually a dead cat bounce before the next leg down.

These typically happen during multi-day news cycles — election drama, ongoing legal proceedings, etc.

3. Liquidity traps (4 of 18 losses)

Thin markets where the crash detection fires but there's no real volume to exit into. The bot buys at the crash price but can't sell at the recovery price because the orderbook is too thin.

What I'd Change

If I rebuilt this from scratch:

News filtering. The biggest edge would be filtering out genuine information events. A simple approach: if 5+ related markets all move in the same direction simultaneously, it's probably real news, not panic.

Position sizing by confidence. Currently every trade is the same size. But a 30% drop on a market with $2M volume is a much stronger signal than a 15% drop on a $50K market.

Faster exits. The recovery target is currently static. A trailing stop or time-based exit would capture more edge from quick bounces without holding through second crashes.

The Data Behind It

All of this runs on top of a data pipeline that collects prices for every active Polymarket market. You can explore the full dataset — 6.3M+ prices across 7,500 markets — on PolyScope, the free analytics dashboard I built for this.

The pipeline collects:

  • Prices every 4 minutes for all active markets
  • Full orderbook snapshots (bid/ask depth)
  • Volume and liquidity metrics
  • Spread tracking over time

If you're building your own Polymarket tools, the API Connector skill for Claude Code handles the Gamma API integration — polling, rate limiting, and data normalization out of the box.

StochRSI Comparison — Why Crash Detection Won

I also ran a StochRSI-based momentum strategy in parallel. After 95 trades: 41% win rate, -$5.04 P&L. Killed it.

The difference: StochRSI tries to predict direction from price patterns alone. Crash detection looks at market microstructure — not just price, but depth, spread, and volume simultaneously. In thin prediction markets, microstructure signals are far more reliable than technical indicators designed for deep, liquid equity markets.

Should You Trade This Live?

I'm running it with real capital now — small positions ($2-5 per trade). The paper results are promising but prediction markets have quirks that paper trading doesn't capture:

  • Slippage on thin orderbooks
  • Settlement delays
  • Gas costs on withdrawals
  • CLOB matching priority

Paper P&L of $97.78 will almost certainly compress in live trading. My target is 50-60% of paper performance translating to real returns.

Try It Yourself

The full market data is available on PolyScope — explore any market's price history, volume, and spread data.

If you want to build monitoring dashboards for your own trading signals, the Dashboard Builder skill generates panel layouts for time-series data, and the API Connector handles the data collection layer.


Built with data from the Market Universe pipeline. 6.3M prices and counting.

Top comments (0)