Trading Strategies

PolyBot ships two bots with very different trading philosophies. Understanding when and why each strategy fires is the key to configuring them effectively — and knowing which levers to pull when market conditions change.

Overview: Two Bots, Different Strategies

The Copy Bot is a social-signal bot. It watches the on-chain behaviour of top Polymarket wallets, scores them on a rolling performance formula, and mirrors their positions in real time. It does not attempt to predict outcomes — it delegates that prediction work to human experts with skin in the game.

The 15-Minute AI Trader is a quantitative signal bot. It ingests 42+ real-time indicators every 15 minutes, runs an ensemble ML model, reads the Chainlink oracle feed, and looks for structural price inefficiencies in the CLOB order book. It makes its own predictions — independent of any human trader.

Both bots can be run simultaneously. When you use the Bundle plan, they run as separate Docker services sharing a single config file with distinct sections for each bot.

Tip: New users should enable Paper Mode for at least two weeks before going live with real capital. Both bots support fully simulated paper trading — real signals, fake money.

Strategy Comparison

Strategy Bot Est. Accuracy Risk Level Best For
Leaderboard Copy Copy Bot ~65–72% Low–Med Beginners, passive traders
ML Prediction 15M Bot ~61–68% Medium Quant-focused, high-volume
Snipe Mode 15M Bot ~80–90% Low Near-expiry alpha, low risk
Arb-First 15M Bot ~99% Very Low Risk-free guaranteed fills

Copy Bot Strategies

Leaderboard Copy

The foundation of the Copy Bot. On startup, PolyBot queries Polymarket's public GraphQL endpoint to fetch all active large-position wallets. It then scores each wallet using a proprietary weighted formula before deciding which ones to follow.

Wallet Scoring Formula

Each potential leader wallet receives a composite score from 0–100 based on four dimensions:

40
Win Rate (40%) — The percentage of resolved positions that closed profitable. Wallets below 52% win rate are excluded entirely.
30
Volume (30%) — Total USDC wagered over the trailing 30 days. Larger volume signals conviction and reduces the likelihood of lucky flukes.
20
Recency (20%) — Profit earned in the most recent 7 days, weighted more heavily than older data. A wallet that was great 60 days ago but silent recently scores lower.
10
Consistency (10%) — Standard deviation of returns. Wallets with lower variance score higher; we prefer steady traders over boom-and-bust gamblers.
# config.yml — Copy Bot wallet scoring thresholds
copy_bot:
  min_win_rate: 0.52          # Exclude wallets below 52% win rate
  min_30d_volume_usdc: 500    # Require at least $500 traded in 30 days
  max_leaders: 5              # Follow at most 5 wallets simultaneously
  recency_window_days: 7      # Days to weight for recency score
  rescan_interval_minutes: 60 # Re-rank leaders every 60 minutes

The bot re-evaluates the leaderboard every rescan_interval_minutes (default: 60 min). If a leader's score drops below the configured threshold — or they haven't placed a trade in 48 hours — they are automatically removed and replaced.

Follow Exits

When a tracked wallet sells or reduces a position, the Copy Bot evaluates whether to mirror that exit. It does not blindly exit on every sale — instead it checks:

Follow Exits can be disabled if you want Copy Bot to only mirror entries and manage exits independently. Set follow_exits: false in your config.

Proportional Sizing

Rather than copying the raw USDC amount a leader bets, Copy Bot scales the position relative to the ratio of your bankroll to the leader's estimated bankroll. This prevents a whale with a $500k bankroll from causing you to bet 90% of your portfolio on a single market.

# Proportional sizing example
# Leader bankroll: ~$50,000  Leader bet: $2,500 (5% of bankroll)
# Your bankroll:   $1,000    Your bet:   $50    (5% of your bankroll)

copy_bot:
  proportional_sizing: true
  max_position_pct: 0.08   # Never exceed 8% of your bankroll on one trade
  min_trade_usdc: 5        # Skip copies that would be smaller than $5

15-Minute Bot Strategies

ML Prediction (LightGBM + ExtraTrees Ensemble)

This is the core quantitative signal of the 15-Minute Trader. At the start of every 15-minute window, PolyBot pulls a feature vector of 42+ indicators and passes it through a two-model ensemble — LightGBM and ExtraTrees — that were trained on historical Polymarket resolution data.

Indicators fed into the model include: current YES/NO price spread, order book depth at ±2% levels, recent fill volume, time-to-expiry, implied volatility proxy, Chainlink BTC/ETH price delta over the past 4 windows, market category (politics, sports, crypto), and liquidity skew.

