Stop-Loss & Take-Profit Guide: Trailing Stop, OCO, 13 Exchanges (2026)

Updated Rules checked 2026-10-18

Take-profit and stop-loss (TP/SL) orders are closing conditions you set in advance: only when the price hits your trigger price does the exchange send a market or limit order to close the position. On futures you can tick TP/SL when you place the order, or add it later in the “Positions” tab after opening; on spot you use a TP/SL order, or an OCO, where one order filling automatically cancels the other. I went through the official documentation of 13 exchanges. All of them support TP/SL on futures; the differences are which prices can serve as the trigger, and whether they offer trailing stops and spot OCO.

If the order sent after the trigger is a market order, you pay the Taker fee, and the fill can come in worse than the trigger price (slippage). If it is a limit order, a sudden price jump can leave it completely unfilled. Also, liquidation is based on the mark price; if your stop-loss triggers on the last price, in a violent move the position may be liquidated first, before the stop-loss ever gets a chance to trigger.

Leverage magnifies both gains and losses. If the price moves against you, the position may be forcibly liquidated and you will lose all of its margin. This article only explains how each type of exit order works, how to set it up and what fees you pay. It does not recommend where to place your stop-loss.

Key points
A market-triggered TP/SL fills as a Taker. At Binance’s VIP 0 futures Taker rate of 0.05%, stopping out 0.1 BTC at 57,000 USDT costs 2.85 USDT in closing fees.
Binance futures trailing stops take a callback rate from 0.01% to 20%; if you don’t set an activation price, the order activates at the current market price.
All 13 exchanges support TP/SL on futures. Among the official pages I found (including API docs), Binance, OKX, Bybit, Bitget, MEXC, BingX and KuCoin explicitly state that spot supports OCO orders.
The official documentation of Binance, Gate, XT and Pionex all warns that liquidation uses the mark price while a stop-loss may trigger on the last price, so the position can be liquidated before the stop-loss triggers.
BingX, MEXC and XT offer a paid “guaranteed stop-loss”: once triggered, it fills at the stop price you set with no slippage, and the fee is charged only when it triggers and fills.

The details below were checked against official pages on 2026-10-18 (data check date) and are provided for your reference.

What is TP/SL, and how do market and limit triggers differ?

A TP/SL order involves three prices: the trigger price (the order is sent only when it is hit), the order price (limit orders only) and the actual fill price. Before the trigger, the order does not enter the order book, and OKX’s documentation also states that the position and margin are not frozen before triggering (OKX futures TP/SL setup, updated 2026-08-26). The type of order sent after the trigger decides whether it fills, at what price, and how the fee is charged:

ItemMarket triggerLimit trigger
Sent after the triggerMarket orderLimit order at your specified price
Will it fill?Almost always (it can still fail in extreme markets or thin liquidity)Not filled, or only partly filled, if the price jumps past the order price
Fill priceWhatever the order book offers at that moment; slippage is possibleThe order price or better
FeeTakerTaker if it matches the order book immediately; Maker only if it rests in the book and fills later

Sources: Bybit’s overview of order types (updated 2026-09-30) states that a conditional market order fills at the best available price after triggering and counts as Taker, while a conditional limit order “is not necessarily executed as Maker”; the MEXC TP/SL FAQ (2026-10-08) states that TP/SL is “not 100% guaranteed to execute” and that the regular trading fee applies after triggering.

For a limit stop-loss, the order price is usually set slightly worse than the trigger price, but not too far from it. XT’s guide to setting TP/SL (updated 2026-08-07) uses a trigger price of 3,200 and an order price of 3,198 as its example, which makes the limit sell order more likely to fill. Binance’s OCO guide likewise recommends setting the stop-limit order price close to the trigger price.

Example: what TP/SL costs on a 10x long

Setup: on Binance, open a BTCUSDT long of 0.1 BTC at an entry price of 60,000 USDT. The position value is 6,000 USDT, at 10x isolated, with 600 USDT of margin. Fees use Binance’s VIP 0 futures rates of Maker 0.02% and Taker 0.05%, and the position is opened with a market order. The stop-loss at 57,000 and the take-profit at 66,000 are hypothetical prices chosen to keep the math simple.

