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.
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.
- Market
marketKey Which market this bot trades. Each round of it lasts one interval (e.g. 5 minutes).
- Stake by
stakeMode 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 trade
stakeUsd / stakeShares How much (or how many contracts) this bot commits to a single entry, in whichever unit Stake by is set to.
- Trading mode
paperTrade Paper simulates fills — no real orders are placed. Live places real orders using your Polymarket credentials.
- Simulated fill delay
paperEntryDelaySecPaper 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.
Price window
- Minimum entry price
thresholdPrice Only enter once the favoured side's ask reaches at least this price.
- Maximum entry price
maxEntryPriceOptional 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.
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 price
stopLossRequireOppositeConfirmation 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 Beat
stopLossAssetMoveEnabled + 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 fill
entrySlippageExitEnabled + 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.
Entry filters
- Liquidity buffer
liquidityBuffer Require this multiple of the stake to be available at the best price before entering. 0 skips the check.
- Momentum guard
momentumLookbackSec / 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 filter
entryMinAssetMoveUsd / 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 round
allowMultiplePositionsPerMarket 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 side
entryInvertSide Every entry condition above still picks a side as usual — this buys the opposite side instead, once that side qualifies.
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.
Primary entry fills
The side the Entry rules picked, sized and exited by the preset's own settings.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".
Fork buy — the opposite side
A regular purchase with its own stop loss / take profit. At most one per position.Both sides held
The outcome is hedged: exactly one side always pays out.
Trigger
- Trigger mode
forkConfirmEnabled 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.
- Range (off): buy the instant the opposite side's ask falls in
Sizing
- Match the primary's contract count
forkMatchPrimaryShares 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 contracts
forkStakeMode / 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.
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 profit
stopLossPct / 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 closes
allowMultiplePositionsPerMarket 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.
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 entryenteringPlacing ordermonitoringManaging positionclosingClosing positionstoppedStopped
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 profitstop_lossStop losstime_exitTime exitheld_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 cutoffPastforkMinEntrySecondsLeft.
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.