---
title: "OCO Brackets TopstepX: Why Stop and Target Outlive the Trade"
slug: oco-brackets-topstepx-why-stop-and-target-outlive-the-trade
date: 2026-09-22
modified: 2026-09-22
author: Bhavishya Goyal
excerpt: ""
meta_description: "TopstepX OCO brackets cancel only when one of their own two legs fills, so other exits leave both working. The status 8 lifecycle."
focus_keyword: oco brackets topstepx
canonical_url: "https://blog.pickmytrade.io/oco-brackets-topstepx-why-stop-and-target-outlive-the-trade/"
og_title: "OCO Brackets TopstepX: Why Stop and Target Outlive the Trade"
og_description: "TopstepX OCO brackets cancel only when one of their own two legs fills, so other exits leave both working. The status 8 lifecycle."
og_image: "https://blog.pickmytrade.io/wp-content/uploads/2026/09/Gemini_Generated_Image_8bhgn38bhgn38bhg-1024x541.avif"
schema_type: FAQPage
categories:
  - Futures
  - Prop Firm
tags: []
reading_time: 17
word_count: 4042
robots: "index, follow"
lang: en-US
---

# OCO Brackets TopstepX: Why Stop and Target Outlive the Trade

Your strategy sends its exit, the position closes at market, and the account reads flat. Twenty minutes later the stop from that trade is still resting below the market, and the target is still waiting above it. Nothing broke. The OCO brackets TopstepX attaches to each entry have exactly one trigger, and your exit wasn’t it.

Table of Contents

