Skip to main content
All CollectionsVIP and InstitutionalInstitutional Clients
What is BIT Market Maker Protection (MMP)?
What is BIT Market Maker Protection (MMP)?
Updated over a week ago

Introduction

Market maker protection (MMP) is a mechanism of protecting liquidity providers against bursts of order filling in a short time. Once the total traded amount of an account in a short time has exceeded the configured limits, MMP will be triggered for the account. When MMP is triggered, existing MMP orders (orders marked as MMP) of the account will be automatically cancelled by the trade engine, and new MMP orders of the account will be rejected in a coming period (called a frozen period). The account owner can make use of this period to re-evaluate the situation, and revise the quotes.

Activate MMP

A user needs to contact BIT client manager for activating or deactivating MMP for an account. The configuration parameters of MMP is shown as below :

(Note: Market maker protection parameters for coin-margined derivatives, USDT-margined derivatives and spot are activated and configured independently and do not affect each other.)

window_ms

Size of the time window of counting traded quantities and net transaction delta against the limits.

frozen_period_ms

Length of the frozen period once MMP is triggered. 0 means the account will keep frozen status until a manual reset.

qty_limit

Limit of total quantity of the trades in the time window.

delta_limit

Limit of net transaction delta of the trades in the time window.

The default parameters for market maker protection are as follows :

Spot trading:

trading pair

window_ms

frozen_period_ms

qty_limit

delta_limit

BTC/USDT

5000

100

100

100

BTC/USD

5000

100

100

100

ETH/USDT

5000

100

3000

3000

BCH/USDT

5000

100

5000

5000

Coin-margined derivatives

cryptocurrency

window_ms

frozen_period_ms

qty_limit

delta_limit

BTC

5000

100

100

100

ETH

5000

100

3000

3000

BCH

5000

100

5000

5000

USDT-margined derivatives

cryptocurrency

window_ms

frozen_period_ms

qty_limit

delta_limit

BTC

5000

100

100

100

Please note:

Market maker protection parameters for coin-margined derivatives are independent by cryptocurrencies

Market maker protection parameters for USDT-margined derivatives are independent by cryptocurrencies

Market maker protection parameters for spot trading are independent by trading pairs.

Specifications

MMP Orders

MMP only affects MMP orders, i.e. orders placed with field `mmp` set to `true`. Only trades of MMP orders will be counted, and only MMP orders will be cancelled or rejected when MMP is triggered.

MMP Monitoring

For each account with MMP activated, the trade engine monitors the total quantity and net transaction delta of the trades in the past time window of `windows_ms` in real time.

mceclip0.png

Figure 1 - Example of MMP monitoring.

See figure 1. for an example: an account configured `window_ms = 300`. There are 4 trades from its MMP orders at time 140, 200, 340 and 500, respectively. The current time is 560, and the trades falling into the time window (260, 560] will be counted, i.e. T3 and T4. If either the total quantity or net transaction delta of T3 and T4 has exceeded the configured limits MMP will be triggered.

MMP Limits

MMP enforces limits on two types of trading measurements: total quantity and net transaction delta.

Definitions of quantity and net transaction delta of an individual order in a trade:

Instrument Type

Quantity

Net transaction delta

Coin-M Option

|qty|

qty * (delta - mark price)

Coin-M Futures

|qty| / mark price

qty / mark price

USDT-M Option

|qty|

qty * delta

USDT-M Futures

|qty|

qty * 1

Spot

|qty|

qty * 1

`qty` is the directional traded quantity of the order - positive for buying, negative for selling.

For a set of trades, the total quantity and net transaction delta are just the sums of each individual trade. The total quantity is checked against `qty_limit`, and the absolute value of net transaction delta is checked against `delta_limit`. If either one has reached or exceeded the limit, MMP will be triggered for the account.

MMP Triggering

MMP triggering will cancel all existing MMP orders of the account, and freeze the account from placing new MMP orders for a period of length `frozen_period_ms`. If `frozen_period_ms` is configured to 0, the account will be frozen indefinitely until a manual reset through API. If a frozen account attempts to place a new MMP order, the order will be rejected or get cancelled right away before matching. Once MMP is triggered, previous trades of the account will not be counted again in future MMP monitoring.

