2026-04-26 · 7 min read · ← all posts

Polymarket Bot Safety: 13 Guards Every Copy Trader Should Have On

Most failed copy-trading accounts didn't have a bug, they had no safety. This is a walkthrough of the 13 guards every Polymarket copy trader should set, what they do, why they matter, and how to configure each one in PolyTortoise.

The two-minute version

Open /settings in the bot and set:

  • daily_loss_limit_usdc = 200 (auto-pause copy when 24h losses exceed $200)
  • max_position_usdc = 100 (hard cap per copy trade)
  • min_leader_trade_usdc = 50 (skip dust mirrors)
  • max_open_positions = 10 (cap concurrent positions)
  • auto_exit_on_leader_sell = on (default, close when leader closes)

Done. Now read on for why each one matters and the four engine-level guards that are always on.

The 5 per-user knobs you set yourself

1. Daily loss limit

Single most important safety guard. Without it, a leader having a bad day can drag your account down by 30% before you notice. The bot tracks rolling 24h realized P&L from copies; once losses exceed your cap, new copies pause silently and you get a Telegram alert. Resumes automatically as old losses age out of the 24h window.

Recommended: 1-2% of your starting paper balance, or 1% of your live wallet balance.

2. Max position per trade (hard ceiling)

Even if a leader places a $50,000 trade, your copy is capped to this number. Layered on top of the per-leader max_per_trade_usdc setting (which itself is capped at your default copy size on /watch).

3. Copy fraction

What percent of the leader's notional you mirror. Default 10%. Some traders set 5% for experimental leaders, 25% for high-conviction.

4. Min leader trade size (dust filter)

Polymarket has a long tail of $5 dust trades. Mirroring those wastes fees. Set to $50-200 and you only copy the leader's serious bets.

5. Max open positions

Cap concurrent holdings. If a leader rapid-fires 50 trades in 10 minutes (this happens on resolution day for a sports match) you don't want all 50 on your book. Cap at 10-20.

The 8 engine-level guards that are always on

These ship enabled by default and most users never touch them. They're the boring ones that prevent obscure failure modes:

  1. Spread limit. If the orderbook spread is > X cents, the bot won't place an order, guards against thin markets where you'd pay 5% above mid.
  2. Price drift cap. If the price moved more than Y% between the leader's fill and your placement, abort, guards against fast-moving markets where the alpha already moved.
  3. Anti-wash filter. Prevents copying back-and-forth trades from the same leader within seconds (sometimes a UI bug, sometimes intentional).
  4. Duplicate-market block. Already holding a position in this market? Don't double-down without explicit user override.
  5. Auto-rotation. Paper mode rotates positions out of low-confidence markets to keep the portfolio focused.
  6. Stale-trade reject. If we see a trade that's > N seconds old (older than our normal latency window) we skip it, assumes it's a backfill from an outage, not a fresh signal.
  7. Notional sanity. Reject trades where notional doesn't match price × size within tolerance, guards against malformed API rows.
  8. Per-user dedup. Same on-chain transaction hash twice = ignored. Prevents double-execution from race conditions.

Three things you also get for free

  • Paper mode by default. $10k virtual USDC, 7-day trial. You can't accidentally lose real money on day 1 by leaving a setting wrong.
  • Mirror leader sells. When a leader exits a position, your copy auto-closes. So if you forget to set a take-profit, the leader's exit becomes yours.
  • Per-trade alert with [Exit] button. Every copy fires a Telegram notification with an inline "Exit position" button. You can override the leader's hold with one tap.

The honest part: no setup eliminates risk

Copying a profitable wallet is still gambling. The leader can be right 65% of the time and still hit a 4-loss streak. Polymarket markets can resolve weirdly (an unexpected interpretation of "did X happen by date Y"). Your safety guards make wipeouts survivable, not impossible.

Treat your daily loss limit as a "today's tuition" budget. If you hit it, the day's done. Tomorrow the cap resets.

→ Configure your guards in /settings