ScenarioPrice P&L (USDT)Closing fee (USDT)Total including the 3 USDT opening fee (USDT)
Stop-loss at 57,000, market trigger, filled at the trigger price−3005,700 × 0.05% = 2.85−305.85
Same, but slipped to 56,900 before filling−3105,690 × 0.05% ≈ 2.85−315.85
Take-profit at 66,000 filled as a resting limit order (Maker)+6006,600 × 0.02% = 1.32+595.68
Take-profit at 66,000, market trigger (Taker)+6006,600 × 0.05% = 3.30+593.70

Calculated with the VIP 0 futures rates on Binance’s fee page, excluding funding fees. The table shows two things. First, slippage of 100 USDT per BTC costs an extra 10 USDT on 0.1 BTC, more than 3 times the 2.85 USDT fee, so most of a stop-loss’s cost comes from slippage, not fees. Second, switching the take-profit to a resting limit order saves 1.98 USDT on this trade.

The stop-loss also has to sit before the liquidation price. A rough estimate with the generic formula for an isolated long (maintenance margin rate assumed at 0.4%, Taker 0.05%) puts this position’s liquidation price at about (60,000 − 600 ÷ 0.1) ÷ (1 − 0.4% − 0.05%) ≈ 54,244 USDT. If the stop-loss is set below that price, the position will be liquidated first. Maintenance margin rates differ between exchanges; to plug in your own numbers, use the liquidation price calculator, and for the full fee math see how futures fees are calculated.

How does a trailing stop work?

A trailing stop (in their Chinese interfaces, OKX calls it a “moving TP/SL” and BingX, XT and Ourbit a “trailing order”) has a trigger price that follows the market in your favor. It triggers only when the price pulls back by the callback rate you set, and once triggered it usually fills at market. The rules in Binance’s trailing stop guide (updated 2026-07-31):

  • Callback rate: 0.01% to 20%, entered by you.
  • Activation price: optional. If left blank, the order activates at the current market price (the last price or the mark price, depending on the trigger type). For a trailing sell, the activation price must be above the market price; for a trailing buy, below it.
  • Trigger condition: the price must first reach the activation price and then pull back from the highest price since activation (the lowest price for buy orders) by at least the callback rate; only then is a market order sent. The trigger type can be the last price or the mark price, and the order can also be set to reduce-only.

Taking the same 0.1 BTC long at 60,000 USDT, place a trailing sell order with a 2% callback rate and an activation price of 63,000.

Market moveTrailing trigger priceResult
Price rises to 63,00063,000 × (1 − 2%) = 61,740Trailing order activates
Keeps rising to a high of 66,00066,000 × (1 − 2%) = 64,680The trigger price moves up with it and never moves down
Falls back from 66,000 to 64,68064,680Sold at market: price profit of 468 USDT, Taker fee 6,468 × 0.05% ≈ 3.23 USDT
Drops straight back to 61,740 after activation61,740Sold at market: price profit of 174 USDT
Never reaches 63,000NoneThe trailing order never activates and gives no protection if the price falls

Calculated with Binance’s rules; the fill price is the market price at the moment of triggering. The last row is the one people most often miss: with an activation price set, a trailing stop does nothing until it activates, so if you need downside protection you still have to set a regular stop-loss separately. OKX’s trailing stop guide (updated 2026-08-26) states that the activation price is based on the last traded price and that the callback can be set as a ratio or as a price distance; once any one of them triggers and fully closes the position, the other trailing stops are cancelled automatically.

Other exchanges describe it in much the same way. The MEXC trailing order FAQ (2026-03-16) gives the formula sell trigger price = historical high − callback; the activation price can follow the last traded price, mark price or index price, and after triggering the order reduces or closes the position at market. XT’s trailing order guide (updated 2026-06-16) notes that if the available quantity falls short at trigger time, the available quantity is used, and the order fails if that is below the minimum order size. HTX’s official API documentation gives a minimum callback rate of 0.1% for futures trailing orders and 0.1% to 5% for spot trailing stops (HTX USDT-M futures API, HTX spot API).

