Reference

Docs

What every bot setting does, and what the codes in trade history mean.

8 sections · Preset fields are shown with the name they carry in the API.

Overview

A bot preset trades one market (e.g. BTC 5-minute up/down) one round at a time — a round is one bucket of that market's interval. On each round the bot decides whether to enter UP or DOWN, manages that position's exit, and optionally forks into the opposite side too (see Fork). Unless "Allow re-entry in the same round" is on, it takes at most one position per round — unless Stacking is on instead, which removes that limit entirely.

How prices and ticks are read

The engine re-evaluates entries, exits, and Fork on every market tick — once per second by default. A price is a market price between 0 and 1 (what a contract costs); a percent field (stop loss, take profit, momentum move) is a ratio of that price, never of the round's outcome.

Basics

What the bot is called and how it sizes and fills a trade.
MarketmarketKey

Which market this bot trades. Each round of it lasts one interval (e.g. 5 minutes).

Stake bystakeMode

Dollar amount: spend a fixed USDC amount each entry — contract count varies with price.

Number of contracts: buy a fixed number of contracts each entry — dollar cost varies with price.

Stake per trade / Contracts per tradestakeUsd / stakeShares

How much (or how many contracts) this bot commits to a single entry, in whichever unit Stake by is set to.

Trading modepaperTrade

Paper simulates fills — no real orders are placed. Live places real orders using your Polymarket credentials.

Simulated fill delaypaperEntryDelaySecPaper only

Paper mode only. How long a paper buy or sell waits before filling, mimicking a real market order's latency — the fill is priced off the book as it stands after the delay, not when the decision fired.

Entry

When the bot is allowed to open a position. Prices are market prices between 0 and 1.

Price window

Minimum entry pricethresholdPrice

Only enter once the favoured side's ask reaches at least this price.

Maximum entry pricemaxEntryPriceOptional

Optional ceiling on the entry price. Empty accepts any price above the minimum.

Time window

Stop entering with (seconds left)minEntrySecondsLeft

No new positions once the round has this little time left.

Start entering at (seconds left)maxEntrySecondsLeftOptional

Optional. No entries before the round has this much time left. Empty considers entries from the start of the round.

Risk (exit)

How an open position is closed.

Exit triggers

Stop loss (%)stopLossPct

Exit once the position's bid has fallen this much below the entry price. 0 disables the stop loss entirely, rather than triggering at the entry price itself.

Take profit (%)takeProfitPctOptional

Optional. Exit once the bid has risen this much above the entry price. Empty holds until the time exit (or settlement).

Close position with (seconds left)exitBeforeSec

Sell this many seconds before the round ends, regardless of price. 0 holds to settlement instead.

Stop-loss confirmation

Confirm stop loss with the asset pricestopLossRequireOppositeConfirmation

Once the bid breaches the stop-loss price, wait for the underlying asset to have fully crossed to the other side of Price to Beat before actually selling — a whipsaw back across the bid alone won't trigger it.

Confirm stop loss once price nears Price to BeatstopLossAssetMoveEnabled + stopLossMinAssetMoveUsd

Independent of the confirmation above. Once the bid breaches the stop-loss price, also confirms as soon as the underlying's current distance from Price to Beat narrows to this many dollars — even without fully crossing it.

In a trade's exit trigger

This is what a trade's exit trigger like "confirmed via asset distance from Price to Beat narrowing to $9.93" refers to.

Fill protection

Sell immediately on a suspiciously cheap fillentrySlippageExitEnabled + entrySlippageExitPct

Off by default. Primary leg only. If the actual fill price lands this many percent or more below the entry signal price that qualified the buy, sell it back out at the first live bid — ahead of stop loss, take profit, and time exit — instead of holding a fill that looks too good to be a real, tradeable price.

Example

Entry signal 0.80, filled at 0.50, threshold 20% — the fill is 37.5% below the signal, so it sells right away.

Advanced

Entry filters and execution details — sensible defaults are already applied.

Entry filters

Liquidity bufferliquidityBuffer

Require this multiple of the stake to be available at the best price before entering. 0 skips the check.

Momentum guardmomentumLookbackSec / momentumMaxMovePercent / momentumReversalLow / momentumReversalHigh

Blocks an entry when the side's own price has moved more than "Max move over that window (%)" in either direction over the last "Look back (seconds)" — or when it has swept from one side of [Reversal low, Reversal high] to the other within that same window, since a swing that sharp is more likely to snap back than continue. An entry filter, not a loss guarantee.

