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
mmpflag.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, direction-agnostic, measured in underlying coins (e.g., Buy 10 + Sell 10 = 20 quantity)
-
Delta Limit – Net transaction delta exceeding the threshold (positive or negative), measured in base currency.
Net Transaction Delta = Delta – Mark Price -
Vega Limit – Net vega exposure change (positive or negative),measured in USD. 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.
Important
Maximum Quote Quantity will be available after 25 November 2025 release.
Maximum Quote Quantity (MQQ) defines the cumulative limit on the total size of open MMP quotes or orders per side, per instrument (order book). It acts as an exposure cap, preventing excessive quoting volume even before trades occur.
Key Concepts
-
Per Instrument (Order Book):
MQQ is enforced independently for each instrument, not aggregated across instruments or expiries. Each instrument (order book) has its own separate MQQ limit.
-
Cumulative Size Limit, Not Order Count:
MQQ limits the total combined size of open MMP orders per side, not the number of orders.
Example: with MQQ = 3 BTC, you can place three 1 BTC orders, or one 2.5 BTC and one 0.5 BTC order, as long as the total per side per instrument ≤ 3 BTC.
-
Independent per MMP Group:
Each MMP group (used only for mass quotes) has its own MQQ configuration. Limits are applied separately for each group.
-
Relation to Quantity Limit:
MQQ can be set greater than
quantity_limit.This allows larger open quotes while still letting MMP trigger on partial fills, and decouples MMP’s reserved margin from the quantity limit.
-
Base Currency Enforcement:
MQQ is specified and enforced in the base currency of the instrument.
-
Size Calculations:
-
Inverse futures: size = amount / price
-
Inverse spreads: size = amount / indexPrice
-
-
Account Limitations:
MMP orders and quotes on options or option combos are not supported for SM accounts.
-
Rejections and Validations:
-
Quotes or MMP orders exceeding
max_quote_quantityare rejected. -
Regular orders above MQQ may still enter the market, but new quotes that would exceed the limit are not accepted.
-
-
Precision:
All MMP configuration parameters, including MQQ, support up to four decimal places.
-
Margin Calculation:
-
Margin reserved =
max_quote_quantity(≈ 3 % of MQQ) -
MMP margin logic is based on active quote exposure rather than quote size limits.
-
-
Latency:
MQQ provides no latency advantage if you already use mass quote functionality; it purely adds exposure control.
For more configuration details, please refer to the Market Maker Protection (MMP) 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_untiltimestamp. -
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_timeexpires, 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.