Trailing stop is a type of contingent order with a dynamic trigger price influenced by price changes in the market. For the SPOT API, the change required to trigger order entry is specified in the trailingDelta
parameter, and is defined in BIPS.
Intuitively, trailing stop orders allow unlimited price movement in a direction that is beneficial for the order, and limited movement in a detrimental direction.
Buy orders: low prices are good. Unlimited price decreases are allowed but the order will trigger after a price increase of the supplied delta, relative to the lowest trade price since submission.
Sell orders: high prices are good. Unlimited price increases are allowed but the order will trigger after a price decrease of the supplied delta, relative to the highest trade price since submission.
Basis Points, also known as BIP or BIPS, are used to indicate a percentage change.
BIPS conversion reference:
BIPS | Percentage | Multiplier |
---|---|---|
1 | 0.01% | 0.0001 |
10 | 0.1% | 0.001 |
100 | 1% | 0.01 |
1000 | 10% | 0.1 |
For example, a STOP_LOSS
SELL
order with a trailingDelta
of 100 is a trailing stop order which will be triggered after a price decrease of 1% from the highest price after placing the order.
Trailing stop orders are supported for contingent orders such as STOP_LOSS
, STOP_LOSS_LIMIT
, TAKE_PROFIT
, and TAKE_PROFIT_LIMIT
.
OCO orders also support trailing stop orders in the contingent leg. In this scenario if the trailing stop condition is triggered, the limit leg of the OCO order will be canceled.
Trailing stop orders are entered the same way as regular STOP_LOSS
, STOP_LOSS_LIMIT
, TAKE_PROFIT
, or TAKE_PROFIT_LIMIT
orders, but with an additional trailingDelta
parameter. This parameter must be within the range of the TRAILING_DELTA
filter for that symbol.
Unlike regular contingent orders, the stopPrice
parameter is optional for trailing stop orders. If it is provided then the order will only start tracking price changes after the stopPrice
condition is met. If the stopPrice
parameter is omitted then the order starts tracking price changes from the next trade.
Trailing order type | Side | Stop price condition | Market price movement required to trigger |
---|---|---|---|
TAKE_PROFIT |
SELL | market price >= stop price | decrease from maximum |
TAKE_PROFIT_LIMIT |
SELL | market price >= stop price | decrease from maximum |
STOP_LOSS |
SELL | market price <= stop price | decrease from maximum |
STOP_LOSS_LIMIT |
SELL | market price <= stop price | decrease from maximum |
STOP_LOSS |
BUY | market price >= stop price | increase from minimum |
STOP_LOSS_LIMIT |
BUY | market price >= stop price | increase from minimum |
TAKE_PROFIT |
BUY | market price <= stop price | increase from minimum |
TAKE_PROFIT_LIMIT |
BUY | market price <= stop price | increase from minimum |
For STOP_LOSS
BUY
, STOP_LOSS_LIMIT
BUY
, TAKE_PROFIT
SELL
, and TAKE_PROFIT_LIMIT
SELL
orders:
trailingDelta
>=minTrailingAboveDelta
trailingDelta
<=maxTrailingAboveDelta
For STOP_LOSS
SELL
, STOP_LOSS_LIMIT
SELL
, TAKE_PROFIT
BUY
, and TAKE_PROFIT_LIMIT
BUY
orders:
trailingDelta
>=minTrailingBelowDelta
trailingDelta
<=maxTrailingBelowDelta
At 12:01:00
there is a trade at a price of 40,000 and a STOP_LOSS_LIMIT
order is placed on the BUY
side of the exchange. The order has of a stopPrice
of 44,000, a trailingDelta
of 500 (5%), and a limit price
of 45,000.
Between 12:01:00
and 12:02:00
a series of linear trades lead to a decrease in last price, ending at 37,000. This is a price decrease of 7.5% or 750 BIPS, well exceeding the order's trailingDelta
. However since the order has not started price tracking, the price movement is ignored and the order remains contingent.
Between 12:02:00
and 12:03:00
a series of linear trades lead to an increase in last price. When a trade is equal to, or surpasses, the stopPrice
the order starts tracking price changes immediately; the first trade that meets this condition sets the "lowest price". In this case, the lowest price is 44,000 and if there is a 500 BIPS increase from 44,000 then the order will trigger. The series of linear trades continue to increase the last price, ending at 45,000.
Between 12:03:00
and 12:04:00
a series of linear trades lead to an increase in last price, ending at 46,000. This is an increase of ~454 BIPS from the order's previously noted lowest price, but it's not large enough to trigger the order.
Between 12:04:00
and 12:05:00
a series of linear trades lead to a decrease in last price, ending at 42,000. This is a decrease from the order's previously noted lowest price. If there is a 500 BIPS increase from 42,000 then the order will trigger.
Between 12:05:00
and 12:05:30
a series of linear trades lead to an increase in last price to 44,100. This trade is equal to, or surpasses, the order's requirement of 500 BIPS, as 44,100 = 42,000 * 1.05
. This causes the order to trigger and start working against the order book at its limit price of 45,000.
At 12:01:00
there is a trade at a price of 40,000 and a STOP_LOSS_LIMIT
order is placed on the SELL
side of the exchange. The order has of a stopPrice
of 39,000, a trailingDelta
of 1000 (10%), and a limit price
of 38,000.
Between 12:01:00
and 12:02:00
a series of linear trades lead to an increase in last price, ending at 41,500.
Between 12:02:00
and 12:03:00
a series of linear trades lead to a decrease in last price. When a trade is equal to, or surpasses, the stopPrice
the order starts tracking price changes immediately; the first trade that meets this condition sets the "highest price". In this case, the highest price is 39,000 and if there is a 1000 BIPS decrease from 39,000 then the order will trigger.
Between 12:03:00
and 12:04:00
a series of linear trades lead to a decrease in last price, ending at 37,000. This is a decrease of ~512 BIPS from the order's previously noted highest price, but it's not large enough to trigger the order.
Between 12:04:00
and 12:05:00
a series of linear trades lead to an increase in last price, ending at 41,000. This is an increase from the order's previously noted highest price. If there is a 1000 BIPS decrease from 41,000 then the order will trigger.
Between 12:05:00
and 12:05:30
a series of linear trades lead to a decrease in last price to 36,900. This trade is equal to, or surpasses, the order's requirement of 1000 BIPS, as 36,900 = 41,000 * 0.90
. This causes the order to trigger and start working against the order book at its limit price of 38,000.
At 12:01:00
there is a trade at a price of 40,000 and a TAKE_PROFIT_LIMIT
order is placed on the BUY
side of the exchange. The order has of a stopPrice
of 38,000, a trailingDelta
of 850 (8.5%), and a limit price
of 38,500.
Between 12:01:00
and 12:02:00
a series of linear trades lead to an increase in last price, ending at 42,000.
Between 12:02:00
and 12:03:00
a series of linear trades lead to a decrease in last price. When a trade is equal to, or surpasses, the stopPrice
the order starts tracking price changes immediately; the first trade that meets this condition sets the "lowest price". In this case, the lowest price is 38,000 and if there is a 850 BIPS increase from 38,000 then the order will trigger.
The series of linear trades continues to decrease the last price, ending at 37,000. If there is a 850 BIPS increase from 37,000 then the order will trigger.
Between 12:03:00
and 12:04:00
a series of linear trades lead to an increase in last price, ending at 39,000. This is an increase of ~540 BIPS from the order's previously noted lowest price, but it's not large enough to trigger the order.
Between 12:04:00
and 12:05:00
a series of linear trades lead to a decrease in last price, ending at 38,000. It does not surpass the order's previously noted lowest price, resulting in no change to the order's trigger price.
Between 12:05:00
and 12:05:30
a series of linear trades lead to an increase in last price to 40,145. This trade is equal to, or surpasses, the order's requirement of 850 BIPS, as 40,145 = 37,000 * 1.085
. This causes the order to trigger and start working against the order book at its limit price of 38,500.
At 12:01:00
there is a trade at a price of 40,000 and a TAKE_PROFIT_LIMIT
order is placed on the SELL
side of the exchange. The order has of a stopPrice
of 42,000, a trailingDelta
of 750 (7.5%), and a limit price
of 41,000.
Between 12:01:00
and 12:02:00
a series of linear trades lead to an increase in last price, ending at 41,500.
Between 12:02:00
and 12:03:00
a series of linear trades lead to a decrease in last price, ending at 39,000.
Between 12:03:00
and 12:04:00
a series of linear trades lead to an increase in last price. When a trade is equal to, or surpasses, the stopPrice
the order starts tracking price changes immediately; the first trade that meets this condition sets the "highest price". In this case, the highest price is 42,000 and if there is a 750 BIPS decrease from 42,000 then the order will trigger.
The series of linear trades continues to increase the last price, ending at 45,000. If there is a 750 BIPS decrease from 45,000 then the order will trigger.
Between 12:04:00
and 12:05:00
a series of linear trades lead to a decrease in last price, ending at 44,000. This is a decrease of ~222 BIPS from the order's previously noted highest price, but it's not large enough to trigger the order.
Between 12:05:00
and 12:06:00
a series of linear trades lead to an increase in last price, ending at 46,500. This is an increase from the order's previously noted highest price. If there is a 750 BIPS decrease from 46,500 then the order will trigger.
Between 12:06:00
and 12:06:50
a series of linear trades lead to a decrease in last price to 43,012.5. This trade is equal to, or surpasses, the order's requirement of 750 BIPS, as 43,012.5 = 46,500 * 0.925
. This causes the order to trigger and start working against the order book at its limit price of 41,000.
At 12:01:00
there is a trade at a price of 40,000 and a STOP_LOSS_LIMIT
order is placed on the SELL
side of the exchange. The order has a trailingDelta
of 700 (7%), a limit price
of 39,000 and no stopPrice
. The order starts tracking price changes once placed. If there is a 700 BIPS decrease from 40,000 then the order will trigger.
Between 12:01:00
and 12:02:00
a series of linear trades lead to an increase in last price, ending at 42,000. This is an increase from the order's previously noted highest price. If there is a 700 BIPS decrease from 42,000 then the order will trigger.
Between 12:02:00
and 12:03:00
a series of linear trades lead to a decrease in last price, ending at 39,500. This is a decrease of ~595 BIPS from the order's previously noted highest price, but it's not large enough to trigger the order.
Between 12:03:00
and 12:04:00
a series of linear trades lead to an increase in last price, ending at 45,500. This is an increase from the order's previously noted highest price. If there is a 700 BIPS decrease from 45,500 then the order will trigger.
Between 12:04:00
and 12:04:45
a series of linear trades lead to a decrease in last price to 42,315. This trade is equal to, or surpasses, the order's requirement of 700 BIPS, as 42,315 = 45,500 * 0.93
. This causes the order to trigger and start working against the order book at its limit price of 39,000.
Assuming a last price of 40,000.
Placing a trailing stop STOP_LOSS_LIMIT BUY
order, with a price of 42,000.0 and a trailing stop of 5%.
# Excluding stop price
POST 'https://api.binance.com/api/v3/order?symbol=BTCUSDT&side=BUY&type=STOP_LOSS_LIMIT&timeInForce=GTC&quantity=0.01&price=42000&trailingDelta=500×tamp=<timestamp>&signature=<signature>'
# Including stop price of 43,000
POST 'https://api.binance.com/api/v3/order?symbol=BTCUSDT&side=BUY&type=STOP_LOSS_LIMIT&timeInForce=GTC&quantity=0.01&price=42000&stopPrice=43000&trailingDelta=500×tamp=<timestamp>&signature=<signature>'
Placing a trailing stop STOP_LOSS_LIMIT SELL
order, with a price of 37,500.0 and a trailing stop of 2.5%.
# Excluding stop price
POST 'https://api.binance.com/api/v3/order?symbol=BTCUSDT&side=SELL&type=STOP_LOSS_LIMIT&timeInForce=GTC&quantity=0.01&price=37500&trailingDelta=250×tamp=<timestamp>&signature=<signature>'
# Including stop price of 39,000
POST 'https://api.binance.com/api/v3/order?symbol=BTCUSDT&side=SELL&type=STOP_LOSS_LIMIT&timeInForce=GTC&quantity=0.01&price=37500&stopPrice=39000&trailingDelta=250×tamp=<timestamp>&signature=<signature>'
Placing a trailing stop TAKE_PROFIT_LIMIT BUY
order, with a price of 38,000.0 and a trailing stop of 5%.
# Excluding stop price
POST 'https://api.binance.com/api/v3/order?symbol=BTCUSDT&side=BUY&type=TAKE_PROFIT_LIMIT&timeInForce=GTC&quantity=0.01&price=38000&trailingDelta=500×tamp=<timestamp>&signature=<signature>'
# Including stop price of 36,000
POST 'https://api.binance.com/api/v3/order?symbol=BTCUSDT&side=BUY&type=TAKE_PROFIT_LIMIT&timeInForce=GTC&quantity=0.01&price=38000&stopPrice=36000&trailingDelta=500×tamp=<timestamp>&signature=<signature>'
Placing a trailing stop TAKE_PROFIT_LIMIT SELL
order, with a price of 41,500.0 and a trailing stop of 1.75%.
# Excluding stop price
POST 'https://api.binance.com/api/v3/order?symbol=BTCUSDT&side=SELL&type=TAKE_PROFIT_LIMIT&timeInForce=GTC&quantity=0.01&price=41500&trailingDelta=175×tamp=<timestamp>&signature=<signature>'
# Including stop price of 42,500
POST 'https://api.binance.com/api/v3/order?symbol=BTCUSDT&side=SELL&type=TAKE_PROFIT_LIMIT&timeInForce=GTC&quantity=0.01&price=41500&stopPrice=42500&trailingDelta=175×tamp=<timestamp>&signature=<signature>'