Market makers provide liquidity to the exchange but that leaves them with a lot of exposure in the market. Market Maker Protection (MMP) is an automated method for a market maker to pull their quotes under a certain condition, such as if they trade above a certain quantity within a certain time frame. This lowers the risk of too many trades within a short time span, momentarily pulling the market maker's exposure from the exchange so that he or she has time to reassess the situation before enabling their quotes again. This institutional-grade offering allows for tighter quotes with larger volumes, benefiting the retail traders as well.
Market Maker Protection (MMP) is available upon request and requires a one-time manual activation by Deribit staff.
Notice
Enabling Market Maker Protection (MMP) does not automatically enable the Mass Quote feature. These are separate systems and must be requested and activated independently. If you require Mass Quote functionality, please contact Deribit support to request access explicitly.
-
Once activated, MMP is applied to the main account and all sub-accounts under a given index (e.g.,
btc_usd
,eth_usd
). -
Activation is index-specific, and each instrument must be enabled individually.
Scope of Protection
-
MMP applies only to orders explicitly marked with the
mmp
flag.Orders without this tag are excluded from MMP logic and remain unaffected when a trigger condition is met.
-
Protection is enforced at the account level, so orders submitted via multiple systems or connections are covered as long as they are MMP-tagged.
Trigger Conditions
MMP can be triggered when any one of the configured thresholds is met or exceeded within the defined interval. The following metrics are independently monitored:
-
Quantity Limit – Total traded amount (in base currency), direction-agnostic.
(e.g., Buy 10 + Sell 10 = 20 quantity)
-
Delta Limit – Net transaction delta exceeding the threshold (positive or negative).
Net Transaction Delta = Delta – Mark Price
-
Vega Limit – Net vega exposure change (positive or negative).
Relevant primarily for options, vega tracks sensitivity to implied volatility changes.
-
Trade Count – Exclusive to Block RFQ. When a specified number of RFQ quotes have been filled, all remaining open RFQs are automatically canceled.
This trigger is global across all currency pairs and applies to the total number of filled Block RFQ quotes.
Each limit is monitored independently. If any one is breached, all MMP-tagged orders are canceled, and a freeze is applied according to your configured frozen_time
.
Notice
When evaluating Delta and Vega limits for MMP, Deribit uses the greeks at the moment of trade execution. The system does not re-evaluate Delta or Vega using live greeks at the time of MMP checking.
For more configuration details, please refer to the Market Maker Protection API Configuration article.
Example 1: Delta Accumulation Below Threshold
-
Settings:
interval
= 2 secondsdelta_limit
= 4 -
Trade 1:
10 long calls are bought with a delta of +0.20 each
→ Delta counter increases to: 10 * 0.20 = +2
→ Interval timer starts.
-
Next 2 seconds:
No further trades occur.
-
Result:
Delta counter remains below threshold → MMP not triggered.
After 2 seconds, the counter resets to 0.
Example 2: Mixed Trades with Net Delta Change
-
Settings:
interval
= 2 secondsdelta_limit
= 4 -
Trade 1:
10 long calls bought with delta of +0.20
→ Delta counter: 10 * 0.20 = +2
→ Timer starts.
-
+1 second:
5 long puts bought with delta of -0.30
→ Counter adjustment: 5 * (-0.30) = -1.5
→ New delta counter: 2 - 1.5 = +0.5
-
+1.5 seconds:
USD 15,000 of BTC perpetuals bought at mark price USD 10,000
→ Implied position size: 1.5 BTC
→ Delta adjustment: +1.5
→ New delta counter: 0.5 + 1.5 = +2
-
Next 0.5 seconds:
No further fills.
-
Result:
Delta counter remains below 4 → MMP not triggered.
After 2 seconds, the counter resets to 0.
Example 3: Delta Limit Breached → MMP Triggered
-
Settings:
interval
= 2 secondsdelta_limit
= 4 -
Trade 1:
10 long calls bought with delta +0.30 each
→ Delta counter: 10 * 0.30 = +3
→ Interval timer starts.
-
+0.5 seconds:
5 BTC perpetuals bought, mark price = USD 10,000
→ Position size = 5 BTC
→ Delta contribution = +5 (1 BTC = delta +1)
→ New delta counter: 3 + 5 = +8
-
Result:
Delta counter exceeds
delta_limit
= 4→ MMP is triggered immediately.
→ All MMP-tagged active orders are canceled.
→ A
user.mmp_trigger.{index_name}
event is sent with afrozen_until
timestamp. -
Remainder of the 2-second interval:
No further trading allowed unless MMP is manually or automatically reset (depending on
frozen_time
).
Example 1: Vega Accumulation Below Threshold
-
Settings:
interval
= 20 secondsvega_limit
= 280 -
Trade 1:
Buy BTC-27JUN25-62000-C, vega ≈ 248, amount = 1
Sell BTC-27JUN25-64000-C, vega ≈ 256, amount = 1
Traded vega: abs(248 − 256) = 8
-
Result:
Traded vega = 8 < 280 → MMP not triggered.
Counter resets after 20 seconds.
Example 2: Vega Breach on First Trade
-
Settings:
interval
= 20 secondsvega_limit
= 280 -
Trade 1:
Buy BTC-27JUN25-62000-C, vega ≈ 248, amount = 1.5
→ Traded vega = 248 * 1.5 = 372
-
Trade 2:
Sell BTC-27JUN25-64000-C, amount = 1.5
→ Canceled due to MMP
-
Result:
Traded vega = 372 > 280 → MMP triggered
Remaining quote canceled immediately.
Example 3: Accumulated Vega Breach Across Multiple Trades
-
Settings:
interval
= 20 secondsvega_limit
= 280 -
Trade 1:
Buy BTC-27JUN25-62000-C, vega ≈ 248, amount = 0.5 → +124
-
Trade 2:
Buy BTC-27JUN25-64000-C, vega ≈ 252, amount = 0.5 → +126
-
Trade 3:
Buy BTC-27JUN25-66000-C, vega ≈ 256, amount = 0.5 → +128
→ Cumulative traded vega: 124 + 126 + 128 = 378
-
Result:
Traded vega = 378 > 280 → MMP triggered after last trade
Remaining orders canceled.
Example 1: Quantity Below Threshold
-
Settings:
interval
= 2 secondsquantity_limit
= 50 -
Trade 1:
Client order is filled for 20 units
-
Effect:
Quantity counter = 20
Interval timer starts.
-
Next 2 seconds:
No further trades occur.
-
Result:
Quantity counter remains below threshold → MMP not triggered.
After 2 seconds, counter resets to 0.
Example 2: Quantity Breach → MMP Triggered
-
Settings:
interval
= 2 secondsquantity_limit
= 50 -
Trade 1:
Client order is filled for 20 units
→ Quantity counter = 20
→ Timer starts.
-
+1 second:
Another client order is filled for 40 units
→ New total: 20 + 40 = 60
-
Result:
Quantity counter exceeds 50 → MMP triggered
→ All active MMP-tagged orders are canceled
→ Further MMP orders are rejected until:
-
frozen_time
expires, or -
A manual reset is performed via private/reset_mmp
-
-
Remainder of interval:
No further trades processed for MMP-tagged orders.
Example 3: Multiple Fills Accumulate → MMP Triggered
-
Settings:
interval
= 2 secondsquantity_limit
= 50 -
Trade 1:
Client order is filled for 15 units
→ Quantity counter = 15
→ Interval timer starts.
-
+0.5 seconds:
Second order is filled for 20 units
→ New counter: 15 + 20 = 35
-
+1 second:
Third order is filled for 25 units
→ New counter: 35 + 25 = 60
-
Result:
Quantity counter = 60 > 50 → MMP triggered
→ All MMP-tagged orders are canceled
→ Any new MMP orders are rejected until:
-
The configured frozen_time expires, or
-
A manual reset is performed via private/reset_mmp
-
-
Remainder of interval:
No further trades processed for MMP-tagged orders.