Self-Trade Prevention on Polymarket Perps: Why Your Own Orders Cancel Each Other
Your bot has a resting buy at 61 and sends a market sell — expecting a clean fill against your own liquidity. Instead, the resting buy vanishes and your taker fills against someone else, possibly at a worse price. That’s self-trade prevention, and on Polymarket Perps it’s always on, in CancelMaker mode, with no way to turn it off — by API setting, flag, or request. Bots that don’t plan for it misprice fills and leak money quietly.
What is self-trade prevention on Polymarket Perps?
When a taker order would match against a resting maker order on the same account, the engine cancels the resting maker and continues matching the taker against other makers. Mode: CancelMaker. Configurability: none — it’s not an API setting; there is no opt-out. Important scope detail: accounts Polymarket has grouped as one entity count as the same account — sub-accounts and linked wallets don’t dodge the check. The official docs document this under trading behavior; the order types guide covers how maker/taker roles work generally.
Why the engine does this
Self-trading lets one account move its own mark and wash its own volume — a manipulation primitive (fake volume, self-liquidation games, mark-price nudges). CancelMaker closes it by construction: you can never be your own counterparty, so your fills always represent genuine external liquidity. For a market-making bot, this changes the math of quote management — see maker strategy.
What it means for bots and humans
Market-making bots: if your quoting logic treats your own opposite- side resting order as available fill liquidity, it’s wrong. Your taker legs will fill against other participants — model expected fill prices against the book excluding your own resting orders.
Laddered entries: a ladder of buys plus an impatient market sell won’t “meet in the middle” with yourself — the ladder’s resting legs cancel as the taker walks through their price range. Ladder + taker on the same account needs explicit sequencing (cancel the ladder first, or accept external fills).
Hedged pairs on one account: you cannot hold offsetting orders expecting them to fill against each other. Offsetting exposure needs either sequencing or genuinely separate accounts (which the engine may still group — verify before relying on it).
Worst-case margin interaction: your resting orders already count toward the margin check (see why orders get rejected) — and self-trade prevention means they’ll never “absorb” your own exits. The two systems together make phantom-liquidity plans fail twice.
FAQ
Why did my own resting order get cancelled on Polymarket Perps? Self-trade prevention: your taker order was about to fill your own resting maker, so the engine cancelled the maker (CancelMaker mode) and matched you against external liquidity instead. It’s always on and cannot be disabled.
Can I turn off self-trade prevention on Polymarket? No — it runs in CancelMaker mode by default for every order and isn’t an API setting. Accounts grouped as one entity also count as the same account for this check.
How do market makers handle self-trade prevention? Quote logic must exclude own resting orders from expected-fill models, and entry/exit flows need sequencing — cancel the relevant side before sending an aggressive order, or accept that fills come from external liquidity at external prices.
Does self-trade prevention affect event markets too? It’s documented for Perps; event-market books behave under their own matching rules — the general maker/taker economics are in maker vs taker.
Can I use two accounts to trade against myself? Accounts Polymarket groups as one entity are treated as the same account for the check — and self-trading volume is a manipulation pattern that draws scrutiny regardless. Don’t build a strategy that requires it.
Educational content, not financial advice. Not affiliated with Polymarket. Last updated October 2026.