What is a spot OCO order?

OCO (One-Cancels-the-Other; Binance’s Chinese interface calls it a “selective order”) ties a limit order and a stop-limit order together: when one triggers or fills, the other is cancelled automatically, and cancelling one manually cancels the other as well. It is most often used when you hold spot and want a take-profit and a stop-loss in place at the same time. The price rules in Binance’s OCO guide (updated 2025-11-18):

  • Sell OCO: limit price (take-profit) > current price > stop trigger price.
  • Buy OCO: limit price < current price < stop trigger price.
  • Where to place it: Trade → Spot, choose OCO as the order type, and enter the take-profit limit price, stop trigger price, stop limit price and quantity.

Example: you hold 0.1 BTC on Binance spot, the current price is 60,000 USDT, and you place a sell OCO with a take-profit limit of 66,000, a stop trigger of 57,000 and a stop limit of 56,900. If the price rises to 66,000, the limit order fills, the stop order is cancelled automatically and you receive 6,600 USDT; at Binance’s spot VIP 0 rate of 0.1%, the fee is 6.6 USDT. If the price falls to 57,000, the stop-limit order is sent and sells at 56,900 or better, the take-profit order is cancelled, and a fill at 56,900 costs 5.69 USDT in fees. If the price jumps straight past 56,900, the stop-limit order sits in the order book unfilled. That is the price you pay for a limit stop.

Other exchanges’ rules: the BingX OCO guide (updated 2024-07-25) uses the same price relationships as Binance; on the web you select OCO from the “TP/SL” drop-down, and the app requires version 4.23.5 or later. MEXC’s spot order types (2026-09-21) states that when one order triggers or fills (even partially), the other is cancelled automatically. KuCoin’s spot OCO API documentation states that each account can hold at most 20 untriggered stop-type orders per trading pair. Bybit’s OCO is available only on spot, not on futures.

If spot doesn’t support OCO, you have to place the take-profit and the stop-loss as two separate orders. They are independent, so when one fills the other is not cancelled automatically, and you need to remember to cancel it yourself. For example, XT spot TP/SL (updated 2026-08-25) always places a limit order after triggering, and the Ourbit spot trading guide lists only three modes: limit, market and limit TP/SL. Ourbit spot also currently charges zero fees, so there is no rebate.

TP/SL order types at 13 exchanges

ExchangeFutures TP/SLTrigger price typesFutures trailing stopSpot OCOFutures Taker (market stop-loss fee)
BinanceYes, can be split (web “Split Targets”)Last price, mark priceYes, callback 0.01%–20%Yes0.05%
OKXYes, up to 100 per trading pairLast, mark, indexYes (trailing stop), up to 50Yes (API algo order types include OCO)0.05%
BybitYes, full or partial positionLast traded price, index, mark (last by default)YesYes (spot only)0.055%
BitgetYes, up to 20Last, mark, indexYesYes0.06%
MEXCYes, full or partial positionLast price, fair priceYesYes0.02%
GateYes, plus an MMR stop-lossLast, mark, indexYes (trailing take-profit)Not stated in the official help center0.05%
BingXYes, basic and advanced modesMark, lastYes (trailing order)Yes0.05%
KuCoinYesLast, mark (conditional orders can also use index)YesYes (up to 20 untriggered per trading pair)0.06%
HTXYesNot stated officially; separate price protectionYes, callback from 0.1%Not stated officially0.06%
XTYes, several orders allowed for partial positionsMark, index, last (last by default)Yes (trailing order)Not stated officially0.06%
WEEXYes, up to 20Last traded price (trigger orders can use mark)YesNot stated officially0.08%
PionexYes, up to 200 waiting to triggerLast, markNot stated officiallyNot stated officially0.05%
OurbitYes, closes at market after triggeringNot stated officially (trigger orders can use last, fair or index)Yes (trailing order)Not listed in the official spot tutorial0.04% (0.05% for Taiwan VIP 0 per its announcement)

