> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Take-Profit & Stop-Loss

> Attach TP and SL to new orders or to existing positions, with OCO linkage, market or limit triggers, and strict reduce-only semantics.

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](/trading/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:

<Steps>
  <Step title="Cancel the partially-filled limit">
    The unfilled portion of the first triggered order is cancelled.
  </Step>

  <Step title="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.
  </Step>
</Steps>

## 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](/trading/market-to-limit), 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](/trading/liquidations), all TP/SL orders (including untriggered conditionals) on that contract and side are cancelled before the liquidation engine takes over. If [ADL](/trading/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.
