Liquidation
Liquidation Mechanism
Traders whose netValue
falls below the maintenance margin may have their positions force-closed, called "liquidation".
During the liquidation, the system tries to sell the position at a discount based on the mark price. Anyone interested in this deal can join liquidation and is known as a "liquidator".
Liquidators are permitted to take over the position of the liquidated account, entirely or partially, without consuming the liquidity from the order book. The liquidation process will last until no position is left or the netValue
is greater than the maintenance margin.
As the liquidation is open to the public, there is no guarantee that your request will be executed. It will not be executed or partially executed if:
- Someone else submitted a liquidation request before you, or
- The trader deposited enough margin in time, or
- The mark price moved beyond your price protection.
Trigger a Liquidation
You can trigger a liquidation by calling IPerpetual#liquidate()
:
/// @param liquidator who will be the liquidator
/// @param liquidatedTrader is the trader you want to liquidate.
/// @param requestPaper is the size of position you want to take .
/// @param expectCredit is the amount of credit you want to pay (when liquidating a short position)
/// or receive (when liquidating a long position)
/// @return liqtorPaperChange is the final executed change of liquidator's paper amount
/// @return liqtorCreditChange is the final executed change of liquidator's credit amount
function liquidate(
address liquidator,
address liquidatedTrader,
int256 requestPaper,
int256 expectCredit
) external returns (int256 liqtorPaperChange, int256 liqtorCreditChange);
Liquidation is just like a regular trade. Liquidators can customize the amounts and set price protection to avoid losses caused by markPrice changes.
The parameter expectCredit
is the amount of credit you want to pay (when liquidating a short position) or receive (when liquidating a long position). You can set the expectCredit by yourself.
By setting requestPaper
and expectCredit
, you're indicating the "expected price":
The smart contract will not execute with a higher(lower) price than the expected price if you're liquidating a long(short) position.
Auto Scaled Amount
Your liquidation will be limited to the position size. For example, if the position remains 10ETH and you request a 15ETH liquidation. Only 10ETH will be executed. The other 5ETH requests will be canceled.
Liquidation Price
Here we show how to calcuate the liquidation price of an account.
To avoid liquidation, we need:
- We first calculate the maintenanceMargin for all other markets' positions. Let's call it maintenanceMargin'. Then we have netValue of the account. Let's call it netValue'. So we have:
- if paperAmount > 0
- if paperAmount < 0
- Let's call 1±liquidationThreshold "multiplier", then:
- If liqPrice<0, it should be considered as the position can never be liquidated (absolutely safe).