Sources (checked 2026-10-18): Binance TP/SL, OKX API docs, Bybit TP/SL, Bitget TP/SL and spot strategy orders, Gate TP/SL introduction, BingX order types, KuCoin futures order types, HTX price protection announcement, XT TP/SL FAQ, WEEX TP/SL and WEEX futures order guide, Pionex manual futures FAQ, Ourbit order types; the MEXC, XT and OKX trailing stop pages are linked in the previous section. Taker is the VIP 0 rate for USDT-margined perpetual futures; each exchange’s source is in this site’s fee guides, such as Binance fees, OKX fees, Bybit fees and Bitget fees.

In money terms, closing 0.1 BTC with a market stop-loss at 57,000 USDT costs anywhere from 1.14 USDT on MEXC, 2.28 USDT on Ourbit, 2.85 USDT on Binance and OKX, 3.14 USDT on Bybit and 3.42 USDT on Bitget and KuCoin, up to 4.56 USDT on WEEX. The gap is as much as 4 times, but next to the slippage in the example above, this part is small.

Which exchanges offer a guaranteed stop-loss?

With a regular stop-loss, you bear the slippage. BingX, MEXC and XT also offer a paid guaranteed stop-loss, which is guaranteed to fill at the stop price you set once it triggers: BingX’s guaranteed price feature charges a fee based on trade value only when it triggers, and it cannot be modified once set; MEXC’s guaranteed stop-loss (2026-09-09) is available only on some trading pairs and can only trigger on the last price; under XT’s guaranteed stop-loss announcement (updated 2026-10-11), the fee = stop-loss filled quantity × stop-loss fill price × that pair’s guaranteed stop-loss fee rate, and the first supported pairs are BTCUSDT, ETHUSDT, SOLUSDT, XRPUSDT and DOGEUSDT. For all three, the fee rate shown on the order page is the one that applies.

Setup steps: Binance and OKX

Binance futures: set it when placing the order

  1. On the futures trading page, click “Limit” and enter the price and quantity (market orders and stop orders can also carry TP/SL).
  2. Tick “TP/SL” and choose “Last Price” or “Mark Price” as the trigger type.
  3. Enter the take-profit and stop-loss prices; you can also set them by estimated P&L, ROI% or offset%.
  4. Click “Buy/Long” or “Sell/Short” to submit, then check it in the “Open Orders” tab by clicking “View” in the “TP/SL” column.

If the position is already open, add or edit TP/SL in the “Positions” tab, and the settings apply to the whole position. To split it, use “Split Targets” on the web or “Partial TP/SL” in the app. A few limits: TP/SL and “Reduce-Only” cannot be ticked together; the official Chinese FAQ says, in translation, “If you use Hedge Mode, the TP/SL function only applies to pending orders”; and once the position is closed, its TP/SL is cancelled automatically. These steps follow Binance’s TP/SL FAQ (updated 2026-08-25), which does not list the app’s menu path separately. On the web, you can change the default trigger price under “Trade Preference” → “Default Trade Settings” → “Default Trigger Type”. For opening a position, see the Binance futures guide.

The FAQ also covers a detail that is easy to trip over: TP/SL attached to an order is an OTOCO or OTO strategy order, and the TP/SL is always placed for the main order’s quantity, even if the main order only partially fills. If the trigger price is too close to the main order’s price, the secondary orders may be cancelled as soon as the main order fills, so the official FAQ recommends keeping enough distance between the two.

Binance spot: placing an OCO

On both the web and the app, go to “Trade” → “Spot”, choose “OCO” as the order type, enter the take-profit limit price, stop trigger price, stop limit price and quantity in that order, and submit. Unfilled OCO orders appear under “Open Orders” and filled ones under “Order History” (Binance OCO guide). Binance’s spot API also supports trailing stops, with the trailing distance set in basis points (BIPS): 100 BIPS means the order triggers after a 1% drop from the highest price (Binance spot trailing stop FAQ).

