GRVT has set a market maker prevention logic to allow market makers to set parameters which - if and when breached - automatically pull their quotes.
Configurations
Each Market Maker can configure the parameters as follows:
Limitations
| Quantity Limit (num of contracts) | Net Delta Limit |
BTC Perpetual | 10,000 | 50 |
ETH Perpetual | 10,000 | 500 |
WindowTimeInSeconds (e.g., 2 seconds)
FrozenTimeInSeconds (e.g., 2 seconds)
Protection Rules
After the completion of an order at time t, we will check
All the orders executed within [t - WindowTime, t]
Compute Total Quantity
Compute Net Delta
Determine if either the Quantity Limit or the Net Delta Limit has been breached
If yes, then MMP will be triggered
All outstanding open orders will be canceled
No new orders will be allowed to place within the next FrozenTime
After FrozenTime, the limitation will be lifted automatically.
If not, pass (MMP will not be triggered).
Key Points
Regarding the quantity limit, it takes the sum of long and short orders without netting.
Regarding the net Delta limit, obviously it only accounts for the net Delta of long and short orders.
If the WindowTimeInSeconds is set to 0, then it means that no MMP will be triggered.
If the FrozenTimeInSeconds is set to 0, the above limitation will never be lifted unless the market maker manually triggers to do so.
The MMP will not interrupt the processing of any order.
Example
MM has 20 orders (each has 10 contracts, totally 200 contracts). MM has a quantity of 100. If a taker sends one order with a size of 200 contracts, then all orders from the MM will be executed.
However, if the taker sends 2 orders (each has 100 contracts), the second will not be executed since after the execution of the first order, MMP was triggered and outstanding orders of the MM will be cancelled automatically.
API
We will have the following APIs to be used by Market Makers:
Config MMP: for each type (BTC or ETH perpetual), you can configure
Window Time (in seconds)
Frozen Time (in seconds)
Quantity Limit
Delta Limit
Enable or disable MMP flag for an existing order: Per a specific order, you can set a flag. If false, then the MMP will not be applicable to this order.
Manual Reset: Per a specific type, if the Frozen Time is 0, then once MMP is triggered, the MM needs to call this API to reset. Otherwise, the limitation will always be applied, i.e., no new order is allowed to be placed.
MMP Event notification: The MM can subscribe to this channel to be notified that a MMP is triggered and the corresponding time (timestamp) until which the limitation is applied.
MMP Canceled notification: In the API response, there should be one more field such that once the order gets canceled due to MMP, the field shows “MMP_Cancelled”, and can be absent otherwise.