1. [What does OCO actually promise in TopstepX?](https://blog.pickmytrade.io/#what-does-oco-actually-promise-in-topstepx)
2. [How does a bracket go from Suspended to working?](https://blog.pickmytrade.io/#how-does-a-bracket-go-from-suspended-to-working)
3. [What the live spec adds](https://blog.pickmytrade.io/#what-the-live-spec-adds)
4. [Why do the OCO brackets TopstepX attaches outlive your exit?](https://blog.pickmytrade.io/#why-do-the-oco-brackets-topstepx-attaches-outlive-your-exit)
5. [Why does a scaled-in position leave a target behind?](https://blog.pickmytrade.io/#why-does-a-scaled-in-position-leave-a-target-behind)
6. [Copiers can double the pairs](https://blog.pickmytrade.io/#copiers-can-double-the-pairs)
7. [Is a stop and target you placed yourself an OCO pair?](https://blog.pickmytrade.io/#is-a-stop-and-target-you-placed-yourself-an-oco-pair)
8. [How emulated OCO fails](https://blog.pickmytrade.io/#how-emulated-oco-fails)
9. [Why did my bracket never attach?](https://blog.pickmytrade.io/#why-did-my-bracket-never-attach)
10. [How to clean up leftover legs, and stop making them](https://blog.pickmytrade.io/#how-to-clean-up-leftover-legs-and-stop-making-them)
11. [A cleanup routine for API bots](https://blog.pickmytrade.io/#a-cleanup-routine-for-api-bots)
12. [Where does PickMyTrade fit in?](https://blog.pickmytrade.io/#where-does-pickmytrade-fit-in)
13. [Frequently Asked Questions](https://blog.pickmytrade.io/#frequently-asked-questions)
14. [Why leftover legs are an exit-design problem](https://blog.pickmytrade.io/#why-leftover-legs-are-an-exit-design-problem)

That trigger is a fill on one of the pair’s own two legs. Close the trade any other way and neither leg fills, so the OCO rule never tells the other one to cancel.

This guide follows a bracket through its whole life, using the live ProjectX API spec and Topstep’s own platform pages, and sorts out every way a pair gets stranded. If you’re new to running TopstepX from [TradingView alerts](https://pickmytrade.io "PickMyTrade - Automate TradingView"), [TopstepX automation in 2026](https://blog.pickmytrade.io/topstepx-automation-2026/) covers the setup first.

&gt; **Key Takeaways**
&gt; 
&gt; 
&gt; 
&gt; 
&gt; 
&gt; 
&gt; 
&gt; - An Auto OCO pair cancels only when one of its own legs fills. Close the trade any other way and the legs are yours to cancel.
&gt; - Legs on an unfilled entry sit in status 8, Suspended, and `Order/searchOpen` doesn’t return them.
&gt; - Each entry gets its own pair, so two entries mean four legs.
&gt; - TopstepX rejects tick-based brackets of 5 ticks or fewer.

## What does OCO actually promise in TopstepX? {#what-does-oco-actually-promise-in-topstepx}

TopstepX compares its two bracket systems in an 8-row table, and one row settles most of this article. Under Risk of Leftover Orders, Position Brackets read “None due to auto-cancel logic.” Auto OCO Brackets read “Must manage bracket orders manually.” The OCO promise is narrower than it sounds.

**An OCO bracket** is a stop and a target linked so that a fill on one cancels the other. That’s the entire contract. It says nothing about a third order closing your position, and it doesn’t know or care whether you’re flat.

**Position Brackets** are the default mode. They hang one stop and one target on the position itself, average them to your entry as you scale in, and cancel the matching portion as you scale out. Because they belong to the position, a flat position takes them along.

Auto OCO Brackets, the order-based mode TopstepX added in September 2025, work the other way. Each entry order gets its own pair, priced from that entry, and you can save several named bracket setups. TopstepX pitches the mode at scalpers who want more than one target per entry and who keep an eye on their working orders.

Does your bot keep an eye on its working orders, or does it fire and forget? A bot that fires an entry, attaches a bracket and then sends its own exit is running Auto OCO in exactly the way that table row warns about.

## How does a bracket go from Suspended to working? {#how-does-a-bracket-go-from-suspended-to-working}

The live ProjectX spec defines 9 order statuses, numbered 0 to 8, and waiting bracket legs sit in the last one. When an entry carries a bracket, its stop and target are created at once as child orders in status 8, Suspended. They wait there until the entry fills, then become ordinary working orders in status 1.

**A suspended order** is one that exists on the server but can’t fill until its parent does. A market entry skips that wait, since it fills on arrival. A limit or stop entry can rest for minutes, and its legs rest with it. TopstepX draws them as an overlay before the fill, while Position Brackets show nothing until the entry executes.

The life of an Auto OCO bracket in TopstepX
  Flow diagram. An entry order is placed and its stop and target are created as child orders in status 8, Suspended. When the entry fills, both legs become status 1, Open, as one linked pair. From there the path splits. If one leg fills, the engine cancels its sibling and the account is flat with nothing left. If any other order closes the position, such as an exit alert, Close Position, Flatten All or a reverse, neither leg filled, so the OCO rule never fires and both legs stay on the account until you cancel them. A footer notes that the searchOpen endpoint returns only status 1 orders, while the v2 query endpoint can return statuses 1 and 8.
  
  
  The life of an Auto OCO bracket
  Order status numbers as the API reports them.
  
  Entry order placed
  Stop and target are created as its children
  status 8 · Suspended · waiting on the fill
  
  entry fills
  
  Both legs go live
  status 1 · Open · one linked pair
  
  
  
  
  
  A leg fills
  Your stop or target
  is filled.
  The engine cancels
  its sibling.
  Flat. Nothing left
  behind.
  
  
  
  Another order exits
  Exit alert, Close Position,
  Flatten All or a reverse.
  Neither leg filled, so
  OCO never fires.
  Both legs stay until
  you cancel them.
  
  searchOpen lists status 1 only. To see suspended legs,
  query /api/Order/v2/query with statuses [1, 8].

  OCO has one trigger. Every path on the right ends with legs you have to cancel yourself.
*OCO has one trigger. Every path on the right ends with legs you have to cancel yourself.*

### What the live spec adds {#what-the-live-spec-adds}

We analyzed the spec on September 22, 2026, and found three details the human-readable docs leave out:

1. The order model has two fields the docs never mention, `parentOrderId` and `linkedOrderId`. The spec doesn’t define them in words, but the names describe the model: a leg knows the entry that spawned it and the sibling it cancels.
2. Status 7, PendingCancellation, and status 8, Suspended, appear only in the spec. The realtime docs still list statuses 0 through 6.
3. `Order/searchOpen` skips suspended bracket children. The spec says so in the endpoint’s own summary and points you to `/api/Order/v2/query` with statuses 1 and 8 instead.

We ran two unauthenticated calls against that endpoint the same day. A POST came back 401 with a Bearer challenge and a GET came back 405 with Allow: POST, while a made-up path returned 404. It’s deployed, not a draft.

Why would a bot care? Consider a script that decides whether a trade is protected by counting what searchOpen returns. While a limit entry waits, it counts one order and zero stops. If it then adds a standalone stop of its own, that stop is live at once, not suspended, and it can fire on a flat account before the entry ever fills.

## Why do the OCO brackets TopstepX attaches outlive your exit? {#why-do-the-oco-brackets-topstepx-attaches-outlive-your-exit}

![An empty desk beside a window with two dark, switched-off monitors and their keyboards.](https://images.pexels.com/photos/5499551/pexels-photo-5499551.jpeg?auto=compress&amp;cs=tinysrgb&amp;w=1200&amp;fm=webp)

Because an Auto OCO pair watches its own two legs and nothing else. We count at least 5 common ways to leave a TopstepX trade without filling either leg, and none of them is documented to cancel the pair. TopstepX’s table has already told you who handles that cleanup in Auto OCO mode. You do.

| What closed the trade | Fills a leg? | Cancels the legs? |
| --- | --- | --- |
| A stop or target fill | Yes | Yes, its sibling cancels |
| Exit order from a bot | No | Only if the bot cancels them |
| Close Position | No | Not stated |
| Flatten All | No | Not stated; Cancel All is separate |
| Reverse Position | No | Not stated |
| Partial close | No | Not stated |
| Lockout | No | Yes, along with all positions |

TopstepX describes Close Position as a closing market order and Flatten All as closing positions on every account. Cancel All is a separate button that cancels working orders on every account. Nothing in its help pages says the first two take Auto OCO legs with them.

Until you’ve watched your own Orders panel after each one on a practice account, read “not stated” as “no.” Which of those rows describes your last exit?

Here’s where a nuisance turns into a loss. A leftover leg is still half of a live OCO pair. If price reaches it, it fills against a flat account and opens a new position. At that same instant its sibling cancels, because that’s exactly what OCO does. You’re now in a trade you never planned, and it has no stop unless you add one. How long before you’d notice?

&gt; **Watch out after a reverse.** The legs from a long are sell orders. If they survive a reverse into a short, either one adds to the short when it fills instead of closing it.

A partial close raises a quieter question. TopstepX says Position Brackets trim the matching portion when you scale out. It says nothing like that for Auto OCO legs, so check that each leg’s size still matches what you hold.

## Why does a scaled-in position leave a target behind? {#why-does-a-scaled-in-position-leave-a-target-behind}

Because two entries make two pairs. Auto OCO prices each bracket from its own entry, so a 2-contract position built from 2 fills carries 4 working legs, and each pair cancels only itself. When one pair’s stop fills, the other pair’s target is supposed to stay. It’s still protecting the last contract.

Two MNQ entries, two separate Auto OCO brackets
  Price ladder for an MNQ long built from two one-contract entries, each with its own 12-point stop and 20-point target. Entry A fills at 20,000 with Stop A at 19,988 and Target A at 20,020. Entry B fills at 20,008 with Stop B at 19,996 and Target B at 20,028. Two outcomes are shown. A dip to 19,996 fills Stop B and cancels Target B, while pair A keeps protecting the last contract, which is working as designed. A single market exit for both contracts at 20,012 leaves the account flat with four legs left to cancel.
  
  Two entries, two brackets
  MNQ long, 12-point stop and 20-point target on each entry
  
  20,028
  
  Target B
  sell limit 1
  
  20,020
  
  Target A
  sell limit 1
  
  20,008
  
  Entry B
  bought 1
  
  20,000
  
  Entry A
  bought 1
  
  19,996
  
  Stop B
  sell stop 1
  
  19,988
  
  Stop A
  sell stop 1
  
  
  
  
  
  
  each pair only
  cancels itself
  
  Dip to 19,996
  Stop B fills, Target B
  cancels. Pair A still
  guards the last contract.
  
  One exit for 2 at 20,012
  The account is flat, with
  four legs left for you
  to cancel.

  The dip is per-entry pairs working as designed. The single exit is where the four leftovers come from.
*The dip is per-entry pairs working as designed. The single exit is where the four leftovers come from.*

Take the example drawn above. You buy 1 MNQ at 20,000 and another at 20,008, each with a 12-point stop and a 20-point target. Price dips to 19,996, Stop B fills, and Target B cancels. Target A at 20,020 and Stop A at 19,988 stay put, and they should, because you still hold a contract. Would you want that last contract naked?

It looks like a bug, and it isn’t. Position Brackets would have averaged both entries into one stop and one target, so the confusion never comes up in that mode.

The real problem starts when one exit closes both contracts at once, say with a market order at 20,012. You’re flat, and four legs are waiting for you to cancel them. A strategy that pyramids three times can leave six. And if an alert fires twice, as covered in [why one signal can send two fills](https://blog.pickmytrade.io/non-repainting-strategy-still-fires-twice-heres-why/), the duplicate entry brings a pair of its own.

### Copiers can double the pairs {#copiers-can-double-the-pairs}

With a third-party copier, put Auto OCO on the leader only and leave followers on Position Brackets with no values set. The reason is simple arithmetic: a follower that builds its own bracket and also receives the leader’s copied legs ends up with two pairs for every entry.

TopstepX’s built-in copier sidesteps that. It turns off personal risk settings on follower accounts and blocks followers from creating, closing or adjusting orders. Even the cancel endpoint answers “Follower accounts cannot cancel orders.” Any leftover on a follower has to be cleared from the lead account. Turning the copier off mid-trade flattens every follower at once, which is one more reason to clean up before you touch it.

## Is a stop and target you placed yourself an OCO pair? {#is-a-stop-and-target-you-placed-yourself-an-oco-pair}

Not unless the server linked them, and the live spec offers exactly 1 way to ask: bracket objects on the entry order, in Auto OCO mode. The place-order request has no field that links two standalone orders. `linkedOrderId` shows up only on orders you read back, never on the request you send. What, then, links two legs you placed yourself?

That matters for any bot older than the feature. Before Auto OCO arrived in September 2025, a bot that wanted its own stop and target per trade had two choices. It could lean on the account’s Position Brackets, or build the pair from separate orders and cancel the survivor itself.

We analyzed the source of an actively maintained open-source ProjectX library to see how that plays out today. Its bracket helper tries the Gateway’s native bracket objects first. If the Gateway rejects them, as it will on an account still in Position Brackets mode, the helper doesn’t stop. It falls back to three separate orders, keeps the OCO pair in a dictionary inside the running program, and cancels the sibling when its websocket reports a fill.

That fallback is a defensible choice, since the other option is refusing the trade outright. It also means the same code gives you a server-side pair on one account and a client-side pair on another, depending on one setting in Risk Settings.

### How emulated OCO fails {#how-emulated-oco-fails}

**Emulated OCO** is a pair that your own program cancels, not the server. How often is your bot offline at the exact second a leg fills? It only takes one of these, at the wrong moment, to leave the sibling live:

- the script restarts
- the websocket connection drops for a few seconds
- the session token expires
- the cancel request gets rate-limited, rejected or lost in a reconnect

As far as the spec shows, the server sees two unrelated orders the whole time. A native pair doesn’t care whether your bot is online, because the engine cancels the sibling, not your code. So when a stop fills and its target doesn’t cancel, start with the plainest question of all: were those two ever a pair?

## Why did my bracket never attach? {#why-did-my-bracket-never-attach}

Two rules can reject a bracket before OCO even starts. In Position Brackets mode, sending bracket objects rejects the order with errorCode 2. And TopstepX sets floors: tick-based brackets must be more than 5 ticks, and dollar-based brackets must land at least 4 ticks from the entry.

The mode error reads, word for word: “Brackets cannot be used with Position Brackets. You must enable Auto OCO Brackets.”

One more detail trips up logging. The rejected order is still created, and its ID comes back in `orderId`. A bot that logs every returned ID as a placed order will record orders that never worked, so check `success` and `errorCode` first. Our guide to [ProjectX error codes by endpoint](https://blog.pickmytrade.io/projectx-error-codes-by-endpoint-what-each-number-means/) covers the other meanings of code 2.

The smallest Auto OCO bracket TopstepX accepts, in dollars per contract
  Grouped horizontal bar chart in two panels. Tick-based brackets must be more than 5 ticks, so 6 ticks is the smallest accepted value; dollar-based brackets must land at least 4 ticks from entry. In dollars per contract, 6 ticks and 4 ticks are: ES 75 and 50, NQ 30 and 20, CL 60 and 40, GC 60 and 40. For micros: MES 7.50 and 5.00, MNQ 3.00 and 2.00, MCL 6.00 and 4.00, MGC 6.00 and 4.00. Values are tick counts multiplied by each contract’s tick value.
  
  The smallest bracket TopstepX accepts
  Dollars per contract for the nearest leg
  
  6 ticks: tick input must be more than 5
  
  4 ticks: floor for dollar input
  Minis and full-size
  
  ES
  
  $75
  
  $50
  NQ
  
  $30
  
  $20
  CL
  
  $60
  
  $40
  GC
  
  $60
  
  $40
  Micros
  
  MES
  
  $7.50
  
  $5.00
  MNQ
  
  $3.00
  
  $2.00
  MCL
  
  $6.00
  
  $4.00
  MGC
  
  $6.00
  
  $4.00
  
  Tick values: ES $12.50, NQ $5, CL $10, GC $10. Micros are one-tenth.

  Each floor multiplied by the contract’s tick value. We haven’t confirmed the API enforces the same numbers.
*Each floor multiplied by the contract’s tick value. We haven’t confirmed the API enforces the same numbers.*

The floors on the OCO brackets TopstepX accepts don’t match. A 5-tick bracket typed in ticks fails, while a dollar bracket worth 4 ticks passes. On ES, the smallest bracket you can type in ticks is worth $75 per contract, and the smallest dollar bracket is $50. Position Brackets behave differently again: set them closer than 4 ticks in dollars and TopstepX quietly moves them out to 4 ticks instead of rejecting the order.

We haven’t confirmed that the API applies the same floors, so treat 6 ticks as the smallest bracket your automation sends. Why hunt for the real limit with live orders?

One more platform trap sits in the DOM. Auto OCO won’t apply to DOM orders unless OCO is also switched on inside the DOM itself, even when Risk Settings already say Auto OCO. And you have to be completely flat to switch bracket types at all.

## How to clean up leftover legs, and stop making them {#how-to-clean-up-leftover-legs-and-stop-making-them}

![A clipboard holding a handwritten to-do list with two items checked off, a red-tipped pen and a laptop at the edge of a white desk.](https://images.pexels.com/photos/8580716/pexels-photo-8580716.jpeg?auto=compress&amp;cs=tinysrgb&amp;w=1200&amp;fm=webp)

Cleanup takes 3 steps in the platform: confirm the position is flat, open the Orders panel, and cancel every working order on that contract. Prevention takes one design decision: who owns the exit? Give each trade exactly one exit owner, so a bracket and a strategy never both try to close the same position.

- **Check you’re flat first.** Cancelling legs under a live position strips away its only protection.
- **Cancel by contract when you can.** Cancel All clears working orders on every account, and Flatten All closes positions on every account.
- **Recheck after a partial close or a reverse.** Compare each leg’s side and size with what you now hold.
- **Choose one exit owner per strategy.** Either the bracket closes the trade and the strategy only enters, or the strategy closes it and sends no bracket.
- **Rehearse the exit path on a practice account.** Watch the Orders panel through one full trade before you trust it with a Combine.

### A cleanup routine for API bots {#a-cleanup-routine-for-api-bots}

For API bots, run a cleanup like this after any exit that isn’t a leg fill. It lists open and suspended orders for one contract, then cancels bracket children only, and only when you’re flat:

```
import json, urllib.request

API = "https://api.topstepx.com/api"

def post(path, body, token):
    req = urllib.request.Request(
        API + path, data=json.dumps(body).encode(),
        headers={"Content-Type": "application/json",
                 "Authorization": "Bearer " + token})
    with urllib.request.urlopen(req, timeout=10) as r:
        return json.load(r)

def cancel_leftover_legs(token, account_id, contract_id):
    held = post("/Position/searchOpen", {"accountId": account_id}, token)
    if any(p["contractId"] == contract_id for p in held.get("positions") or []):
        return "still in a position: leave its bracket alone"
    found = post("/Order/v2/query", {
        "filter": {"accountId": account_id, "contractId": contract_id,
                   "statuses": [1, 8]},   # 1 = Open, 8 = Suspended
        "pageSize": 100}, token)
    for o in found.get("orders") or []:
        if not o.get("parentOrderId"):    # not a bracket child, so skip it
            print("left alone:", o["id"])
            continue
        r = post("/Order/cancel", {"accountId": account_id, "orderId": o["id"]}, token)
        print("cancel", o["id"], r["errorCode"], r.get("errorMessage"))
```

Two caveats before you use it. The cancel endpoint works only on simulated accounts, which means the Combine, Express Funded and practice accounts. A live account gets errorCode 6 with “Live accounts not supported,” and the API Gateway isn’t available on Topstep’s Live Funded Account in any case.

We also haven’t run this against a funded account. It’s built from the live spec, and the `parentOrderId` check makes a misread field fail safe. If that field comes back empty on your account, the function cancels nothing and prints each order for you to decide. The [Topstep API walkthrough](https://blog.pickmytrade.io/topstep-api-getting-a-key-and-placing-your-first-automated-trade/) covers getting the token in the first place.

## Where does PickMyTrade fit in? {#where-does-pickmytrade-fit-in}

PickMyTrade’s ProjectX strategy setup offers 3 exit modes, and each one hands the exit to a single owner. Strategy-controlled exits send no stop or target at all. Attached SL/TP puts one stop and one target on each entry. Multiple exits leave TP1, TP2 and the rest to your TradingView alerts.

[PickMyTrade’s ProjectX strategy docs](https://docs.pickmytrade.io/docs/projectx-tradingview-alerts/) draw the one-owner line for you: choose attached SL/TP only when your strategy doesn’t handle exits. That option also needs the account in Auto OCO mode. If it’s still on Position Brackets, TopstepX rejects the entry with the error above, and [PickMyTrade’s switch walkthrough](https://docs.pickmytrade.io/docs/oco-brackets-in-topstepx/) shows the Risk Settings screens step by step.

Exits sent through PickMyTrade include the cleanup. Its [ProjectX indicator-alert docs](https://docs.pickmytrade.io/docs/projectx-tradingview-indicator-alerts/) say a close alert closes all open positions and cancels all open orders. An opposite-side alert closes the position and cancels its open orders before it opens the new side.

The blind spot is a manual click inside TopstepX, which the bridge never sees. Close a trade there and the legs are yours to cancel.

One difference is worth testing before you scale in. Those docs also say it keeps one stop and one target per symbol, and a new same-direction alert overwrites the earlier values. That isn’t how TopstepX’s native per-entry pairs behave, so send two same-direction alerts on a practice account and look at exactly which legs exist afterward. Two legs, or four?

PickMyTrade costs $50 a month, and the [7-day free trial](https://pickmytrade.io/pricing/) needs no credit card. The [Topstep setup page](https://pickmytrade.io/propfirms/topstep/) walks through connecting a TopstepX account with your ProjectX API key.

## Frequently Asked Questions {#frequently-asked-questions}

**Do OCO brackets cancel when I close a position manually in TopstepX?** 

Not through the OCO rule. In Auto OCO mode a pair cancels only when one of its 2 legs fills. TopstepX describes Close Position as a closing market order and doesn’t say it cancels the legs, so check the Orders panel and cancel whatever is left. Position Brackets clean up after themselves.

 
 
**Why doesn’t Order/searchOpen show my stop and target?** 

They’re still Suspended. Bracket legs on an unfilled entry sit in status 8, and the live spec says searchOpen skips them. Query /api/Order/v2/query with statuses 1 and 8 to list open and suspended orders together. Once the entry fills, the legs switch to status 1 and searchOpen returns them.

 
 
**Can I switch from Position Brackets to Auto OCO with a trade open?** 

No. TopstepX requires you to be completely flat before switching bracket types in either direction. Close the position, cancel any working orders, then switch under Settings, Risk Settings. Bracket objects sent before the switch get errorCode 2 and the Position Brackets error, and the rejected order still gets an ID.

 
 
**What’s the smallest stop TopstepX accepts on an OCO bracket?** 

TopstepX requires tick-based Auto OCO brackets to be more than 5 ticks, which makes 6 the practical minimum. Dollar-based brackets must sit at least 4 ticks from entry. On ES that works out to $75 or $50 per contract, and on MNQ to $3 or $2.

 
 
**Does PickMyTrade cancel leftover bracket orders?** 

For exits it sends, its docs say yes. A close alert closes all positions and cancels all open orders, and an opposite alert cancels open orders before reversing. It can’t see a manual close made inside TopstepX, so those legs stay yours to cancel. The 7-day free trial is long enough to test that on a practice account.

 
 

## Why leftover legs are an exit-design problem {#why-leftover-legs-are-an-exit-design-problem}

The OCO brackets TopstepX attaches do one job well. When one of the 2 legs fills, the other goes. Everything else falls outside that job, such as exit alerts, Close Position clicks, second entries and bots that emulate a pair from separate orders. Each of those can leave a live order sitting on a flat account.

That makes the fix a design decision, not a setting. Decide who owns each exit, cancel whatever the other owner leaves behind, and check the Orders panel after every exit path you haven’t watched yet. Before you put a bot on a Combine, read [TopstepX’s rules for automated accounts](https://blog.pickmytrade.io/topstepx-rules-payouts-drawdown-automation/) as well. When did you last watch the Orders panel through a full exit?

_**Disclaimer:**  
This content is for informational purposes only and does not constitute financial, investment, or trading advice. Trading and investing in financial markets involve risk, and it is possible to lose some or all of your capital. Always perform your own research and consult with a licensed financial advisor before making any trading decisions. The mention of any proprietary trading firms, brokers, does not constitute an endorsement or partnership. Ensure you understand all terms, conditions, and compliance requirements of the firms and platforms you use._

Also Checkout: [Blue Guardian Futures: Rules, Payouts and Copier Policy](https://blog.pickmytrade.io/blue-guardian-futures-rules-payouts-and-copier-policy/)

**Automate Your TradingView Strategies**  
Connect your alerts with [PickMyTrade](https://pickmytrade.io "PickMyTrade") — automated trade execution, no coding required. [Start free →](https://pickmytrade.io/pricing)

For AI tools &amp; developers:[View Markdown →](https://blog.pickmytrade.io/oco-brackets-topstepx-why-stop-and-target-outlive-the-trade.md)<!--pmtA1-clean-->