What a bot is
A bot is a dedicated trading account with three things pinned to it:
A dedicated trading account — its own balance, its own history — running one strategy on autopilot.
The exact immutable strategy that produced the backtest you evaluated — form-built or authored with the AI assistant. What runs live is precisely what you tested.
Per-bot runaway tripwires: caps on open positions and orders, a stale-data threshold, and an error budget that auto-pauses a strategy that keeps erroring. If a bot blows past a limit it halts the session — but managing a losing day is the strategy’s job.
Like every account, a bot’s cash carries from one session to the next and compounds. Each day opens with whatever the previous day settled to — nothing resets.
A day in the life of a bot
- 1
You start today’s session — one per day, during market hours.
- 2
The bot registers a live session and waits for fresh market data.
- 3
The strategy runs exactly as it does in a backtest — same entry logic, same exits — but against live ticks, writing a decision log of what it chose and why.
- 4
Through the day it manages its resting orders, respecting the risk policy it froze at session start.
- 5
The session ends the moment the bot is out of the market for good — it took its trade and closed it, or its entry window passed without a fill. The result rolls into the bot’s balance right there; no waiting for a bell.
- 6
If it is still holding something at 4:00 PM ET, the session settles through the same pipeline as any live day instead, and that result rolls into the balance.
You can watch everything live — orders, positions, per-second P&L, and the decision log — and you can always intervene by stopping the session. While the strategy runs, its orders are its own: there is no side channel for cancelling or placing orders on a running bot session.
A bot stops trading when it is done, not when the market closes. A one-trade strategy that enters at 9:45 and takes profit at 11:20 is finished at 11:20: the session closes out, the balance carries, and the day’s record is complete. A day where the entry window passed with nothing filled ends the same way, having risked nothing. Only a session still holding something at 4:00 PM ET rides to the close and settles there. And because that session is genuinely over, you can start the bot again on the same date if you want a second run.
The day itself still runs to the close. Finishing early ends the session, not the day. The finished run stays on your trading screen as the bot’s day — read-only, showing its final result — right through to 4:00 PM ET; only once the market session closes does that day move to Replay and join Analyze, exactly as a day you traded by hand does. So a bot that goes flat at 11:20 doesn’t vanish at 11:21 from the screen you were watching it on, and its day lands in your history when the day is genuinely over.
Stopping a session stops the strategy, not the trade. The bot makes no further decisions and its working orders are cancelled, but whatever it holds stays open — nothing is closed on your behalf and nothing is cashed out at a theoretical price. If it happened to be holding nothing, the stop simply ends the session then and there. Otherwise you choose the exit, and you have three:
Restart it. A stop is reversible for as long as the session is still holding: restart and the strategy picks up where it stood down — same session, same positions, same accumulated state — and manages them from there. It does not get a second trade; its one entry for the day is already spent. Close the book. Liquidate the positions — smartly, grouped into favorable limit orders that re-price toward a fill so you keep the spread, or aggressively, a market order per position, immediate — and the session ends the moment it is flat, balance carried. Or hold to the close and let the day settle exactly as it would have.
Choosing to liquidate is the one decision you cannot walk back: from the moment you start one, that session can no longer be restarted — even if you cancel the liquidation while positions are still open. Cancelling leaves the session where it was, strategy off and still holding, with another liquidation or the close as the way out. Because it is still a live session while it holds, the bot stays frozen for edits until the day is done.
Smart order re-pricing
An order resting exactly at the mid tends to sit unfilled while the market drifts away from it — the price you posted a minute ago is not the price the market is at now. Bots handle this with automatic re-pricing. Every order first goes in at a spread-aware starting price — deeper inside a wide spread, right at the market on a one-tick spread — and if it hasn’t filled it’s then re-priced one tick at a time toward a fill. Entries and exits play by opposite rules:
Concedes a tick down at each interval, rebuilt from the current market each time.
Retries a tick down every interval, whatever the market does.
An entry retry rebuilds the trade, not just the price. At each step the strategy re-picks its strikes from the market as it stands right now, and the fresh structure is priced off the current spread. That is what a delta- or premium-targeted entry actually asked for: after a few minutes of drift, the strikes chosen at 9:45 are no longer the trade you backtested. Reaching the cap doesn’t end that — past it the order simply stops conceding price while it keeps following the market. What ends it is the strategy’s own entry window: when the window closes, an entry that still hasn’t filled is cancelled and the bot opens nothing further that day, so a stale order can never fill long after the moment it was meant for. Anything already open is unaffected — exits keep working to the close.
An entry that never reaches the market gets the same treatment. Occasionally a submission is turned away for a passing reason and no order is created at all, so there is nothing to re-price — the platform rebuilds the entry from the market as it stands and sends it again, for a few minutes and only while the window is still open, rather than letting a moment’s trouble cost the bot its whole day. A refusal that would come back the same however often it were tried — not enough buying power, a structure that isn’t allowed — isn’t retried at all. Either way the attempts land in the decision log, and so does the reason the day ended — so a session that never gets its trade on explains itself instead of ending in silence.
Exits split further by why they’re closing: a stop-loss retries faster than a take-profit (5 vs 10 seconds by default), because a losing position is more urgent to get out of than a winning one. On a move that just keeps running against you the stop-loss cadence rarely gets a turn — a stop-loss close whose market has run through its price for three straight seconds is filled at the market by the engine itself, before the first re-price is even due. The cadence earns its keep in a choppy market, where the move keeps pulling back and the order has to chase. All three cadences — entry, take-profit, stop-loss — are on by default and tunable per bot, down to a floor of 4 seconds. That floor is sized for the equality window — the slower case: a rung the market has to come to needs its price to hold for three consecutive seconds, so a rung replaced faster than that would restart the clock every time and never fill anything. (A rung that steps past the market fills on the step that sets it, but the floor still has to cover the resting one.) Re-pricing quicker would make a bot slower to get filled, not faster.
Turning exit re-pricing off is possible but dangerous, for exactly the reason above — an unfilled exit is a position you meant to close and didn’t.
A strategy’s results work their orders the same way. Every ladder above — the spread-aware start, the rebuilt entry, the relentless exit — runs when the strategy’s sessions are computed, so what you compared strategies on already includes the chasing. Tuning the cadences is the part that stays live-only: computed sessions always use the defaults.
Automatic malfunction protection
Automation amplifies bugs. A strategy or platform fault could, in principle, fire orders in a runaway loop — so every bot session is watched for exactly that. The platform tracks how many orders a session submits, and if that volume becomes abnormal within a short window, it treats the bot as malfunctioning and halts the session immediately.
A halt is decisive: the bot’s working orders are cancelled, the session ends as halted with the reason shown on its page, any open positions are valued at the current market prices in the final rollup, and the settled balance carries forward to the next session — the same clean finish as any other halt. These limits are set by the platform, not by you, and they are sized well above what any normal strategy does — including one re-pricing its exits as aggressively as the rules allow — so a healthy bot never gets close to them. It is purely a brake on a bot that has clearly gone wrong.
Automatic start
By default you kick off a bot’s day yourself — one tap to start today’s session. Flip on automatic start and the platform opens the session for you at each session’s open instead, so a bot you trust runs every day without you lifting a finger. The same eligibility rules as a manual start still apply: it only starts during market hours, only on the days and within the window the strategy actually enters, and only while the strategy still meets the live-trading rules. A few guarantees keep it predictable:
The platform makes a single automatic attempt per bot per trading day. If you already started today’s session by hand, it leaves it alone.
Turning automatic start on while today’s session is already open takes effect at the next open, not seconds later — so toggling it is always safe.
If a session opens but the engine can’t bring it online, it shows up as a failed session, like a manual start that failed. Ordinary non-starts — not an entry day, window passed — are quiet by design.
You can turn it on when you create a bot or any time after, and turn it back off just as easily — turning it off never touches a session that’s already running.
Bots vs. the other ways to trade
You click, on any past day.
- You click the trades
- Your clock — any past day
- No account — $100k sandbox
- Balance fixed per day
- No extra guardrails
You click, on today’s market.
- You click the trades
- The real clock — today
- A live account
- Continuous balance
- Buying power & margin
The strategy clicks, on today’s market.
- The strategy clicks
- The real clock — today
- A dedicated bot account
- Continuous balance
- Buying power & margin + risk policy
Tips
The funnel exists for a reason: backtest the strategy over the full history, trade its best and worst days by hand in practice, run it live yourself for a while — then hand it to a bot. Automation amplifies whatever you give it, including flaws.
The platform enforces no drawdown halt — the strategy decides when a day has gone wrong. Study the backtest’s worst days and encode the response you want: tighten exits, stop entering, or close positions and call ctx.halt() to end the session.
The log shows what the strategy saw and chose, tick by tick. A profitable day for the wrong reason is a warning, and the log is where you catch it.
Bots are manageable from the app and the Bots API alike.