# 15M Bot ML config
fifteenm_bot:
  strategy: ml_prediction
  model_retrain_interval_minutes: 30   # Retrain ensemble every 30 min
  confidence_threshold: 0.62           # Only trade if model confidence ≥ 62%
  feature_lookback_windows: 8          # Use last 8 windows of features (2h)
  ensemble_weights:
    lightgbm: 0.55
    extratrees: 0.45

The model retrains every 30 minutes using the most recent resolved outcomes as fresh labels. This keeps the model adapted to intraday volatility shifts. Retraining happens in a background thread and does not block live trading.

A trade fires at window open only if the ensemble's weighted probability exceeds confidence_threshold. The default 0.62 is a reasonable balance — raising it to 0.70+ reduces trade frequency but improves per-trade edge.

Snipe Mode

Snipe Mode is arguably the most powerful strategy PolyBot offers. It activates approximately 20 seconds before a 15-minute window closes and uses the Chainlink oracle's actual resolution price feed — the same feed Polymarket itself uses to settle contracts — to determine the near-certain outcome.

Because the Chainlink feed publishes the final price before the market officially resolves, there is a brief window where the outcome is essentially known but the CLOB still has open orders. PolyBot reads this feed directly and places a market-side order into the mispriced side.

# Snipe Mode config
fifteenm_bot:
  snipe_mode:
    enabled: true
    trigger_seconds_before_close: 20    # Fire 20s before window end
    chainlink_feed: BTC/USD             # Oracle feed to read
    min_edge_pct: 0.02                  # Require at least 2% edge vs CLOB price
    max_size_usdc: 200                  # Cap snipe trades at $200
    slippage_tolerance: 0.015          # Accept up to 1.5% slippage on fill
Accuracy Note: Snipe Mode achieves approximately 80–90% accuracy in backtests and live operation. The ~10–20% failures occur when Chainlink updates are delayed or when the CLOB spread is already priced efficiently by other arbitrageurs.

Arb-First

Before placing any directional trade, PolyBot scans the current YES price and NO price for all active markets. In a perfectly efficient market, YES + NO = $1.00. When the sum is below $1.00 — for example $0.96 YES + $0.97 NO = $0.99 — there is a guaranteed profit opportunity. PolyBot buys both sides simultaneously and collects the $0.01 risk-free spread.

# Arb-First scan example (internal log output)
[ARBITRAGE] Market: "BTC above $70k by end of June"
  YES price: 0.47   NO price: 0.51   Sum: 0.98
  Edge:       0.02  ($0.02 per $1 wagered)
  Action:     BUY YES $100 + BUY NO $100
  Expected P&L: +$2.04 after fees (0.99% fee both sides)

Arb-First runs as a pre-trade scan every 30 seconds, independent of the 15-minute window cycle. If an arb opportunity is found, it takes priority over all other signals. You can set a minimum edge threshold to skip arbs that are eaten by fees.

fifteenm_bot:
  arb_first:
    enabled: true
    min_arb_edge_pct: 0.015   # Minimum 1.5% edge after fees
    max_arb_size_usdc: 500    # Maximum combined arb position size

Delta-First

Delta-First trades on the raw price movement of the Chainlink BTC/USD feed across successive 15-minute windows. It uses a tiered sizing model: a larger delta triggers a proportionally larger position, with a hard cap per tier.

fifteenm_bot:
  delta_first:
    enabled: false          # Disabled by default — enable manually
    tiers:
      - delta_pct: 0.5     # 0.5% BTC move → $25 trade
        size_usdc: 25
      - delta_pct: 1.0     # 1.0% BTC move → $50 trade
        size_usdc: 50
      - delta_pct: 2.0     # 2.0%+ BTC move → $100 trade
        size_usdc: 100

Multi-Entry

Multi-Entry allows PolyBot to place up to 3 separate entries within a single 15-minute window if multiple high-confidence signals fire. Each entry is capped independently. This is useful in volatile windows where the model updates its confidence mid-window as new book data arrives.

fifteenm_bot:
  multi_entry:
    enabled: true
    max_entries_per_window: 3
    min_confidence_increment: 0.04  # Subsequent entries need 4% more confidence
Warning: Multi-Entry significantly increases exposure within a single window. Ensure your daily_loss_limit and max_position_cap are set conservatively when enabling it.

Strategy Selection Tips

Beginners

Advanced / High-Volume

Next Steps

Now that you understand how each strategy fires, configure the guardrails that protect your capital when signals go wrong.