DEV Community

Bill Wilson
Bill Wilson

Posted on

Why Most Polymarket Bots Lose: The Missing RSI Layer

Last week, a post on r/AI_Agents went viral: "We built a trading bot that rewrites its own rules - 87.5% win rate on BTC perps, but Polymarket burned us first." The comments were full of developers asking the same question: why does a bot that works on one market fail spectacularly on another?

I've been building Polymarket trading systems for three months. Our system runs 14 strategies. And the answer to that question cost us $350 in paper losses before we figured it out.

The Regime Problem

The r/AI_Agents team built a solid system. Regime detection, stress gating, dynamic parameter adjustment. On BTC perpetuals, where market microstructure is relatively stable, it crushed. 87.5% win rate.

Then they pointed it at Polymarket. It lost.

Here's why: prediction markets don't have stable regimes. A Polymarket contract isn't like a BTC perpetual that oscillates around a mean. It's a probability estimate that can jump from $0.30 to $0.90 on a single news event. The regime isn't changing - the entire market structure is event-driven, not mean-reverting.

Most trading bots - ours included, in V3 - treat all markets as variations of the same thing. Apply technical indicators, find patterns, trade the pattern. V3 went 0 for 52 with a -35.6% drawdown. Every single trade lost.

What RSI Actually Means Here

RSI in this context isn't the Relative Strength Index. It's Recursively Self-Improving - the bot evaluates its own performance, identifies what went wrong, and modifies its own parameters (or strategy weights) without human intervention.

Our V5 system includes a self-improvement module that does three things:

  1. Episodic memory. Every trade gets logged with full context - market state, strategy that triggered it, entry rationale, outcome. Not just P&L, but why the bot thought the trade was good.

  2. Bandit-based strategy selection. Instead of fixed strategy allocations, a multi-armed bandit dynamically weights strategies based on recent performance. A strategy that's been losing gets less capital. One that's winning gets more. The weights update every cycle.

  3. Parameter mutation. Key parameters - minimum bond price, maximum position size, Kelly fraction - get adjusted based on outcome patterns. If the bot notices it's consistently overpaying for bonds that resolve in less than 24 hours, it tightens the same-day bond filter.

This isn't theoretical. After V3's 0/52 disaster, the RSI layer identified three specific failure modes:

  • Same-day resolution bonds were resolving against us (fix: minimum 24-hour horizon, same-day only above $0.99)
  • Position concentration was too high (fix: cap single position at 10% of portfolio, down from 20%)
  • The bot was trading too many strategies simultaneously (fix: reduce from 14 to 6 active strategies, with the bandit allocating capital)

Why Static Bots Die on Polymarket

The viral r/AI_Agents bot had regime detection. That's more than most. But regime detection is reactive - it identifies that the regime has changed after the change happens. On Polymarket, by the time you detect a regime shift, the price has already moved.

What you need instead is strategy-level adaptation. Not "the market regime changed, switch modes." Instead: "this strategy has lost 3 in a row, reduce its allocation by 40% and redirect capital to the strategy that's been winning."

That's the difference between detection and improvement. Detection tells you what happened. Improvement changes what happens next.

Our Current Architecture

Polymarket Scanner (30-min cycles)
  |
  +-- Bond Harvesting (45% alloc, dynamic)
  +-- Settlement Edge (20% alloc, dynamic)
  +-- Maker Rebate (25% alloc, dynamic)
  +-- Attention Markets (5% alloc)
  +-- Parcl Real Estate (5% alloc)
  +-- Gabagool Observer (0% alloc, data only)
  |
  +-- RSI Core
        +-- Episodic Memory (reflections)
        +-- Bandit Engine (strategy weights)
        +-- ML Predictor (outcome estimation)
        +-- RL Reward Engine (parameter tuning)
Enter fullscreen mode Exit fullscreen mode

The allocations shown are starting points. The bandit engine adjusts them every cycle based on rolling performance. If Bond Harvesting hits three consecutive losses, its allocation drops and the capital moves to whatever's working.

Circuit breakers sit underneath everything: 3 consecutive losses pauses a strategy, 25% weekly drawdown halts all trading, 30% peak drawdown triggers full shutdown.

The Uncomfortable Truth

Most Polymarket bots are going to lose. The US API is now live with 23 REST endpoints, and the bot ecosystem is about to get crowded. Bittensor Subnet 50 is already providing probabilistic forecasts that competing bots consume.

The bots with fixed strategies will compete for the same edges until those edges disappear. The ones that survive will be the ones that can identify when their edge is gone and adapt - not in a year, not in a week, but within a few losing trades.

That's not a nice-to-have. That's table stakes.

One More Thing

The r/AI_Agents team mentioned Polymarket's liquidity crunch during the US KYC rollout. Their regime detection failed because it wasn't modeling for regulatory regime changes - just price/volume ones.

We've added a compliance check to our scanner. Polymarket now requires KYC and a licensed broker for US retail access. If your bot doesn't account for regulatory state changes, you're flying blind.


We're documenting our RSI approach publicly as we build it. If you're building trading systems that self-improve, I'd genuinely like to compare notes.

This article was written with AI assistance. All technical claims, code, and architectural decisions were validated by the author.

Top comments (0)