OKX futures: TP/SL and trailing stop

  • When opening (same on app and web): on the futures trading page, enter the quantity, tick “TP/SL”, fill in the take-profit and stop-loss prices, and tap “Open long” or “Open short”; tap “Advanced” to set a trailing stop instead.
  • After opening, app: tap “Positions” → choose the position → “TP/SL”, and tap “Confirm” when you’re done.
  • After opening, web: under “Positions”, choose the position, click “Add” in the TP/SL column, and click “Confirm” when you’re done.
  • Trailing stop, app: “Trade” → “Futures” → “Positions” → choose the position → “TP/SL” → “Trailing stop” → choose “Ratio” or “Price distance”, fill in the callback, quantity and activation price (optional), and tap “Confirm”.
  • Trailing stop, web: “Trade” → “Futures” → “Positions” → choose the position, click “Add” under TP/SL → “Trailing stop”; the rest is the same.

The steps follow OKX futures TP/SL setup and the trailing stop guide (both updated 2026-08-26). OKX can trigger on the last price, mark price or index price, and it also states that TP/SL orders may fail to be placed because of price limits, position limits, insufficient margin or system issues. OKX’s official API documentation lists these limits on concurrent orders: 100 TP/SL orders per trading pair, 500 trigger orders and 50 trailing stops. For opening a position, see the OKX futures guide.

Common reasons a stop-loss doesn’t fill

  1. Executed as a limit order, and the price jumped past it: the official documentation of Bitget, MEXC and XT all states that a limit TP/SL may not fill, or may only partly fill, when the market gaps.
  2. Liquidated first: liquidation uses the mark price. Binance’s stop-loss and take-profit order guide warns that in violent swings the last price can deviate sharply from the mark price, so don’t set the stop-loss too close to the liquidation price; Pionex goes further and rejects any order whose stop-loss lies beyond the liquidation price. For how the trigger prices differ, see mark price vs last price.
  3. Price protection cancelled the order: HTX’s price protection is on by default; if the gap between the last price and the mark price exceeds a threshold at trigger time, the TP/SL skips the trigger and is cancelled. Bitget also has price protection based on the bankruptcy price and cancels the order when the closing price falls outside the range.
  4. Quantity mismatch: the Gate TP/SL FAQ states that a stop-loss larger than the position fails; XT states that a position larger than the single market order limit may also fail. On Pionex, once a partial take-profit fills, a full-position stop-loss whose quantity exceeds the remaining position becomes “Invalid”, leaving what’s left of the position unprotected.
  5. The position changed and the TP/SL was cancelled: after a manual close, liquidation or auto-deleveraging, Bitget and WEEX cancel the related TP/SL; on Gate, a manual close turns off every TP/SL in that contract market. Adding to a position needs care too: MEXC and XT state that adding changes the average entry price, but trigger prices already set don’t adjust with it.
  6. Conflict with reduce-only: Binance and KuCoin both state that TP/SL cannot be ticked together with “Reduce-Only”; on Gate in one-way mode, once reduce-only is ticked you can no longer set TP/SL.
  7. Market order deviation limit: BingX lets market orders deviate by at most 2%, and anything beyond that is cancelled automatically; KuCoin market orders also have a worst-fill-price limit, and the unfilled part outside the range is cancelled. Illiquid small-cap coins run into this most often.
  8. Insufficient margin: OKX and XT both state that if margin is insufficient at trigger time, the order may fail to be placed; MEXC also lists “not enough margin to cover the fee” as a cause of failure.

What are the risks of TP/SL?

TP/SL is a tool and does not guarantee results. The following limits are all stated on official pages:

  • Execution is not guaranteed: MEXC states that TP/SL is “not 100% guaranteed to execute”; WEEX states that in violent swings orders may not fill, or may not fill completely, and that it does not take responsibility for asset losses caused by market price movements.
  • You bear the slippage: after a market trigger, the order fills against the order book at that moment; Bybit also states that a stop-loss triggered by the mark price still fills at the last traded price, so slippage is still possible.
  • Liquidation may come first: if the stop-loss is too close to the liquidation price, or it triggers on the last price, the mark price may reach the liquidation price first; after liquidation you lose all of the margin. See cross vs isolated margin for details.
  • Trailing stops may trigger often: XT and WEEX both warn that in choppy markets, a callback rate set too narrow can close the position too early.
  • A guaranteed stop-loss costs extra: the guaranteed fill price comes at the cost of an extra fee, and it is available only on some trading pairs.
  • Rules change: exchanges adjust order types, trigger rules and limits through announcements, so go by what the trading page shows before you place an order.

