A stop order I had forgotten about once tried to sell a position I no longer held. I had taken profit manually at my target earlier that week and left the old stop resting in the book because I assumed closing the position would clean it up, and it did not. Price drifted back down through the stop level a few days later, the order fired, and because it was a futures account there was no insufficient-balance rejection to save me, so the fill opened a fresh short. I was suddenly positioned against an asset I had finished trading, on a thesis I no longer had. That mess taught me more about order mechanics than most of the trades that went to plan.
The fix is old and boring and available on almost every serious venue: one-cancels-other orders, and their bigger sibling, the bracket. Most people either skip them or use them without knowing the specific ways they fail, and the failures are worth learning in advance because every one of them has a cheap prevention.
What an OCO does, and what a bracket adds
An OCO is two orders bound together by a single rule. If one of them executes, the venue cancels the other. The classic use on an existing long is a limit sell above the market as your profit target and a stop sell below it as your protection. Price rallies to the target, the limit fills, the stop dies. Price breaks down to the stop, you exit with a controlled loss, and the target dies. Either way the trade ends with nothing left resting in the book. My orphaned-stop story happened because my exits were separate, unlinked orders, and the link is the entire feature.
A bracket goes one step further and attaches that OCO pair to the entry itself. You submit one package: buy at this level, and when the buy fills, activate a target above and a stop below, linked so that whichever fires kills the other. Some platforms call this "first triggers OCO," futures software tends to call it an ATM strategy, and equity brokers mostly just say bracket. The names vary and the shape is identical: entry, target, stop, defined once, submitted together, before any money is at risk.
The timing is where the value lives. When you define the exit at order time, the person doing the defining is calm, flat, and looking at a chart with no position on it. The person managing exits by hand later is watching an open trade move against them, usually at the worst hour of the night, and that person reliably widens stops and cuts winners early. A bracket lets the calm version of you bind the hands of the panicked version, and if the bracket lives on the exchange's servers, a dropped connection or a night of sleep does not leave the position naked. Whether it actually lives there is the first thing that goes wrong.
The lingering leg
Not every OCO is real, in the sense of living on the exchange. On some venues the link sits inside the matching engine, so when one leg executes the other is cancelled by the exchange itself, atomically or close to it. On plenty of other setups the link is synthetic. Your trading terminal, your bot, or some broker middleware watches for one leg to fill and then sends a cancel for the other. Synthetic linking works right up until the software crashes, the connection drops, or the cancel gets rejected in a busy market. Then one leg fills, the other keeps resting, and you are on your way to my accidental short.
The two kinds look identical in the order ticket, which is what makes this dangerous. The only reliable way I know to tell them apart is to read the API documentation or, more practically, to test with tiny size. Let one leg fill and watch whether the other disappears instantly, after a lag, or not at all when your own software happens to be closed.
There is a related trap that catches people even on venues with native OCO support. Manually closing a position does not cancel the orders attached to it on many platforms. You market out of a trade because you got nervous, feel relieved, and your bracket legs are still working. On plain spot the leftover sell usually gets rejected for insufficient balance, which is annoying and harmless. On margin or futures it opens a fresh position. The cheap prevention on derivatives venues is the reduce-only flag. Mark both exit legs reduce-only and they can shrink your position but never flip it.
When both legs fire
The second failure mode is a race. In a fast market, price can trade through your target and your stop inside the same second, one wick tagging both levels before any cancel propagates. A native OCO in the matching engine mostly handles this, since whichever order executes first cancels the other before it can act. A synthetic OCO has a real latency window. The target fills on the exchange, your software hears about it a beat later and sends the cancel, and the stop has already triggered inside that gap. Both orders fill, and on futures that leaves you with your planned exit plus an unplanned entry in the opposite direction, in exactly the kind of volatility you least want an accidental position in.
Partial fills are the quieter cousin. Say your target fills half your size before price pulls away. Does the platform resize the stop to protect the remaining half, cancel the stop entirely and leave the remainder unprotected, or keep the original full-size stop resting so a later trigger flips part of your account? All three behaviors exist in the wild, and I will not pretend to know what every venue does, which is sort of the point. You have to check yours, because documentation on this tends to be vague.
There is one more failure specific to the protective leg. A stop-limit can simply fail to fill. If price gaps through your limit range, the order triggers, places a limit that is instantly away from the market, and rests there while the position keeps losing. The bracket did its job mechanically and you are still unprotected. For the stop leg I default to stop-market and accept the slippage, unless the instrument is illiquid enough that a market order is its own disaster. On equities there is a further wrinkle, since most stops only operate during regular hours, so an overnight gap will sail past both of your levels and fill at the open at whatever price the open offers. A bracket manages orders, and a gap goes around orders entirely.
The checklist I actually use
None of these failures are exotic, and each has a prevention that costs a few minutes. This is roughly the list I run through whenever I start trading on a new venue or account.
- Find out whether the OCO link is native to the venue or simulated by your software. If it is simulated, assume it dies when your software does, and prefer server-side brackets where they exist.
- Mark exit legs reduce-only wherever the venue supports it. That one flag turns the worst outcome, an accidental opposite position, into a harmless rejection.
- Default the protective leg to stop-market. Save stop-limits for instruments where slippage scares you more than not being filled at all.
- Test partial-fill behavior with small size before trusting it with real size, so you know whether the surviving leg resizes or lingers at full quantity.
- On futures, check whether stops trigger on last price or mark price. Wicks hunt one and not the other, and the choice should be deliberate.
- After any manual intervention in a bracketed trade, cancel everything and rebuild the bracket rather than editing one leg by hand.
- After every exit, open the working-orders tab and confirm it is empty. It takes ten seconds, and it would have saved me from the short I never meant to have.
The habit underneath all of it is deciding the whole trade before entering it. If I cannot write down the target and the stop at order time, I treat the idea as unfinished and keep my size at zero until I can. Once those two numbers exist, there is no good reason to babysit them by hand, because the exchange will hold both orders and cancel the loser of the race for you. Set the bracket when you set the entry, verify once how your venue handles the ugly cases, and let the machinery handle the part of trading that people are demonstrably bad at doing themselves.