MMP will not interrupt an ongoing matching process. In other words, MMP triggering always happens after the matching for the last order has completed, and before the matching for the next order starts. For example, a market maker account has `qty_limit` of 30, and has 5 orders each selling 20 contracts on an instrument. A taker needs to buy 100 contracts:

  • If the taker buys the 100 contracts with a single order, all the 5 maker orders will be filled before the MMP triggering.

  • If the taker instead places 2 orders buying 50 contracts each, MMP will trigger right after matching the first taker order. The remaining 3 maker orders (one is partially filled of 10 contracts) will be cancelled at MMP triggering.

MMP APIs

APIs of placing MMP orders are the same ones of placing regular orders. Just set the `mmp` field to `true` in the requests.

MMP APIs:

MMP state

Update MMP configurations

Reset MMP

    • If the account is frozen, an MMP reset will clear the frozen status so that the account can start placing MMP orders immediately.

    • If the account is not frozen, an MMP reset will clear previous trades from future MMP monitoring, i.e. no longer counting them in the total quantity and net transaction delta.

Websocket channel mmp_frozen

Examples

Example 1

An account has windows_ms = 1000, delta_limit = 10.

  • [Time 10000] An MMP order on BTC-31JAN20-8000-C is filled with net transaction delta +8.
    (total = 8)

  • [Time 10500] An MMP order on BTC-31JAN20-8000-P is filled with a net transaction delta -5.
    (total = +8 - 5 = 3)

  • [Time 10900] An MMP order on BTC-PERPETUAL is filled with a net transaction delta +6.
    (total = +8 - 5 + 6 = 9)

  • [Time 11200] An MMP order on BTC-31JAN20-8000-C is filled with a net transaction delta +7.
    (total = -5 + 6 + 7 = 8)

MMP is not triggered because the net transaction delta of the account has never accumulated over 10 in any time window of 1000 ms.

Example 2

Account A has qty_limit = 10, Account B has delta_limit = 10, Account C has delta_limit = 20. Let the current mark price of BTC-PERPETUAL be 10,000 $/BTC.

  • Account A places an MMP order on BTC-PERPETUAL with qty = +150,000 $.

  • Account B places a non-MMP order on BTC-PERPETUAL with qty = +150,000 $.

  • Account C places an MMP order on BTC-PERPETUAL with qty = -500,000 $, and matches the two orders above.

Result of MMP monitoring:

  • MMP is triggered for Account A who has a total quantity of |150000| / 10000 = 15, which is over the qty_limit of 10.

  • MMP is not triggered for Account B as there is no trade of MMP order of Account B.

  • MMP is triggered for Account C who has a net transaction delta of -300000 / 10000 = -30. |-30| is over the delta_limit of 20.

Example 3

An account has windows_ms = 1000, qty = 200, delta_limit = 100 for BTC/USDT

and windows_ms = 1000, qty = 200, delta_limit = 100 for BTC/USD

  • [Time 10000] An MMP buy order of 80 BTC on BTC/USDT is filled.

  • [Time 10000] An MMP buy order of 80 BTC on BTC/USD is filled.

    • For BTC/USDT, qty = |80|, net transaction delta= +80, MMP is not triggered.

    • For BTC/USD, qty = |80|, net transaction delta= +80, MMP is not triggered.

  • [Time 10200] An MMP buy order of 80 BTC on BTC/USD is filled.

    • For BTC/USDT, qty = |80|, net transaction delta= +80, MMP is not triggered.

    • For BTC/USD, qty = |80|+|90|=170, net transaction delta= |+80+90|=170>100, MMP is triggered.

  • [Time 10400] An MMP sell order of 80 BTC on BTC/USDT is filled.

    • For BTC/USDT, qty = |80|+|-150|=230>200, net transaction delta= |+80-150|=70, MMP is triggered.

Did this answer your question?