In this article we walk through a situation where a trader on the MTF is liquidated and the new Position Assignment System (PAS) allocates the unfilled liquidation to liquidity providers in PAS. We go through all the response examples that a participant will receive for this.
Let's assume that there is a user whose current positions are:
- LONG 1,760,000 Contracts on PI_BTCUSD
- LONG 300,000 Contracts on FI_BTCUSD_200228
Both these positions are using the main FI_XBTUSD margin account, which measures the risk in realtime, valuing the collateral vs position value, to determine whether to liquidate.
Once the margin account for the contract type is below the maintenance margin, liquidation occurs and the system sells those positions into the orderbook at the 0-equity imputed price for each contract.
In this case, the user's liquidation plays out as follows:
Position | Size | Amount Liquidated | Amount Assigned |
---|---|---|---|
PI_BTCUSD | 1,760,000 | 1,007,379 | 752,621 |
FI_BTCUSD_200228 | 300,000 | 300,00 | 0 |
This means the entire FI_BTCUSD_200228 position of 300,000 Contracts was successfully sold into the orderbook to new counterparties who had existing bids.
However, the PI_BTCUSD position of 1,760,000 Contracts was only able to liquidate 1,007,379 successfully into the orderbook, with the remaining 752,621 unable to find a new counterparty.
As a result, this unfilled liquidation remainder is handled in the PAS by routing the SHORT position to liquidity providers participating in the program based on individual preferences.
Below is an example notification for an Assignment of 184,317 Contracts allocated to "satoshi@bitcoin.com". The user receives the following email (note that this format may change so do not rely on this formatting):
The liquidity provider immediately receives the notification over WebSocket feed alerting them to the Assignment. The message takes this format:
{
"feed": "fills",
"username": "satoshi@bitcoin.com",
"fills": [
{
"instrument": "PI_XBTUSD",
"time": 1581026151,
"price": 9292.5,
"seq": 103,
"buy": true,
"order_id": "87755b99-bfb7-4f51-a72b-70f542f793a5",
"fill_id": "89f0f4f9-66b5-45eb-ba3f-6eeb2da5cadd",
"fill_type": "assignee",
"qty": 184317
}
]
}
Additionally, the user may poll the REST API endpoint for fills to see:
{
"result": "success",
"fills": [
{
"fill_id": "89f0f4f9-66b5-45eb-ba3f-6eeb2da5cadd",
"symbol": "pi_xbtusd",
"side": "buy",
"order_id": "87755b99-bfb7-4f51-a72b-70f542f793a5",
"size": 184317,
"price": 9292.5,
"fillTime": "2020-02-06T21:55:51.000Z",
"fillType": "assignee"
}
...
]
}
The key fields in the responses are fill_type and fillType (for WebSocket and REST, respectively), which both take the value "assignee". This is the indication that should be used to programmatically handle the assignment.
Note:
- Set your preferences as you see fit on the Assignment Program section of the platform.
- You will not receive an Assignment that your available margin for the contract type can not handle.