Skip to main content
Take-profit (TP) and stop-loss (SL) orders are the backbone of disciplined trading. Intention supports TP/SL both attached to a new order (parent-child mode) and configured directly on an existing position, with different behaviors in each case. All position-level TP/SL orders are reduce-only by construction — their only purpose is to close or reduce a position, never to open a new one.

Trigger basis and execution

Every TP/SL order has two independent choices:
  • Trigger price source — the mark price or the last traded price.
  • Execution type — market or limit once the trigger fires.
Mark-price triggers are the default recommendation for stops because they are manipulation-resistant. Last-price triggers are more responsive but can be gamed on thin books. Intention enforces triggerProtect per contract: when last price deviates from mark by more than the configured threshold, last-price triggers temporarily fall back to mark-price triggers.

Three ways to configure TP/SL

1. Attached to a new order (parent-child)

When you place a new order, you can attach TP and/or SL as child orders. The children are strongly bound to the parent’s lifecycle:
  • If the parent is cancelled (before or after partial fill), the children are cancelled.
  • Children only activate once the parent is fully filled.
  • Once activated, TP and SL form a standard OCO pair.

2. Position-level, specific quantity

On an existing position, you can add a TP and/or SL with a user-specified quantity (config amount). Linkage depends on timing:
  • Placed in the same action. The TP and SL are linked as an OCO pair.
  • Placed separately. They are independent. Each triggers independently and does not cancel the other.

3. Position-level, whole position

On an existing position, you can add a TP and/or SL that targets the entire position. The two orders are always and automatically linked as an OCO pair, regardless of whether they were placed together or separately. At most one whole-position TP and one whole-position SL can coexist per position. Mixed configurations (one whole-position TP with several partial TP/SL orders) are permitted but only the whole-position orders are OCO-linked.

Dynamic sizing

Position-level TP/SL targeting the whole position does not lock a specific quantity at setup. The close quantity is determined by the position size at the moment the trigger fires. If you manually add or reduce the position after setting TP/SL, the triggered order automatically sizes to your current position. Once a TP/SL trigger converts into a limit order sitting on the book, its quantity is locked and no longer tracks subsequent position changes.

OCO behavior

When a TP/SL pair is linked (OCO), the two orders coordinate in two modes: Mode A — Cancel on full fill. When one side (say TP) is triggered and fills completely, the other side (SL) is cancelled automatically. Mode B — Cancel on reverse trigger. When one side is triggered into a limit that does not fill completely, and then the opposite side’s condition is met, the following happens:
1

Cancel the partially-filled limit

The unfilled portion of the first triggered order is cancelled.
2

Trigger the opposite side

The newly triggered SL/TP generates its own new order. If it was a whole-position TP/SL, the quantity is derived from the current position size at that moment, which may be different from the original trigger’s quantity.

Partial fill risk

A triggered TP/SL that converts into a market order is IOC by construction. If the book does not have enough depth to absorb the full size, the market order partially fills and the remainder is immediately cancelled — leaving you with a residual open position. Intention’s design choice is one-shot triggering. A TP/SL that triggers once will not re-fire if the fill was partial. This is intentional: on thin books, re-firing would compound market impact and risk chasing the price. If the market becomes thin enough that your TP/SL cannot exit cleanly, you will see the residual position and can decide how to handle it.

Slippage and price bands

Market orders generated by TP/SL triggers use a fixed 10% slippage tolerance, not the user’s personal slippage setting. This avoids surprises from loose slippage tolerances — stops always have a firm bound. All other protections (market-to-limit conversion, price bands) still apply.

Modifying TP/SL

Placed TP/SL orders cannot be edited in place. To change the trigger or limit price, cancel the old order and create a new one. The UI handles this as a single “edit” affordance, but underneath it is always cancel-and-replace.

Interaction with liquidations and ADL

If a position goes into liquidation, all TP/SL orders (including untriggered conditionals) on that contract and side are cancelled before the liquidation engine takes over. If ADL takes only part of a position, the remaining TP/SL orders stay live and will fire at their configured levels based on the new position size.