OCO Order
A pair of linked orders where executing one automatically cancels the other — used to set a profit target and stop loss simultaneously without holding both as live exposure.
What is OCO Order?
An OCO order (One-Cancels-Other, sometimes written as OCA — One-Cancels-All) is a server-side conditional pairing of two orders. Both sit in the order book simultaneously, but the moment one fills, the other is cancelled automatically by the matching engine. The trader gets exactly one of the two outcomes — never both, never neither.
The dominant use case for prop firm traders is protective bracketing: after entering a long position, place a sell limit at the profit target AND a sell stop at the stop loss as an OCO pair. Whichever price hits first executes; the other cancels. The position is fully managed without requiring you to babysit the chart or click manually when targets are reached.
OCO is distinct from a bracket order (entry + profit + stop, all linked) and from conditional orders (if-then triggers that activate one order based on another’s fill state). OCO is just two orders linked at the cancellation level.
How OCO Order works
Setting an OCO order varies by platform but the structure is the same: define order A, define order B, mark them as linked. When one fills (partially or fully), the platform sends a cancellation message to the exchange for the other.
Tradovate: Right-click the chart → Bracket Order → set Take Profit and Stop Loss prices. Tradovate stores these as a server-side OCO pair on the Tradovate-MES exchange interface, so they survive disconnections.
NinjaTrader 8: ATM Strategy creates a default OCO bracket for every entry. You define the strategy once (e.g. “NQ-2pt-target-1pt-stop”), then every entry automatically generates the linked profit/stop pair.
Rithmic R|Trader Pro: Use the Bracket section of the order ticket — Rithmic enforces OCO server-side which means the exchange itself manages the cancellation, eliminating any race condition.
Partial fills: Most platforms reduce both legs proportionally on a partial fill. If you OCO 4 contracts and 2 of the limit fills, both the remaining limit (2 contracts) and the stop are reduced to 2 contracts — they’re still linked.
Cancellation latency: Server-side OCO cancels in microseconds. Client-side OCO (some less-sophisticated platforms) can have a brief window where both orders fill if price moves through both levels simultaneously — rare but possible during news spikes.
Worked example
Setup: Trader is long 2 NQ contracts at 21000.00. ATR-based plan: 30-point profit target (21030.00), 15-point stop loss (20985.00). Risk on the trade is 2 × 15 × $20 = $600. Reward potential is 2 × 30 × $20 = $1,200. RR = 2.0.
OCO setup in Tradovate: Right-click NQ chart → Bracket → Take Profit: 21030.00, Stop Loss: 20985.00. Submit. Two orders now sit in the queue: SELL LIMIT 2 @ 21030.00, SELL STOP 2 @ 20985.00. Both are flagged as OCO siblings.
Outcome A (target hits): NQ rallies to 21030.00. Sell limit fills, position closes +$1,200. Tradovate sends instant cancel to the stop. The stop never executes.
Outcome B (stop hits): NQ drops to 20985.00. Sell stop triggers and converts to market order, position closes -$600 (or worse with slippage). The limit cancels automatically.
Outcome C (partial fill on limit): Price tags 21030.00 and only 1 contract fills before reversing. The remaining limit reduces to 1 contract; the stop reduces to 1 contract. Trade is now half closed, still bracketed.
OCO Order vs related concepts
Side-by-side comparison of OCO Order against the most commonly confused alternatives.
| Concept | Definition | Category |
|---|---|---|
| OCO Order this term | A pair of linked orders where executing one automatically cancels the other — used to set a profit target and stop loss simultaneously without holding both as live exposure. | Futures Mechanics |
| Bracket Order | A grouped order combining an entry order with two protective exit orders (target and stop loss) — the entry triggers the bracket; once filled, target and stop become active as an OCO pair. | General Concepts |
| Limit Order | An order to buy at or below a specified price, or sell at or above a specified price — guaranteeing your fill price but not guaranteeing execution. | Futures Mechanics |
| Market Order | An order to buy or sell immediately at the best available price — guaranteeing execution but exposing the order to slippage based on order-book depth. | Futures Mechanics |
| Stop Order | A conditional order that activates when price reaches a specified trigger level — typically used for stop-losses (sell stops below long entries) or breakout entries (buy stops above resistance). | Futures Mechanics |
Why traders fail OCO Order
Forgetting OCO doesn’t replace a stop-market. If price gaps past your stop level (overnight gap, halt resumption), the stop converts to a market order at the next available price — often much worse than your stop level. OCO doesn’t guarantee execution at your stop price.
Manually cancelling one leg. If you cancel the profit target manually, the stop becomes a standalone order — no longer OCO-linked. If you then add a new target, you must re-link them; otherwise both could fill on a fast spike.
Mixing OCO with manual scaling out. If you scale out 1 of 4 contracts manually, your OCO might not auto-reduce on some platforms (NinjaTrader does, some others don’t). Always verify quantities match after manual interventions.
Trusting client-side OCO during news. Some platforms link OCO via client software, not exchange. During FOMC or NFP, latency between the two cancellations can mean both orders fill — leaving you accidentally short. Use platforms with server-side OCO (Tradovate, Rithmic) for news trading.
Frequently asked questions about OCO Order
What does OCO mean in trading?
OCO stands for One-Cancels-Other (sometimes One-Cancels-All). It is a pair of linked orders where executing one automatically cancels the other. The most common use is bracketing a position with both a profit target and a stop loss — only one will fill, and the other is cancelled the moment its sibling executes.
What is the difference between OCO and a bracket order?
A bracket typically has three legs: entry, profit target, stop loss. OCO links exactly two orders (usually the profit target and stop). On most prop firm platforms (NinjaTrader, Tradovate), bracket orders use OCO under the hood for the target/stop pairing — the bracket is just a higher-level construct that includes the entry order.
Are OCO orders allowed at prop firms?
Yes — OCO is fundamental to risk management and every major prop firm allows OCO orders. Apex, TPT, Tradeify, Lucid, FundedNext, and Phidias all support OCO via their default platforms (NinjaTrader, Tradovate, TradingView). Some firms even encourage OCO usage to ensure stops are always in place.
Can OCO orders fail during fast markets?
Server-side OCO (managed by Rithmic, Tradovate exchange-level brackets) is essentially failsafe. Client-side OCO (managed by your local platform software) can have a brief window during fast markets where both orders fill before the cancellation propagates. Use server-side OCO during news events and high-volatility sessions.
Do partial fills cancel both OCO legs?
No. Partial fills proportionally reduce both linked orders. If you OCO 4 contracts and 2 of the profit target fill, both the remaining target (2 contracts) and the stop (2 contracts) remain active and linked. Only a complete fill of one leg cancels the other.