Market Maker Protection (MMP)
Fill-Window-Limits und Auto-Cancel-Verhalten für Market Maker.
Überblick
MMP schützt Market Maker vor schnellen nachteiligen Ausführungen durch:
- Verfolgung kumulativer Fill-Metriken innerhalb eines rollierenden Zeitfensters
- Stornierung von Orders, wenn Limits überschritten werden
- Automatische Stornierung aller anderen MMP-aktivierten Orders für dieselbe Kombination aus Wallet und Basiswert
Konfiguration
MMP-Konfiguration setzen
Endpunkt: POST /mmp-config
Anfrage: SetMmpConfigRequest
{
"wallet": "0x...",
"currency": "BTC",
"interval_ms": 60000,
"frozen_time_ms": 300000,
"qty_limit": 1000000,
"delta_limit": 10.0,
"vega_limit": 5.0,
"enabled": true,
"nonce": 1,
"signature": "0x..."
}
Felder:
wallet: Wallet-Adressecurrency: Währung des Basiswerts (z. B."BTC","ETH")interval_ms: Länge des rollierenden Fensters in Millisekundenfrozen_time_ms: Einfrierdauer nach Auslösung (Millisekunden)qty_limit: Optionales Mengenlimit (Kontrakteinheiten)delta_limit: Optionales Delta-Limitvega_limit: Optionales Vega-Limitenabled: Ob MMP für diese Kombination aus Wallet und Währung aktiviert ist
Antwort: ApiResponse<MmpConfigData>
MMP-Konfiguration abrufen
Endpunkt: GET /mmp-config?wallet=...¤cy=...
Query-Parameter:
wallet(erforderlich)currency(optionaler Filter)
Antwort: MmpConfigResponse
{
"success": true,
"data": [
{
"wallet_address": "0x...",
"currency": "BTC",
"interval_ms": 60000,
"frozen_time_ms": 300000,
"qty_limit": 1000000,
"delta_limit": 10.0,
"vega_limit": 5.0,
"enabled": true
}
]
}
MMP-Konfiguration löschen
Endpunkt: DELETE /mmp-config
Anfrage: DeleteMmpConfigRequest
{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}
Antwort: ApiResponse<String>
MMP-Status zurücksetzen
Endpunkt: POST /mmp-config/reset
Anfrage: ResetMmpRequest
{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}
Antwort: ApiResponse<String>
Hinweise: Setzt den MMP-Fill-Window-Status zurück (löscht kumulative Metriken, hebt das Einfrieren der Währung auf).
MMP-Verhalten (wichtig zu verstehen)
Reihenfolge der Fill-Verarbeitung
Die MMP-Auswertung erfolgt POST-FILL:
- Die Engine matcht und akzeptiert den Fill zuerst
- Danach prüft MMP die kumulativen Metriken
- Wenn Limits überschritten werden:
- MMP wird ausgelöst
- Die verbleibende Menge der aktiven Order wird nicht weiter verarbeitet
- Die Order erhält den Status
CANCELEDmit dem Grund:"MMP triggered during fill processing" - Die Engine sendet ein
MmpTriggered-Ereignis - Die Engine storniert automatisch alle anderen offenen MMP-aktivierten Orders für dieselbe Kombination aus Wallet und Basiswert
Konsequenz: Sie können Fills erhalten, die Sie über Ihre konfigurierten Schwellenwerte hinausbringen, bevor MMP ausgelöst wird.
Auslösebedingungen
MMP wird ausgelöst, wenn eines der konfigurierten Limits überschritten wird:
- Mengenlimit:
cumulative_qty > qty_limit - Delta-Limit:
|cumulative_delta| > delta_limit - Vega-Limit:
|cumulative_vega| > vega_limit
Kumulative Metriken werden über das rollierende Fenster (interval_ms) berechnet.
Stornierungsverhalten
Wenn MMP ausgelöst wird:
- Aktive Order: Die verbleibende Menge wird gestoppt, die Order erhält den Status
CANCELEDmit dem Grund"MMP triggered during fill processing" - Andere Orders: Alle anderen offenen MMP-aktivierten Orders für dieselbe Kombination aus Wallet und Basiswert werden automatisch storniert mit dem Grund
"Order canceled by MMP trigger"
Hinweis: Nur MMP-aktivierte Orders werden storniert. Orders mit mmp_enabled=false sind nicht betroffen.
Einfrierverhalten
Nach der MMP-Auslösung:
- Die Währung wird für
frozen_time_msMillisekunden eingefroren - Während des Einfrierens können neue Fills abgelehnt werden (implementierungsabhängig)
Berechnung der Fill-Metriken
Menge
- Quelle: Fill-
size(Kontrakteinheiten) - Kumulativ: Summe aller Fills im rollierenden Fenster
Delta
- Quelle: Berechnet aus dem Fill-Symbol und dem GreeksCache
- Kumulativ: Summe aller Fill-Deltas im rollierenden Fenster
Vega
- Quelle: Berechnet aus dem Fill-Symbol und dem GreeksCache
- Kumulativ: Summe aller Fill-Vegas im rollierenden Fenster
Rollierendes Fenster
Fenster-Bereinigung
Fills, die älter als interval_ms sind, werden automatisch aus dem Fenster entfernt:
- Die Bereinigung läuft periodisch (Hintergrundprozess)
- Kumulative Metriken werden verringert, wenn alte Fills entfernt werden
Fenster-Zurücksetzung
Setzen Sie den MMP-Status über POST /mmp-config/reset zurück:
- Löscht alle Fills im Fenster
- Setzt kumulative Metriken auf null zurück
- Hebt das Einfrieren der Währung auf
MMP-Ereignisse
MmpTriggered-Ereignis
Internes Ereignis (wird derzeit nicht an WS-Clients weitergeleitet):
MmpTriggeredMessage {
wallet: WalletAddress,
currency: String,
reason: String, // "qty_limit" | "delta_limit" | "vega_limit"
}
Bewährte Praktiken
Konfiguration
- Setzen Sie angemessene Limits: Basierend auf Ihrer Risikotoleranz und typischen Fill-Größen
- Verwenden Sie währungsspezifische Konfigurationen: Konfigurieren Sie pro Basiswert (BTC, ETH usw.)
- Überwachen Sie MMP-Auslösungen: Eine hohe Auslöserate kann auf fehlkonfigurierte Limits oder nachteilige Marktbedingungen hinweisen
Order-Management
- Aktivieren Sie MMP selektiv: Setzen Sie
mmp_enabled=truenur für Orders, die geschützt werden sollen - Verwenden Sie eine konsistente Währung: Stellen Sie sicher, dass alle Orders für denselben Basiswert dieselbe Währung in der MMP-Konfiguration verwenden
- Behandeln Sie MMP-Stornierungen: Implementieren Sie Logik, um MMP-ausgelöste Stornierungen zu erkennen und das Quoting anzupassen
Überwachung
- Verfolgen Sie MMP-Auslösungen: Achten Sie auf die Gründe
"MMP triggered during fill processing"und"Order canceled by MMP trigger" - Überprüfen Sie Fill-Fenster: Prüfen Sie kumulative Metriken über die MMP-Konfiguration (derzeit nicht über die API verfügbar)
- Passen Sie Limits an: Wenn MMP zu häufig ausgelöst wird, erhöhen Sie die Limits; wenn zu selten, verringern Sie die Limits
Häufige Probleme
MMP wird zu häufig ausgelöst
Ursachen:
- Limits zu niedrig für typische Fill-Größen
- Nachteilige Marktbedingungen
- Schnelles Quoting verursacht viele Fills
Lösungen:
- Erhöhen Sie
qty_limit,delta_limitodervega_limit - Erhöhen Sie
interval_ms, um mehr Fills im Fenster zuzulassen - Reduzieren Sie die Quoting-Frequenz
MMP wird nicht ausgelöst
Ursachen:
- Limits zu hoch
- MMP für Orders nicht aktiviert (
mmp_enabled=false) - Währungsdiskrepanz (MMP-Konfigurationswährung != Basiswert der Order)
Lösungen:
- Verringern Sie die Limits
- Überprüfen Sie, ob
mmp_enabled=truefür Orders gesetzt ist - Überprüfen Sie, ob die Währung der MMP-Konfiguration mit dem Basiswert der Order übereinstimmt
Unerwartete Stornierungen
Symptom: Orders wurden mit dem Grund "Order canceled by MMP trigger" storniert, obwohl Sie dies nicht erwartet haben.
Ursache: Eine andere Order für dieselbe Kombination aus Wallet und Basiswert hat MMP ausgelöst.
Lösung: Überprüfen Sie alle MMP-aktivierten Orders für denselben Basiswert, wenn eine Order MMP auslöst.