Asset move filterentryMinAssetMoveUsd / entryMaxAssetMoveUsd + entryRequireAssetMoveDirection

Only enter while the underlying asset's move from the round's reference price falls in [Minimum move, Maximum move] — a floor, a ceiling, or both; either bound alone is enough to turn the filter on. "Match the move direction" restricts entry to the side the asset actually moved towards.

Entry behaviour

Allow re-entry in the same roundallowMultiplePositionsPerMarket

Off: after trading a round, the bot sits out until the next one. On: it may open another position in the same round once it's flat again.

Invert entry sideentryInvertSide

Every entry condition above still picks a side as usual — this buys the opposite side instead, once that side qualifies.

Fork

Buy the opposite side too, once triggered — a regular purchase with its own stop loss/take profit, placed after the primary entry. Holding both sides hedges the outcome, since exactly one side always pays out. At most one Fork buy per position.

Fork sequence
  1. Primary entry fills

    The side the Entry rules picked, sized and exited by the preset's own settings.
  2. Fork is evaluated — every tick

    From that fill until Fork buys, gives up, or the primary position closes. Two mutually exclusive triggers; a preset uses one or the other:

    Range

    Opposite side's ask falls inside [Minimum price, Maximum price].

    Percent move

    Opposite side's ask rises "Buy on rise (%)" above its price just after the primary fill — or Fork gives up for good if it falls to "Give up below".

  3. Fork buy — the opposite side

    A regular purchase with its own stop loss / take profit. At most one per position.
  4. Both sides held

    The outcome is hedged: exactly one side always pays out.

Trigger

Trigger modeforkConfirmEnabled

Two mutually exclusive triggers — a preset uses one or the other, never both:

  • Range (off): buy the instant the opposite side's ask falls in [Minimum price, Maximum price] (forkMinPrice / forkMaxPrice).
  • Percent move (on): buy once the opposite side's ask has risen "Buy on rise (%)" (forkConfirmRisePct) above where it stood right after the primary leg's own entry filled, or give up on Fork for this position for good if it instead falls to "Give up below" ( forkConfirmDropPrice) — a fixed price floor, not relative to the reference.

Sizing

Match the primary's contract countforkMatchPrimaryShares

Buy the same number of contracts as the primary leg instead of sizing the fork by dollar amount or a fixed count.

Locked-in payout

If the combined cost of both legs then comes out below $1 per contract pair, the payout is mathematically locked in — both legs skip their own stop loss/take profit/time exit and hold to settlement instead.

Fork stake by / Fork stake / Fork contractsforkStakeMode / forkStakeUsd / forkStakeShares

Sizes the fork leg independently of the primary's own stake. Ignored (and not required) while "Match the primary's contract count" is on.

Fork-leg exits

Stop loss / Take profit (fork leg)forkStopLossPct / forkTakeProfitPctRequired with Fork

The fork leg's own exit percentages — independent of the primary leg's. Required whenever Fork is enabled; 0 for the stop loss disables it entirely for this leg.

Stop loss price (optional)forkStopLossPriceOptional

An absolute price override for the fork leg's stop loss — when set, sells once its own bid drops to this exact price instead of the percent-based stop loss above. A fixed floor that stays the same no matter what price the fork happens to enter at. Leave empty to use the percent-based stop loss.

Timing

Stop forking with (seconds left)forkMinEntrySecondsLeftOptional

Never buy the fork leg once the round has this little time left. Empty allows forking right up to the end.

Minimum hold time (seconds)forkMinHoldSec

Don't sell the fork leg on stop loss, take profit, or time exit until this many seconds have passed since it was bought — a fresh signal right after the fork buy fills doesn't sell it back out immediately. 0 disables this. Never delays settlement once the round has actually ended.

How often it's checked

Fork is (re-)evaluated on every tick — once per second by default — from the moment the primary entry fills until it either buys, gives up (percent-move mode only), or the primary position closes. It runs before the primary's own exit check each tick, so a Fork that qualifies on the same tick a stop loss/time exit would have fired still gets bought first.

Stacking

Keep re-entering on every fresh qualifying signal instead of stopping after the first — any side, no cap on concurrent legs, gated only by a cooldown between entries. Mutually exclusive with Fork.

How it differs from Fork