FAQ

Do TP/SL orders charge a fee?

Setting TP/SL is free; the regular trading fee is charged only once it triggers and fills. A market trigger pays the Taker rate; a limit trigger pays the Maker rate only if the order rests in the order book and waits to fill. On Binance futures VIP 0, for example, Taker is 0.05% and Maker 0.02%, so a 0.1 BTC market stop-loss at 57,000 USDT costs 2.85 USDT in fees.

Should a stop-loss trigger on the mark price or the last price?

Both work; the difference is reaction speed and liquidation risk. The last price reacts quickly but is easily triggered by short-lived wicks; the mark price is steadier and is also the price liquidation uses. Bybit says the mark price is often used for stop-losses and helps them trigger before liquidation, and Pionex’s guide suggests the last price for take-profit and the mark price for stop-loss. Keep in mind, though, that a mark-price trigger still fills at the last price.

Can one position have several TP/SL orders?

Yes. Most exchanges let you set several for parts of a position. The limit depends on the exchange: up to 20 on Bitget, up to 20 on WEEX, up to 200 TP/SL orders waiting to trigger per Pionex futures account, and 100 per trading pair according to OKX’s API docs. Watch the quantities when you set several: after a partial take-profit fills, the remaining stop-loss quantity may exceed the position and become invalid.

How is a trailing stop different from a regular stop-loss?

A regular stop-loss has a fixed trigger price, while a trailing stop’s trigger price moves in your favor and triggers only when the price pulls back by the set amount. If a trailing stop has an activation price, it does not take effect until the price reaches it, so when you need downside protection you usually set it together with a regular stop-loss.

Can I set a stop-loss on spot?

Yes. To place a take-profit and a stop-loss at the same time, use OCO. Among the official pages I found (including API docs), Binance, OKX, Bybit, Bitget, MEXC, BingX and KuCoin explicitly state spot OCO support; XT and Ourbit spot list only limit TP/SL, so the two orders are placed separately, and after one fills you have to cancel the other yourself.

Why did my stop-loss trigger but fill at a much worse price?

Because once a market stop-loss triggers, it fills at whatever prices are in the order book at that moment, and slippage happens when the market drops fast or depth is thin. With 0.1 BTC, every 100 USDT of slippage per BTC costs an extra 10 USDT. If you don’t want to bear slippage, you can execute as a limit order instead (though it may not fill), or use the paid guaranteed stop-loss at BingX, MEXC or XT.

Does TP/SL adjust automatically after I add to a position?

Trigger prices don’t adjust automatically; the quantity depends on how you set it. MEXC and XT state that adding to a position changes the average entry price, but trigger prices already set stay the same. A TP/SL set to “entire position” follows the position size up and down (MEXC, XT and BingX all say so), while one with a fixed quantity does not.

Does TP/SL affect fee rebates?

Not in any additional way. When TP/SL triggers, you pay the regular trading fee, and for an account bound to a referral code with rebates, that fee earns rebates under each exchange’s rules as usual; funding fees are not trading fees charged by the exchange and do not generate rebates. For each exchange’s rebate rate and the effective fee after rebates, see exchange fees after rebates and the crypto exchange referral code hub.

For the difference between Maker and Taker, see Maker vs Taker fees. To run the numbers on your own position, use the perpetual futures cost calculator and the liquidation price calculator, and for choosing between cross and isolated, see cross vs isolated margin. Futures opening and TP/SL details for each exchange are in the futures guides for Binance, OKX, Bybit, Bitget, MEXC, Gate, BingX, KuCoin, XT, WEEX, Pionex and Ourbit. If you’d rather not watch the market by hand, see also what is grid trading.