Order Types and Exits on Tradovate
Getting into a trade is one line. Getting out well is the actual work. This guide covers every exit and order-type tool the Tradovate destination offers — including several that don't exist on the NinjaTrader webhook path, because Tradovate orders run in the broker's cloud.
The big idea throughout: everything here is server-side. Brackets, trailing stops, scale-out tiers, and scheduled cancels live on Tradovate's servers once placed. Your computer can be off; the exits keep working.
The Three Approaches
1. A simple bracket (take_profit / stop_loss) — one target, one stop, linked as an OCO. Right for most single-target setups.
2. A scale-out ATM (atm_* fields or a named template) — multiple target tiers, per-tier stops, trailing runners, auto-breakeven. Right when you exit in pieces.
3. TradingView-managed exits — your strategy or indicator sends the exit signals and no resting protection exists. Only right when paired with at least a catastrophic stop from approach 1.
You choose one bracket style per entry: atm_* cannot be combined with take_profit / stop_loss in the same alert.
Approach 1: The Simple Bracket
Add two fields to any place and CrossTrade sends a single broker-side OSO: the entry plus a linked target and stop that cancel each other when one fills.
key=your-secret-key;
command=PLACE;
account=DemoAccount;
instrument=ES1!;
action=BUY;
qty=1;
order_type=MARKET;
take_profit=5300.00;
stop_loss=5285.00;
destination=tradovate;
Price formats: absolute prices always work. Relative offsets work too — ticks (take_profit=20 or 20tick), points (5pt), percentage, and dollar forms — and are resolved to absolute tick-rounded prices by CrossTrade's quote service at send time. If no fresh, trusted quote is available, the alert fails closed: no order is placed, and the failure is recorded in Alert History. Continuous-contract alerts are pinned to the concrete contract that was quoted.
The bracket stop is a plain Stop order. The NinjaTrader stop-limit bracket fields (stop_loss_stop, stop_loss_limit) are rejected on Tradovate. Manual oco_id grouping is also rejected — setting both take_profit and stop_loss links the legs for you.
Approach 2: Scale-Out ATMs (atm_*)
For multi-tier exits, the atm_* fields build a native Tradovate multibracket order strategy: one managed entry with any number of scale-out target and stop tiers.
Enter 2 contracts, take 1 off at 20 ticks and 1 at 40 ticks, each protected by a 15-tick stop, with the runner trailing:
key=your-secret-key;
command=PLACE;
account=DemoAccount;
instrument=ES1!;
action=BUY;
qty=2;
order_type=MARKET;
atm_targets=20,40;
atm_stops=15;
atm_qtys=1,1;
atm_trail=false,true;
destination=tradovate;
Move the surviving stops to breakeven (plus 2 ticks) once the first target fills:
atm_targets=20,40;
atm_stops=15;
atm_qtys=1,1;
atm_breakeven=1;
atm_breakeven_offset=2;
Offsets are distances from entry, not absolute prices — bare numbers are ticks, pt means points, and direction is automatic from the order side (always give positive numbers). Breakeven is target-fill-triggered: stops move after tier 1 actually fills, not merely when price gets there.
The rules that keep you out of trouble (v1 limits):
- A stop is required. A target-only ATM is rejected, so an entry is never left unprotected.
atm_*can't be combined withtake_profit/stop_lossor withcancel_after.atm_breakevencan't point at the final tier, and can't be combined with a trailing tier after the trigger.- To cancel the whole ATM, send
command=cancel;with theorder_idyou set on the entry. Modifying a running ATM isn't supported yet — cancel and re-send.
Tradovate may accept the ATM before CrossTrade's breakeven watcher starts. If the watcher can't start or can't confirm a stop move, the ATM stays live at the broker but automatic breakeven is degraded — CrossTrade warns on the alert (and in the Copy Log for copied followers). Don't assume breakeven is active when that warning appears.
Named templates: save the same fields once as a CrossTrade ATM Template on Tradovate Webhooks → ATM Templates, then reference it with atm_strategy=Two Target Runner;. The active template is resolved when each signal arrives, so edits apply to the next signal immediately. Template atm_qtys must sum to the alert's qty, and named templates can't be mixed with inline atm_* fields. Full reference: Tradovate ATM.
Native Trailing Stops
On NinjaTrader, trailing from a webhook requires an ATM template. Tradovate has trailing as a first-class order type:
key=your-secret-key;
command=PLACE;
account=DemoAccount;
instrument=ES1!;
action=SELL;
qty=1;
order_type=TRAILINGSTOP;
stop_price=5290.00;
trail_offset=8;
destination=tradovate;
stop_price is the initial trigger and trail_offset (alias peg_difference) is the trail distance. order_type=trailingstoplimit adds limit_price; all three fields are then required.
Tradovate-Only Order Types and Modifiers
MIT (market if touched): order_type=MIT; with the touch price in limit_price. A resting order that becomes a market order when touched.
Iceberg: max_show=2; displays only part of the true size in the book.
Extra TIFs: tif=IOC, tif=FOK, and tif=GTD (GTD requires expire_time= in ISO-8601). Day and GTC work as on NinjaTrader — and on Tradovate entries, tif is optional entirely.
Broker-side limit-order timeouts: cancel_after=30; (minutes, 1 to 180) schedules the cancel on Tradovate's servers, so an unfilled limit order dies on time even if your machine and CrossTrade are both unreachable at that moment.
Scheduled cancels: on the cancel command, activation_time= (ISO-8601) schedules the cancellation broker-side for a specific moment.
Order notes: notes=morning breakout; rides to Tradovate as the order's text, visible in Tradovate's own UI and reports.
Protecting a Position You're Already In
cancelandbracket wraps a live position in a TP/SL OCO after the fact: it cancels the instrument's working orders, then places the bracket around the existing position. action=buy protects a long, action=sell protects a short (it names the protected side, not the exit side). It requires a matching open position, clamps quantity to live size, and aborts if the position goes flat or flips during cancellation.
key=your-secret-key;
command=CANCELANDBRACKET;
account=DemoAccount;
instrument=ES1!;
action=BUY;
take_profit=5305.00;
stop_loss=5288.00;
destination=tradovate;
The Orphaned Orders Problem
Exit orders can outlive the position they protect — the classic case is a manual close that leaves the old bracket resting. On Tradovate the built-in cleanups are:
flatten_first=true;on an entry clears the same account and contract (position and nonterminal working orders) and waits for settlement before entering.- A full
closepositionuses Tradovate's liquidate endpoint, which also cancels that contract's working orders. cancelorders(account-scoped, optionally per-instrument) andcancelallorderssweep resting orders explicitly.flatplaceis the atomic version: flatten, cancel, confirm both cleared, then enter — and the entry is withheld if settlement can't be confirmed.
If you regularly close positions manually inside Tradovate, remember signal-side cleanups can't see what you did there; sweep with cancelorders or check the platform.
Accepted Is Not Resting: Late Broker Rejections
Tradovate's API can accept an order (green row, order id) and reject it a second later in its risk layer — the classic case is a stop or limit outside the product's exchange price bands (InvalidPrice). CrossTrade re-checks ordinary placements a few seconds after acceptance and flips the Alert History row to a yellow warning carrying Tradovate's reason. If your prices sit near the bands, glance back after placement. Native multibracket ATMs use their own strategy lifecycle instead.
Choosing Your Exit Style
- One target, one stop →
take_profit+stop_loss. Simplest, fully server-side. - Scaling out, trailing runner, breakeven automation →
atm_*or a named template. - Exit levels computed per-trade in Pine → build the payload in
alert_messagewith calculated offsets (strategies guide). - TradingView manages exits → keep a catastrophic
stop_losson the entry anyway.
Tradovate ATM support is still beta — verify the complete entry, target, stop, and breakeven lifecycle on a Demo account before using it live.
Related: Tradovate ATM reference · Bracket Orders · Tradovate: Exclusive Features & Execution Internals · Destinations matrix