Поточна стаття не підтримує вибрану вами мову. Її було автоматично рекомендовано для вас англійською мовою
Bitget Retail Price Improvement (RPI) Orders
[Estimated reading time: 5 minutes]
The Retail Price Improvement (RPI) order is a special order type available under the unified trading account model. It is designed to enhance liquidity by only matching with non-algorithmic orders (i.e., orders not placed via OpenAPI). This order type provides qualifying retail orders with better execution prices, achieving price improvement and reducing slippage.
Core Mechanisms of RPI Orders
1. Matching logic: RPI orders exclusively match with non-algorithmic orders. They do not trade against orders submitted via OpenAPI.
2. Order type: All RPI orders are passive orders and fall under the maker order category. They only execute against taker orders, thereby adding liquidity to the order book.
3. Execution priority: At the same price level, RPI orders have a lower execution priority compared to non-RPI orders, irrespective of the time they were placed. RPI orders at a given price level will only be executed after all non-RPI orders at that same price have been completely filled.
How to place an RPI order
1. RPI orders can be submitted via REST API or WebSocket API. The order must be set to limit with timeInForce = rpi.
2. Only designated market maker partners can place RPI orders. If an unauthorized market maker attempts to place one, they will receive the following error message: "Your account is not authorized to place RPI orders for this instrument."
RPI order trading rules
1. RPI orders are supported in both isolated margin and cross margin modes under the unified trading account. They are available for trading in futures, spot, and margin markets.
2. RPI orders are not supported during pre-market trading. They can only be placed after the call auction concludes; otherwise, the order will be rejected.
3. The validation logic for RPI orders is the same as for regular limit orders. Requirements for margin, minimum and maximum order sizes, and open interest (OI) limits are identical to those for standard limit orders.
4. Price limits for RPI orders
a. For futures:
• Buy order: Mark price × 110% ≥ RPI order price ≥ mark price × 50%
• Sell order: Mark price × 150% ≥ RPI order price ≥ mark price × 90%
b. For spot and margin:
• Buy order: Last traded price × 110% ≥ RPI order price ≥ last traded price × 70%
• Sell order: Last traded price × 130% ≥ RPI order price ≥ last traded price × 90%
Note: The thresholds (50%, 90%, 110%, 150%) provided above are for reference only. These parameters are configurable per trading pair, and the platform reserves the right to adjust them based on market conditions.
5. RPI orders support batch placement, order modification (including price and quantity), and cancellation.
6. RPI orders cannot be used in conjunction with strategy orders (such as stop-loss, take-profit, or stop-loss-limit orders).
7. RPI orders cannot execute against non-RPI orders on the opposing side. When the opposing side consists solely of RPI orders, trades can still be executed, but RPI orders will not match with other RPI orders.
8. Market fluctuations may cause RPI buy orders to be priced higher than the non-RPI best bid, or RPI sell orders to be priced lower than the non-RPI best ask. Such RPI orders are considered invalid and will not be matched, though they will remain on the order book. They will become valid once more competitively priced non-RPI orders appear.
RPI order display
1. API order book: RPI orders are displayed in the API order book.
2. Trading page order book: RPI orders are displayed on the trading interface without any special tags.
To maintain an orderly book, crossed RPI orders (where the buy price is higher than the sell price) are hidden. For more details on crossed RPI orders, refer to the examples below:
Example 1
The order book is as follows:
|
|
Price
|
Quantity
|
|
Ask 2
|
1002
|
200
|
|
Ask 1
|
1000 (RPI)
|
100
|
|
Bid 1
|
999 (RPI)
|
90
|
|
Bid 2
|
998
|
120
|
• A new RPI buy order at 1000 is accepted.
• A new RPI buy order at 1001 is accepted.
• A new RPI buy order at 1002 is rejected, as there is a non-RPI order at the ask 2 level.
Order book on the trading page:
When there is a cross:
• Crossed RPI orders are hidden from the order book on the trading page. However, it's still active in the match engine and ready to be executed according to the rules.
• Non-crossed RPI orders are visible with no special tag.
Example 2
The order book is as follows. Crossed RPI orders are hidden and not executed against each other.
|
|
Price
|
Quantity
|
Visible?
|
|
Ask 4
|
1004
|
200
|
Yes
|
|
Ask 3
|
1003 (RPI)
|
150
|
Yes
|
|
Ask 2
|
1001 (RPI)
|
100
|
No
|
|
Ask 1
|
999 (RPI)
|
50
|
No
|
|
Bid 1
|
1002 (RPI)
|
100
|
No
|
|
Bid 2
|
1000 (RPI)
|
200
|
No
|
|
Bid 3
|
999
|
200
|
Yes
|
|
Bid 4
|
996 (RPI)
|
300
|
Yes
|
In order book data/stream in the API, all RPI orders are excluded.
OpenAPI and data depth
1. RPI depth
1.1 REST
• GET /api/v3/market/rpi-orderbook
• Rate limit: 10 requests/s
|
Parameter name
|
Parameter type
|
Request response
|
Required?
|
Description
|
|
category
|
String
|
Request parameter
|
Yes
|
Product line
spot Spot
usdt-futures USDT-M Futures
coin-futures Coin-M Futures
usdc-futures USDC-M Futures
|
|
symbol
|
String
|
Request parameter
|
Yes
|
Trading pair name
|
|
limit
|
String
|
Request parameter
|
No
|
Depth level
spot maximum: 200, default: 5
usdt-futures, coin-futures, usdc-futures maximum: 200, default: 5
|
|
a
|
Array
|
Response parameter
|
/
|
Sell depth
• Sorted by price in ascending order
|
|
> Index 0
|
String
|
Response parameter
|
/
|
Sell price
|
|
> Index 1
|
String
|
Response parameter
|
/
|
Non-RPI sell quantity
|
|
> Index 2
|
String
|
Response parameter
|
/
|
RPI sell quantity
|
|
b
|
Array
|
Response parameter
|
/
|
Buy depth
• Sorted by price in descending order
|
|
> Index 0
|
String
|
Response parameter
|
/
|
Buy price
|
|
> Index 1
|
String
|
Response parameter
|
/
|
Non-RPI buy quantity
|
|
> Index 2
|
String
|
Response parameter
|
/
|
RPI buy quantity
|
|
ts
|
String
|
Response parameter
|
/
|
System timestamp for data generation
• Unix timestamp in milliseconds
|
1.2 WebSocket
1.2.1 Request parameters
|
Parameter name
|
Type
|
Required?
|
Description
|
|
op
|
String
|
Yes
|
Action
subscribe Subscribe
unsubscribe Unsubscribe
|
|
args
|
List
|
Yes
|
List of channels to request subscription
|
|
> instType
|
String
|
|
Product type
spot Spot
usdt-futures USDT-M Futures
coin-futures Coin-M Futures
usdc-futures USDC-M Futures
|
|
> topic
|
String
|
Yes
|
Channel name
rpi-books Channels of all levels
rpi-books1 Level 1 channels
rpi-books5 Level 5 channels
rpi-books50 Level 50 channels
|
|
> symbol
|
String
|
Yes
|
Trading pair name
For example: BTCUSDT
|
1.2.2 Return parameters
|
Parameter
|
Type
|
Description
|
|
event
|
String
|
Event
subscribe Subscribe
unsubscribe Unsubscribe
error Parameter error
|
|
arg
|
Object
|
Subscribed channels
|
|
> instType
|
String
|
Product type
spot Spot
usdt-futures USDT-M Futures
coin-futures Coin-M Futures
usdc-futures USDC-M Futures
|
|
> topic
|
String
|
Channel name
rpi-books Channels of all levels
rpi-books1 Level 1 channels
rpi-books5 Level 5 channels
rpi-books50 Level 50 channels
|
|
code
|
String
|
Error code
|
|
msg
|
String
|
Error message
|
1.2.3 Push parameters
|
Parameter
|
Type
|
Description
|
|
arg
|
Object
|
Subscribed channels
|
|
> instType
|
String
|
Product type
spot Spot
usdt-futures USDT-M Futures
coin-futures Coin-M Futures
usdc-futures USDC-M Futures
|
|
> symbol
|
String
|
Trading pair name
|
|
> topic
|
String
|
Channel name
|
|
action
|
String
|
Push data action
snapshot Full
update Increment
|
|
data
|
List
|
Subscription data
|
|
> a
|
String
|
Sell depth
|
|
>> a[0]
|
String
|
Sell price
|
|
>> a[1]
|
String
|
Non-RPI sell quantity
|
|
>> a[2]
|
String
|
RPI sell quantity
|
|
> b
|
String
|
Buy depth
|
|
>> b[0]
|
String
|
Buy price
|
|
>> b[1]
|
String
|
Non-RPI buy quantity
|
|
>> b[2]
|
String
|
RPI buy quantity
|
|
> ts
|
String
|
Matching timestamp
|
|
> seq
|
String
|
Sequence number
|
|
> previousSeq
|
String
|
Sequence number from the previous push
|
2. Trade information
An RPI type identifier has been added to the platform's trade endpoints and channels.
• Recent trades: /api/v3/market/fills
• Trade details: /api/v3/trade/fills
• Public trade channel: topic=publicTrade
• Private trade channel: topic=fill
|
Parameter name
|
Parameter type
|
Request response
|
Required?
|
Description
|
|
isRPI
|
String
|
Response parameter
|
/
|
RPI-type trade?
yes Yes
no No
|
3. Place order & batch place order
The rpi type has been added to the order execution strategy for single and batch order placement endpoints.
• Place order: POST /api/v3/trade/place-order
• Batch place order: POST /api/v3/trade/place-batch
• Order placement channel: topic=place-order
• Batch order placement channel: topic=batch-place
|
Parameter name
|
Parameter type
|
Request response
|
Required?
|
Description
|
|
timeInForce
|
String
|
Request parameter
|
Yes
|
Order execution strategy
ioc (immediate or cancel)
fok (fill or kill)
gtc (good till canceled)
post_only Post only
rpi Retail Price Improvement orders
Required if the order type is limit order (limit), default to gtc if left blank.
|
4. Order information, open orders, and order history
• Order information: GET /api/v3/trade/order-info
• Open orders: GET /api/v3/trade/unfilled-orders
• Order history: GET /api/v3/trade/history-orders
• Order channel: topic=order
|
Parameter name
|
Parameter type
|
Request response
|
Required?
|
Description
|
|
timeInForce
|
String
|
Response parameter
|
Yes
|
Order execution strategy
ioc (immediate or cancel)
fok (fill or kill)
gtc (good till canceled)
post_only Post only
rpi Retail Price Improvement orders
|
FAQ
1. What is a Retail Price Improvement (RPI) order?
An RPI order is a special order type under the unified trading account model. It only matches with non-algorithmic orders (i.e., non-OpenAPI orders) to enhance liquidity. It provides qualifying retail orders with better execution prices for price improvement and reduced slippage.
2. Are RPI orders maker or taker orders?
Order type: All RPI orders are passive orders and fall under the maker order category. They only execute against taker orders, thereby adding liquidity to the order book.
3. What is the execution priority for RPI orders at the same price level?
Execution priority: At the same price level, RPI orders have a lower execution priority compared to non-RPI orders, irrespective of the time they were placed. RPI orders at a given price level will only be executed after all non-RPI orders at that same price have been completely filled.
4. Which product lines and margin modes support RPI orders?
RPI orders are supported in both isolated margin and cross margin modes under the unified trading account. They are available for trading in futures, spot, and margin markets. RPI orders are not supported during pre-market trading. They can only be placed after the call auction concludes; otherwise, the order will be rejected.
5. Is the validation logic for RPI orders the same as for regular limit orders?
The validation logic for RPI orders is the same as for regular limit orders. Requirements for margin, minimum and maximum order sizes, and open interest (OI) limits are identical to those for standard limit orders.
Join Bitget, the World's Leading Crypto Exchange and Web3 Company