Fork buys the opposite side exactly once, after the primary entry. Stacking has no fixed primary/fork pair at all — every time the entry conditions qualify again (threshold, momentum guard, asset move filter — the same checks as a normal entry), the bot buys another leg, on whichever side currently qualifies, without waiting for earlier legs in the same round to close. A round can end up holding several legs on the same side, the opposite side, or both.

Cooldown between entries (seconds)stackingCooldownSecRequired with Stacking

Minimum time between two stacked entries. Required whenever Stacking is enabled.

This is the only throttle

With no cap on concurrent legs, this is the only throttle, so total capital at risk scales with how long the entry window and this cooldown allow stacking to keep running.

Stop loss / Take profitstopLossPct / takeProfitPct

The same preset-level percentages used by a normal position — but evaluated once, in aggregate, as a percentage of the total invested across every currently-open leg, not per-leg. Crossing either threshold closes every open leg together. 0 for the stop loss disables the aggregate check entirely.

Re-entry after the basket fully closesallowMultiplePositionsPerMarket

Once the aggregate stop loss/take profit (or the time exit) has closed every leg and the bot is flat again, whether a fresh basket may start in the same round is gated by the existing "Allow re-entry in the same round" setting — off: this round is done for stacking; on: a new basket can start, subject to the same entry conditions and cooldown.

Trade history notation

Badges, labels, and diagnostic codes shown on the History and Bots pages.

Bot and mode

Paper / Live

Trading mode the trade (or bot) was placed under — a simulated fill vs. a real order.

Bot state
  • watchingLooking for an entry
  • enteringPlacing order
  • monitoringManaging position
  • closingClosing position
  • stoppedStopped

Trade result

Open / Win / Loss / Closed

Open: still holding. Win/Loss: closed with a positive/negative realised P&L. Closed: closed at exactly break-even.

Close reason
  • take_profitTake profit
  • stop_lossStop loss
  • time_exitTime exit
  • held_to_endHeld to settlement (round held to actual Polymarket resolution — always the case for a locked-in guaranteed-profit fork pair)
  • entry_slippageEntry slippage (actual fill price landed too far below the entry signal price — sold immediately, ahead of stop loss/take profit/time exit)
Market outcome

Which side Polymarket actually settled the round on — distinct from the trade's own result, since a trade can close early (take profit/stop loss/time exit) before the round even resolves. "Pending" means the round hasn't settled yet.

Fork and Stacking markers

Forked / Fork leg

"Forked" marks the primary leg once its Fork buy filled; "Fork leg" marks the opposite-side purchase itself. Both carry the same market/round — they're the two halves of one hedged pair.

Stacked

Marks a trade opened via Stacking. Unlike Fork's fixed pair, a basket can have any number of stacked trades sharing the same bot and round — grouped in the table by that, not a single link field.

Order book

Bids / Asks (under Entry/Exit signal)

The book's nearest 3 price levels on each side, captured at the exact instant that signal fired — what liquidity was actually there, not just the single price the decision used. Shown for a buy (entry), a market-order sell (exit — not shown for a held-to-end settlement or a take-profit order settling on its own, neither reads a live book), or a Fork buy.

Blocked episodes

Recorded whenever the engine couldn't evaluate an exit, or couldn't fire Fork, because the relevant order book had nothing usable.

Shown in a trade's expanded detail row

Fork: price out of range @0.08 (54s)

Exit

Logged only when it's urgent — the position is either already inside its time-exit window or its last known bid has already breached the stop-loss price — and the book still has no live, fresh bid to sell into. Reasons:

  • no order bookToken isn't tracked / no data yet.
  • stale order bookData exists but is older than the staleness threshold.
Fork

Logged the moment Fork can't buy for any reason. Reasons:

  • no order bookToken isn't tracked / no data yet.
  • stale order bookData exists but is older than the staleness threshold.
  • no ask priceOpposite side has no live ask right now — common during a fast move, when resting offers get pulled.
  • price out of rangeAsk outside [forkMinPrice, forkMaxPrice], range mode only.
  • fork settings incompleteA required Fork field is missing on the preset.
  • past fork entry cutoffPast forkMinEntrySecondsLeft.

The trailing (Ns) is how long that block lasted, from when it started to when it cleared (price came back in range, a live price returned, or the position closed while still blocked). (ongoing) means it was never explicitly cleared — for an open position that means it's blocked right now; for an already-closed trade it means the position closed (or Fork fired/gave up) before the block condition ever resolved on its own.