Polymarket Active Window, Backtests, Fees and Location
This page covers four topics for regular Polymarket (platform: polymarket) strategies: the one-time active_window, what you can backtest and where backtests differ from a live Bot, how fees are charged, and where live Polymarket trading is not available. For every key and its allowed values, see All Polymarket parameters.
active_window
A one-time wall-clock window for a custom strategy. Set start, end or both as RFC 3339 timestamps with a timezone offset, for example 2026-10-04T09:00:00-04:00. end must be after start.
| State | When | What the Bot does |
|---|---|---|
| Waiting | Before start | Nothing. No rules run, exits included. |
| Active | From start until end | Runs your rules every loop.interval. |
| Ended | At and after end | Cancels this Bot's resting buys in the current market once (retrying next loop if that fails), then keeps running your rules with entries blocked: a matching buy rule is skipped, and sells and cancel_all still work. Its resting sells, your manual orders and other Bots' orders stay. A series Bot stops rolling over. |
An end that is already past still saves; the Bot then runs that end-of-window cancel as soon as it starts and never enters.
Positions are not sold at end on its own: shares are closed only by your exit rules, and whatever they don't close settles with the market. active_window cannot be backtested, because it refers to future times.
Backtests
Polymarket backtests replay recorded order-book history for the market's YES token only. There is no candle fallback. The NO side is simulated as the mirror of the YES book, so a NO fill in a backtest comes from YES prices. See Backtest and Backtest data.
A Polymarket strategy cannot be backtested if it uses any of these:
spread_capture;active_window;- the
volumefield; yes_best_bid,yes_best_ask,no_best_bidorno_best_ask, asfieldorvalue_field;- an
event_slugorqueryselector.
observation_momentum backtests run but record no trades, because the order-book history has no last-trade prices for it to measure. A backtest can also fail when the chosen window has no recorded book data or no known fee rate for the market. Research runs are available for Kalshi only.
A series selector replays every market in the series that overlaps the backtest window, each one separately.
Where backtests and live Bots differ:
| Behavior | Live Bot | Backtest |
|---|---|---|
| NO prices | The NO token's own book | Mirror of the YES book |
| Order fills | Limit orders at the midpoint; may rest or never fill | Filled against the recorded book |
| Minimum order size | Enforced for custom buys (usually 5) | Not enforced |
mean_reversion size | max_position or the market minimum, whichever is smaller | max_position or 10, whichever is smaller |
cooldown when omitted | 60 seconds | 0 seconds |
recovery_exit when omitted, 0 or quoted | Omitted: 0.04. Set to 0: exits once the price is back at the entry. Quoted: still read. | Uses recovery_target, else 0.50 |
panic_fade holdings | fade_size per fade, not capped by max_position | Capped at max_position; one fade at a time; exits sell everything |
| Custom spend | max_notional only | Also capped at max_position dollars per order and in total per market |
| Holding YES and NO | Held independently; position_size adds both | A buy on one side first sells up to its size from the other side; only the rest is bought |
sell_yes / sell_no with a size | Sells up to size shares on that side | Sells the whole side |
exit_on_release | Any non-empty text, even "no", turns it on | Only true turns it on; text such as yes does not |
| Fees | Charged by Polymarket | Modeled from the market's historical fee rate |
To compare results fairly, set cooldown and recovery_exit explicitly, use unquoted true/false, and keep sizes at or above the market minimum. For how each built-in trades live, see Built-in strategies on Polymarket.
Fees
Polymarket charges trading fees on some markets.
- Live, Polymarket charges them. The Bot does not add its own fee model.
unrealized_pnlsubtracts the fees recorded in your trade history;max_notionalcounts price times size only. - Backtests charge each market's historical fee rate as rate × shares × (price or 1 − price, whichever is smaller). With a hypothetical rate of 1%, buying 10 shares at 0.30 costs about $0.03 in fees. If the rate for the window is unknown, the backtest does not run.
- Paper Bots pay no fees by default.
Location restrictions
Live Polymarket trading is not available everywhere. Studio checks your location whenever you deploy, redeploy or recover a regular Polymarket Bot, Paper Bots included, and refuses with "Polymarket live trading is not available from your current location" from:
- the United States, the United Kingdom, France, Germany, Italy, Belgium and Australia;
- Belarus, Burundi, the Central African Republic, Cuba, the Democratic Republic of the Congo, Ethiopia, Iran, Iraq, Lebanon, Libya, Myanmar, Nicaragua, North Korea, Russia, Somalia, South Sudan, Sudan, Syria, the US Minor Outlying Islands, Venezuela, Yemen and Zimbabwe;
- Brazil, New Zealand and Slovakia;
- Poland, Singapore, Thailand and Taiwan, where Polymarket allows closing positions only;
- Alberta, British Columbia, Ontario and Quebec (Canada), and Crimea, Donetsk and Luhansk (Ukraine).
Studio follows restrictions on opening orders through the API, including API close-only locations because a Bot can open new positions. Restrictions that apply only to the Polymarket website in Ireland, Japan, Malta, the Netherlands and South Korea do not block Studio API Bots.
A live Bot also checks its runner's location when it starts and exits without placing orders if Polymarket reports a restriction, except for those website-only locations. Polymarket's rules can change; its API geographic restrictions are the policy source. If you are in the United States, use Polymarket US.