Automated trading systems can amplify losses just as fast as they amplify gains. Without hard guardrails, a single misconfigured parameter or an unexpected market event can drain your wallet in hours. PolyBot ships with a layered risk system — the more layers you activate, the safer your capital.
Human traders instinctively stop trading when they're on a bad streak. Automated bots don't have that instinct — they will keep firing signals at the same rate whether they're up 20% or down 20%. The risk management layer in PolyBot is what gives the bot that "stop and think" behaviour that prevents a bad afternoon from becoming a catastrophic loss.
The system is designed around three principles:
PolyBot enforces a progression through three distinct modes. You should not skip Paper Mode.
Real signals, real market data — but completely fake money. No API calls to Polymarket's order placement endpoint. Perfect for validating your config and watching the bot's behaviour for 1–2 weeks before risking real capital.
PolyBot makes real authenticated API calls (reads order books, authenticates with your keys) but does not submit any orders. Use this for 24–48 hours to confirm your API credentials work and the bot's routing logic is correct.
Orders are submitted to the CLOB. Only activate after 50+ paper trades with positive expectancy and at least one clean Dry-Run session. Start with minimum position sizes.
# Set trading mode in config.yml global: trading_mode: paper # Options: paper | dry_run | live paper_starting_balance: 1000 # Virtual USDC for Paper Mode simulation
Sports markets on Polymarket are statistically the hardest to predict and have the highest variance. The Sports Bet Filter blocks the Copy Bot from mirroring any position in markets tagged with the sports category unless you explicitly allowlist specific sport types.
If the total available liquidity on either side of a market's order book is below min_book_depth_usdc, the Copy Bot skips the trade. Thin markets mean large slippage and the risk of being unable to exit. Default threshold is $200 USDC on each side.
Sets the maximum USDC value of any single open position. Even if proportional sizing would suggest a larger bet, the bot never exceeds this cap. This is your most important single-trade guard.
The most critical circuit breaker. If total realised losses on the current calendar day (UTC) exceed daily_loss_limit_usdc, the bot enters a paused state and stops placing new trades. It sends an immediate Telegram alert. The bot remains paused until midnight UTC (when the daily counter resets) or until you manually resume via the dashboard.
copy_bot: sports_bet_filter: true sports_allowlist: [] # e.g. ["esports"] to allow specific types min_book_depth_usdc: 200 # Skip markets with < $200 USDC per side max_position_usdc: 100 # Hard cap per single trade daily_loss_limit_usdc: 50 # Pause if day losses exceed $50 near_expiry_block_minutes: 30 # No new trades on markets expiring < 30 min extreme_price_guard: true # Block trades above 0.95 or below 0.05 instant_cashout: false # Auto-sell if position drops 40% from entry wallet_blacklist: [] # List of wallet addresses to never copy