Purpose of the Feature
To provide protection from “fat-finger” (user input error on UI) and/or algorithmic errors that place/execute orders far outside prevailing prices
Definitions
Term | Definition |
Mark Price | External vendor provided price: a volume-weighted average of perps' mid prices at several top exchanges.
Served as “mark_price” field in our API endpoints
|
Price_bandwidth_percent | Coin-specific symmetrical (i.e. same percent for buy and sell orders) ±% band around Mark within which aggressive executions must occur.
|
Limit down price
and
Limit up price.
| Price bands restrict the execution of aggressive orders to some bandwidth that contains the Mark Price.
Any instrument will have dynamic Limit down price and Limit up price.
The price band for a perpetual future market is centered around the Mark Price according to the % bandwidth parameter ( price_bandwidth_percent ), as follows:
Limit_down_price = Mark_Price * ( 1 - price_bandwidth_percent) Limit_up_price = Mark_Price * ( 1 + price_bandwidth_percent) |
Aggressive Order | Any order that would immediately match on arrival (market or marketable limit). |
Passive Order | Limit order that posts to the book without crossing the spread. |
Expected Behavior
Bandwidth parameter = 5%
Mark price = $100
→ Limit down price = $95 and Limit up price = $105
Limit Orders
Aggressive Limit Orders with Limit Prices outside of the [ Limit_down_price , Limit_up_price ] interval (aka the Price Protection Band) will be fully rejected ( no partial execution occurs).
A (aggressive) limit BUY order at $106 is rejected
A (aggressive) limit SELL order at $94 is rejected
Passive Limit Orders with Limit Prices outside of the [ Limit_down_price , Limit_up_price ] interval (aka the Price Protection Band) will be accepted.
A (passive) limit BUY order at $94 is accepted
A (passive) limit SELL order at $106 is accepted
Market Orders
Market Orders are to be converted to aggressive Limit IOC orders, with BUY Orders assigned a limit price = Limit_up_price , and SELL Orders assigned a limit price = Limit_down_price
If no quantity can be filled inside the band (e.g., spread widens above Limit_up_price), the entire IOC is rejected.
A market BUY order is assigned a limit price = $105. Any quantity that is not immediately filled (on the resulting $105 order) is rejected (cancelled back to the user)
A market SELL order is assigned a limit price = $95. Any quantity that is not immediately filled (on the resulting $95 order) is rejected (cancelled back to the user)
Note: the logic is different between Limit and Market Orders:
Aggressive Limit Orders with Limit Prices outside of the [ Limit_down_price , Limit_up_price ] interval are fully rejected ( no partial execution occurs).
Market Orders are converted to aggressive Limit IOC orders, with Limit_up_price (BUY) / Limit_down_price (SELL) - this allows for partial execution within the Limit_up / Limit_down price.
Expected Behavior - TPSL Price Protection
The user will not be able to create trigger limit orders where the limit price is more than Price_bandwidth_percent % worse than the trigger price (i.e. more than Price_bandwidth_percent % higher than the trigger price for buy orders, more than Price_bandwidth_percent % lower than the trigger price for sell orders )
Once the TPSL order is triggered (i.e. converted to a Market or Limit order, depending on whether it was setup as TPSL-Market or TPSL-Limit), the same Expected Behavior as described above will be applied to the resulting Market and Limit orders
Aggressive Limit Orders with Limit Prices outside of the [ Limit_down_price , Limit_up_price ] interval (aka the Price Protection Band) will be rejected.
Passive Limit Orders with Limit Prices outside of the [ Limit_down_price , Limit_down_price ] interval (aka the Price Protection Band) will be accepted.
Market orders will be converted to aggressive Limit IOC orders, with BUY Orders assigned a limit price = Limit_up_price , and SELL Orders assigned a limit price = Limit_down_price
Coin-Specific Overrides of Price Bandwidth Percent
The default value is 10% for both limit_up (“high”) and limit_down (“low”)
Below table shows the Instruments for which the default price band values are overridden
note: for all the coins , the percent band is symmetrical, i.e. limit_up (high) == limit_down (low)
Coin | Override Value ( in % ) |
ADA | 5 |
BNB | 5 |
BTC | 5 |
ETH | 5 |
LTC | 5 |
SOL | 5 |
XLM | 5 |
XRP | 5 |
H | 15 |
MNT | 15 |
VIRTUAL | 15 |