Methodology: How FollowCheck Backtests Polymarket Copy Trading
FollowCheck answers one question: if you had copied this trader, a few minutes late, at the prices that were actually available, how much of their return would you have kept?
Data
- Trades come from
OrderFilledevents of the Polymarket v2 exchange contracts on Polygon (CTF Exchange V2 and Neg Risk CTF Exchange V2), indexed from the v2 launch on 2026-04-28. - Markets (titles, categories, end dates, resolutions) come from Polymarket’s public market API and are refreshed about every 10 minutes.
- Every trade on the site keeps its block number and log index, so you can open the original transaction on Polygonscan with Verify on-chain.
- Short-duration crypto markets (for example 15-minute up/down markets) are excluded: they are too fast for a delayed copy to be meaningful.
- PolygonOrderFilled events from the v2 exchange contracts
- IndexerEvery fill, with block number and log index
- Backtest engineReplays each of the trader's buys and sells
- Delay simulationReal taker buys after 0, 1, 5 or 30 minutes
- BreakdownDelay cost, slippage, fees and what the follower keeps
Simulating a copy
For every buy the trader made at time t, and for each delay d of 0, 1, 5 and 30 minutes:
- Starting at t + d, we walk forward through the real taker buys in the same outcome token, in time order, excluding the trader’s own fills. At a 0-minute delay the walk starts in the block after the trader’s fill: a copier reacting to that fill can’t be in the same block.
- We accumulate those fills until the copy order reaches your size (default $100). The copy price is the volume-weighted average of the fills used.
- If the size can’t be filled within 10 minutes, the copy is partial (whatever was filled) or, when nobody bought that outcome in those 10 minutes, no buyers in window. Such a copy is treated as never placed: it adds nothing to the follower’s PnL, and it counts against the fill rate.
- Sells are mirrored the same way, so a copier exits when the trader exits, with the same delay.
- Copy orders share the market. When the trader buys the same outcome several times in a few minutes, each buy is a separate copy order, but a fill used by an earlier copy order is gone for the later ones. Orders are served in the trader’s order. Without this, a burst of small buys would count the same seller’s shares several times.
Using fills that really happened after the delay is deliberately conservative: it assumes you pay what other buyers paid then, not the trader’s price.
Why fill rates can look low
There is no historical order book on-chain — only the trades that actually happened. So a copy can only fill against taker buys of the same outcome within 10 minutes after the delay. Resting sell orders that were sitting in the book, and that a real copier could have bought from, are invisible to us. In quiet markets this means many copies come out partial or with no buyers in the window, even though a real order might have filled. The fill rate is a lower bound, and the follower PnL only covers the part of the trading that could be copied. When fewer than half of a trader’s buys fill completely, the wallet page says so first, before any PnL.
Conservative vs including estimates
Every number in the headline, the breakdown and the charts is conservative about fills: it only counts fills that real trades prove. Next to the follower PnL and the fill rate, the wallet page also shows a clearly secondary figure, including estimates, that asks a second question: where no trade proved a fill, does other evidence say your size was fillable anyway?
Each copied buy gets a fill basis:
| Fill basis | Meaning | Counted in |
|---|---|---|
| Measured | Real taker buys in the 10-minute window covered the copy (or the part shown) | both views |
| Estimated (high / medium / low) | No trade (or too few) proved the fill, but the evidence says the size — or a share of it — was fillable | “including estimates” only |
| Thin | The evidence says the size was most likely not fillable | neither (0) |
| Pending | The data after the trade isn’t indexed yet | neither |
The evidence, shown for every buy under Details → Can this size be filled?:
- Order book: the nearest snapshot of the order book at or up to 2 minutes before t + d — best bid and ask, and the dollars of sell orders within 1, 2, 5 and 10 cents of the best ask.
- Market buys in the window: what other buyers really bought in the 10 minutes after the delay.
- Leader’s own trade: the dollar amount of the trader’s own fills at t — at least that much changed hands then.
- Average buys per 10 minutes: other buyers’ volume on that outcome over the 24 hours around the trade, per 10 minutes.
- Minute price: Polymarket’s price for the outcome at t + d.
The rule (version 1), for the part of your size that real buys didn’t fill:
- With an order-book snapshot (confidence high): the fillable amount is what sat within 2 cents of the best ask, up to your size; the price is the average up the book.
- Without one (a proxy): if the leader’s own trade or the 24-hour average per 10 minutes is at least the unfilled size, all of it counts (confidence medium); if it is at least a third of it, only that much counts (confidence low); otherwise the buy is thin. The price is the minute price plus half the typical spread. Without a minute price we use the last traded price and the confidence is low.
Estimated fills pay the same taker fees and are then followed exactly like real ones — copied sells and settlement. Pending trades are left out of both views.
Limitations. Order-book snapshots only exist since our collector started; older trades can only use the proxy (medium or low confidence). Proxies can overstate what was fillable in fast markets — 24-hour averages hide bursts, and the leader’s own trade may have taken the very liquidity a copier would have needed. Read “including estimates” as an upper view, and the conservative numbers as the floor.
Trades too recent to evaluate
A copy at delay d needs market data up to t + d + 10 minutes. For the newest trades that data may not be indexed yet. Those trades are marked data not in yet (pending) and left out of that delay’s numbers entirely — fill rate, follower PnL, and the leader PnL it is compared with — rather than being counted as unfilled. A pending sell is skipped for both the copier and the leader, and the shares stay valued at the latest price. The result is shown as provisional and is recalculated as new data arrives.
Settlement and open positions
Resolved markets pay out 1 or 0 per share. Positions in markets that are still open are marked at the last traded price and counted on each wallet page as “unsettled positions marked”.
Per-buy size, peak capital in use and drawdown
The size you set (default $100) is spent on every buy the trader makes — it is not a total budget. A trader with 3,000 buys copied at $100 means roughly $300,000 flowing through many positions, several of them open at the same time. Follower PnL and the chart are the sum over all of those positions, which is why the curve can dip well below −$100 and still end positive in the simulation.
- Invested in total is the USDC actually spent on copied buys (filled and partly filled), fees excluded. ROI is follower PnL ÷ this amount.
- Peak capital in use is the most money tied up in open copied positions at any one moment: we replay the copies in time order, add what each buy cost, release the cost of shares sold when the trader sells, and release what is still held when a market resolves. Positions in markets that are still open stay tied up. In the simulation, this peak — not the per-buy size — is the capital the copy would have tied up. Profits are not reinvested and losses are not deducted; it is money committed, not account value. The chart tooltip shows the capital in use at each point.
- Max drawdown is the largest fall of the cumulative PnL curve from a high point to a later low, starting from $0. The curve books each buy’s final result at the time of the buy, so this is the drawdown of that curve, not of a day-by-day marked account.
A fixed-budget mode — copying only while your bankroll has room, and skipping buys once it is fully in use — is not modelled yet.
Fees
Taker fees follow Polymarket’s 2026 fee schedule, which varies by market category and price. A copier buying after the leader is almost always taking liquidity, so we charge taker fees on every copy. Each copy fill pays fee = shares × rate × p × (1 − p), where p is the fill price and rate is the category’s taker rate: 7% for Crypto; 5% for Sports, Economy, Culture, Weather and Other (the default for unlisted categories); 4% for Finance, Politics, Mentions and Tech; 0% for Geopolitics. Fees are rounded to 5 decimal places of USDC. The rates come from Polymarket’s fee documentation (October 2026) and are applied to the whole indexed period, including trades from before a category’s fees started; they may change. More in fees.
Where the returns go
Every backtest splits the leader’s PnL — scaled to your per-trade size — into four parts that add up exactly. Scaling never gives the leader more shares than they actually bought: a $1 buy at 1¢ counts as the 100 shares the leader got, not as $100 worth, because no more was available at that price.
| Part | Meaning |
|---|---|
| Delay cost | The price moved between the leader’s fill and the moment you could act |
| Slippage | Walking through several fills to complete your size |
| Fees | Taker fees on the copy orders |
| Follower PnL | What would have been left for the follower (simulated) |
leader PnL − delay cost − slippage − fees = follower PnL
Returns kept, fill rate and backtest score
- Returns kept = follower PnL ÷ leader PnL at the same size (capped at the leader’s own shares, as above). 100% means the copy matched the leader; below 0% means the simulated copy would have lost money.
- Fill rate = share of buys that could be fully filled within 10 minutes of the delay. Trades still waiting for data (pending) are not counted. The “including estimates” fill rate also counts buys whose measured plus estimated fills cover the size.
- Backtest score (0–100) combines returns kept at a 5-minute delay, fill rate, and sample size (number of buys and markets, discounted when small). The weights are being calibrated against out-of-sample results: TBD. The current settings version is shown on the status page.
Boards are ranked by backtest score — that is, by simulated returns after delay — never by the trader’s own PnL. A ranking describes simulated past results only; it is not a recommendation to copy any trader.
Shadow copy (live simulation)
The shadow copy page is a public, real-time paper simulation. For a small list of Polymarket wallets, every buy is copied on paper about 2 seconds after the trader’s fill, priced against the real Polymarket order book at that moment, with taker fees, and held to settlement. No order is placed and no money is involved. Copies are simulated at $10, $100 and $1,000 per buy, so the page shows how fill rate and returns change with size.
The wallets are split into strategy groups so they can be compared under the same rules: Tail sweep (wallets that buy near-certain outcomes at about 0.90–0.98), Closing-line value (wallets whose buys were often followed by favourable price moves) and a Control group of randomly drawn ordinary wallets as a baseline. The groups are chosen from past on-chain data for testing; inclusion is not a recommendation, and a group’s simulated result does not predict its future results.
Exclusions
- Wallets with more than 5,000 buys in range are marked too frequent: almost always automated high-frequency strategies that a delayed copier cannot follow. We don’t backtest them.
- Wallet pages are only indexed by search engines when the wallet has at least 30 buys across at least 5 markets and has traded in the last 60 days. Other wallets still work, just with
noindex.
Limitations
- A backtest is not a forecast. Past results don’t predict future results.
- We don’t model the market impact of your own order on later prices, or limit orders that could have filled at better prices.
- Prices in thin markets can move a lot in minutes; many copies there are partial or unfilled, and we show that rather than assuming a fill. The including-estimates view relaxes this with order-book and volume evidence, but it is an estimate, never the headline.
Disclaimer
FollowCheck is a strategy-testing and simulated-validation tool. Every figure on the site — backtests, leaderboards, scores and the shadow copy — is a simulation built from public on-chain data and algorithms, not a record of real trades. FollowCheck does not trade, place orders for anyone, hold or manage funds, run promotions or referral programs, or offer a copy-trading service. Nothing on the site is investment advice or a recommendation to copy any trader or buy any position. Past results don’t predict future results. FollowCheck is independent and not affiliated with Polymarket.
See also: slippage, fees, out-of-sample testing and data reconciliation.