Understanding Self-Trade Prevention
What is self-trade prevention
Self-trade prevention involves systems and protocols designed to prevent a trader from inadvertently executing trades against themselves, which can distort market data and create an illusion of increased trading activity.
Bullish considers self-trade as:
Complementing buy and sell orders in the same market placed by the same trading account;
Orders from multiple sub-accounts under the same Institutional trading account matching with each other.
Identification Through endCustomerID
Bullish assigns a unique identifier known as the endCustomerID at the time of account creation. This identifier is crucial as it allows the trading systems to distinguish between different trading accounts including sub-accounts within the same institutional client, and serves as a key element in preventing self-trades.
Preventing Self-Matching: A Two-Scenario Approach
Bullish's matching engine is designed to prevent self-matching of orders, ensuring that orders from the same trading account or sub-accounts with identical endCustomerID values do not execute against each other. Let's explore how this works in two different scenarios:
Scenario 1: Single Trading Account
Consider a situation where you place two opposing orders—one to buy and another to sell—within the same market, such as BTC/USDC, using a single trading account. In this case, the exchange system intervenes to prevent these orders from matching with each other. Instead, both orders remain open, available to match with orders from other clients. This ensures that you do not inadvertently trade with yourself.
Scenario 2: Multiple Sub-Accounts
In a more complex scenario, you might use two sub-accounts to place opposing orders. For instance, Account A might place a sell order for 1 BTC at 10,000 USDC, while Account B places a buy order for 2 BTC at a similar price. Here, the exchange system takes a proactive approach: the original sell order from Account A is canceled, and the buy order from Account B is adjusted to 1 BTC. This automatic netting ensures that only one order is executed, while the other is canceled, preventing self-trading.
Self-Trade Prevention in Auctions
Self-trade prevention also applies to auctions. In continuous trading, the system prevents self-matching at the point when orders would execute against each other. In auctions, the system takes a simpler approach — it checks for potential self-trades at the moment you submit your order. If a conflict is detected, the new order is rejected and your existing order stays as it is.
This means that by the time the auction cross takes place, there are no self-trade conflicts left in the book.
Scenario 1: Two Auction Market Orders
Suppose you already have an auction market buy order for 5 BTC. You then submit an auction market sell order for 3 BTC from the same account. Because both are market orders on opposite sides, they would inevitably match at the cross. The system rejects your sell order, and your original buy order for 5 BTC remains active and unchanged.
Scenario 2: Two Auction Limit Orders with Crossing Prices
Suppose you have an auction limit buy order for 2 BTC with a limit price of 70,000 USDC. You then submit an auction limit sell order for 1 BTC with a limit price of 68,000 USDC from the same account. Because your buy price (70,000) is higher than your sell price (68,000), these orders would match at any clearing price between them. The system rejects your sell order, and your original buy order remains active.
However, if your sell limit price were 72,000 USDC instead — higher than your buy price of 70,000 — there is no conflict. Both orders are accepted because they would not match against each other.
Scenario 3: Auction Market Order, Then Auction Limit Order
Suppose you have an auction market buy order for 5 BTC. You then submit an auction limit sell order for 2 BTC from the same account. Because a market order will match at any price, it would always trade against your limit order regardless of the limit price. The system rejects your sell order, and your original auction market buy order remains active.
Scenario 4: Auction Limit Order, Then Auction Market Order
Suppose you have an auction limit sell order for 3 BTC with a limit price of 72,000 USDC. You then submit an auction market buy order for 4 BTC from the same account. Because a market order will match at any price, it would always trade against your existing limit order. The system rejects your market buy order, and your original auction limit sell order remains active.
Price Amendments
If you amend the limit price of an existing auction limit order and the new price would create a conflict with another auction limit order you have on the opposite side, the amendment is rejected. Your order stays at its original price.
For example, if you have an auction limit buy at 68,000 USDC and an auction limit sell at 72,000 USDC, and you amend your buy price to 73,000 USDC, the amendment is rejected because 73,000 is now higher than your sell price of 72,000. Your buy order remains at 68,000 USDC.