We lost $270 building a Polymarket bot — the complete audit
Between April and May 2026 we built two generations of trading bots for Polymarket's 5-minute Bitcoin/Ethereum Up/Down markets, logged over 4,000 trades, and lost about $270 of real money learning what actually matters. This is the full post-mortem, with every number. If you're thinking about building or buying a Polymarket bot, this article is the tuition we already paid for you.
TL;DR — the six facts
- Our signals had a small statistical edge on paper. Execution ate all of it and then some.
- A shadow A/B test reported +11% ROI that never existed — it simulated fills with zero friction. The same strategy lost 27% in reality.
- The single worst loss (−$591 in 3 days) came from a "safety feature": the bot auto-adopting wallet positions it hadn't opened — including manual bets on weather markets in Wellington.
- Take-profit slippage averaged −8.8 cents per trade vs. logged prices. Stop-losses fired below their trigger 86% of the time.
- The only live-profitable configuration won just 40% of its trades — the edge came from asymmetric exits (cut losers at −10¢, hold winners to resolution), not from predicting better.
- An ML model with 57% training accuracy delivered 48–50% (a coin flip) live. 5-minute crypto regimes are not stationary.
Generation 1: "para_bot" (April 2026)
The first bot traded BTC/ETH Up/Down markets on 5 and 15-minute windows with multi-timeframe momentum consensus (30s/1m/5m), a price-band entry filter, programmatic take-profit and stop-loss, and later an ML gate. It was patched live at least 15 times in 48 hours at its worst point. Audited results:
| Metric | Value |
|---|---|
| Real PnL | −$153 |
| Shadow (frictionless) ROI, same strategy, 5-min | +0.8% to +11.9% |
| Real ROI, 5-min | −27% |
| Loss from auto-adopting unlogged wallet positions | ≈ −$591 in 3 days |
Where the money actually went
1. The frictionless simulation lie. Our A/B harness compared five configurations in "shadow mode": it entered at the logged price, filled take-profits at the exact limit, and exited stop-losses at the exact trigger. Result: +11% ROI. Reality on the same signals: −27%. The gap decomposed into entry slippage (mean −1.2¢), SL overshoot (fired below trigger 86.4% of the time, mean −6¢ past it), and TP slippage (mean −8.8¢ per trade — many fills at zero slippage, but a brutal tail: −18¢, −22¢, −29¢, −36¢). If your backtest doesn't model these, your backtest is fiction.
2. The orphan-adoption catastrophe. After a JSON corruption wiped part of the bet log, we added "orphan recovery": any position in the wallet without a logged bet was adopted and managed with synthetic TP/SL. It seemed prudent. It adopted the owner's manual bets — tennis matches, MLS spreads, and temperature markets in Wellington, Austin and Buenos Aires — and managed them into the ground: about −$591 in three days. The lesson is absolute: if the bot didn't open it, the bot must not touch it.
3. Ghost fills. Polymarket's positions API lags several seconds behind fills on 5-minute markets. Orders that actually filled showed zero shares when verified, so the bot marked them "ghost" and abandoned them — leaving real, unmanaged positions, over and over. The eventual fix: verify fills by USDC balance delta (did money actually leave the wallet?), not by the positions endpoint.
4. Small, dumb, expensive things. Buying Up and Down of the same market simultaneously (guaranteed loss: paid $1.01 for a $1.00 payout). Selling theoretical share counts instead of observed ones. Validating entry price against one API while executing against another (bought at 7¢ in an illiquid book through a filter that "guaranteed" 30–70¢). Non-atomic JSON writes corrupting the log twice.
The audit that saved the project
We stopped, froze the code, and ran a three-phase audit: (1) a full accounting of every logged trade against reality; (2) an autopsy of every real loss; (3) a bootstrap re-simulation of the strategies using the measured friction distributions. Phase 3's verdict: the 5-minute signal had a modest real edge (realistic ROI ≈ +7%, 90% band +5% to +10%) — the 15-minute markets had none — and the bot had died of operational debt, not lack of alpha.
Generation 2: Uruguabot (May 2026)
Rewritten from scratch in ~15 small files around post-mortem rules: no orphan adoption ever, no synthetic bets, empirical slippage in the simulator, atomic writes, USDC-delta fill verification. It traded real money May 21–30, 2026:
| Phase | Config | Win rate | ROI |
|---|---|---|---|
| Hypothesis A (May 21–27) | Symmetric TP/SL | 49% | −10.0% |
| Hypothesis B (May 27–30) | SL at exec −10¢, hold winners to resolution | 40% | +7.3% |
Hypothesis B is the interesting row. We analyzed a batch of recent winning and losing bets with tick-level price history and found a brutal asymmetry: winners drifted up gently (median drawdown −3¢) while losers collapsed (median +30¢ against us). So we stopped trying to predict better and instead made the exits asymmetric: stop-loss tight at −10¢ from execution, no practical take-profit, winners held to binary resolution. It was profitable at a 40% win rate — average loss −$0.85, average win +$2.46.
And yet the whole live experiment was still a net loss, because the ghost-fill bug cost more than the strategy earned. The infrastructure lesson, one more time, in cash.
What we validated after the fact
Against the full live log: BTC-only would have improved PnL by +$26 (BTC: 51% WR, −$2.84; ETH: 42% WR, −$25.96). A volatility guard is justified by mechanism: measured SL slippage was median −2¢ but −24¢ at the worst decile, concentrated in violent regimes — one trending day stopped out nearly every entry, sold 25–45¢ below trigger. Loss-streak cooldowns and momentum filters were also tested and did not help, so we don't ship them.
What all of this is worth to you
If you're building your own bot: steal these lessons, they cost us $270 and two months. If you'd rather start from working infrastructure — the execution layer with every fix above, the calibrated simulator, the risk rails, the monitor — that's exactly what Uruguabot is: our full source, sold once, with this article as its marketing page. No profit promises; you've just read the real numbers.
Past performance — including ours — does not predict future results. 5-minute crypto markets are close to efficient; any edge is thin, regime-dependent, and can vanish. Never trade money you cannot afford to lose entirely.