Protection des teneurs de marché (MMP)
Limites sur fenêtre d'exécution et comportement d'annulation automatique pour les teneurs de marché.
Vue d'ensemble
Le MMP protège les teneurs de marché contre des exécutions défavorables rapides en :
- Suivant les métriques cumulées d'exécution dans une fenêtre temporelle glissante
- Annulant les ordres lorsque les limites sont dépassées
- Annulant automatiquement tous les autres ordres avec MMP activé pour la même combinaison portefeuille+sous-jacent
Configuration
Définir la configuration MMP
Endpoint : POST /mmp-config
Requête : 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..."
}
Champs :
wallet: Adresse du portefeuillecurrency: Devise du sous-jacent (p. ex."BTC","ETH")interval_ms: Longueur de la fenêtre glissante en millisecondesfrozen_time_ms: Durée de gel après déclenchement (millisecondes)qty_limit: Limite de quantité optionnelle (unités de contrat)delta_limit: Limite de delta optionnellevega_limit: Limite de véga optionnelleenabled: Indique si le MMP est activé pour cette combinaison portefeuille+devise
Réponse : ApiResponse<MmpConfigData>
Obtenir la configuration MMP
Endpoint : GET /mmp-config?wallet=...¤cy=...
Paramètres de requête :
wallet(obligatoire)currency(filtre optionnel)
Réponse : 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
}
]
}
Supprimer la configuration MMP
Endpoint : DELETE /mmp-config
Requête : DeleteMmpConfigRequest
{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}
Réponse : ApiResponse<String>
Réinitialiser l'état MMP
Endpoint : POST /mmp-config/reset
Requête : ResetMmpRequest
{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}
Réponse : ApiResponse<String>
Remarques : Réinitialise l'état de la fenêtre d'exécution MMP (efface les métriques cumulées, dégèle la devise).
Comportement du MMP (essentiel à comprendre)
Ordre de traitement des exécutions
L'évaluation MMP a lieu APRÈS l'exécution :
- Le moteur apparie et accepte d'abord l'exécution
- Ensuite, le MMP vérifie les métriques cumulées
- Si les limites sont dépassées :
- Le MMP se déclenche
- La quantité restante de l'ordre actif cesse d'être traitée
- L'ordre passe à
CANCELEDavec la raison :"MMP triggered during fill processing" - Le moteur émet un événement
MmpTriggered - Le moteur annule automatiquement tous les autres ordres ouverts avec MMP activé pour la même combinaison portefeuille+sous-jacent
Implication : Vous pouvez recevoir des exécutions qui vous portent au-delà de vos seuils configurés avant que le MMP ne se déclenche.
Conditions de déclenchement
Le MMP se déclenche si l'une quelconque des limites configurées est dépassée :
- Limite de quantité :
cumulative_qty > qty_limit - Limite de delta :
|cumulative_delta| > delta_limit - Limite de véga :
|cumulative_vega| > vega_limit
Les métriques cumulées sont calculées sur la fenêtre glissante (interval_ms).
Comportement d'annulation
Lorsque le MMP se déclenche :
- Ordre actif : La quantité restante est arrêtée, l'ordre passe à
CANCELEDavec la raison"MMP triggered during fill processing" - Autres ordres : Tous les autres ordres ouverts avec MMP activé pour la même combinaison portefeuille+sous-jacent sont annulés automatiquement avec la raison
"Order canceled by MMP trigger"
Remarque : Seuls les ordres avec MMP activé sont annulés. Les ordres avec mmp_enabled=false ne sont pas affectés.
Comportement de gel
Après le déclenchement du MMP :
- La devise est gelée pendant
frozen_time_msmillisecondes - Pendant le gel, les nouvelles exécutions peuvent être rejetées (selon l'implémentation)
Calcul des métriques d'exécution
Quantité
- Source :
sizede l'exécution (unités de contrat) - Cumul : Somme de toutes les exécutions dans la fenêtre glissante
Delta
- Source : Calculé à partir du symbole de l'exécution et du GreeksCache
- Cumul : Somme des deltas de toutes les exécutions dans la fenêtre glissante
Véga
- Source : Calculé à partir du symbole de l'exécution et du GreeksCache
- Cumul : Somme des végas de toutes les exécutions dans la fenêtre glissante
Fenêtre glissante
Éviction de la fenêtre
Les exécutions plus anciennes que interval_ms sont automatiquement évincées de la fenêtre :
- L'éviction s'exécute périodiquement (tâche en arrière-plan)
- Les métriques cumulées sont décrémentées à mesure que les anciennes exécutions sont supprimées
Réinitialisation de la fenêtre
Réinitialisez l'état MMP via POST /mmp-config/reset :
- Efface toutes les exécutions de la fenêtre
- Remet les métriques cumulées à zéro
- Dégèle la devise
Événements MMP
Événement MmpTriggered
Événement interne (non transmis actuellement aux clients WS) :
MmpTriggeredMessage {
wallet: WalletAddress,
currency: String,
reason: String, // "qty_limit" | "delta_limit" | "vega_limit"
}
Bonnes pratiques
Configuration
- Définissez des limites appropriées : En fonction de votre tolérance au risque et de la taille typique de vos exécutions
- Utilisez des configurations spécifiques à chaque devise : Configurez par sous-jacent (BTC, ETH, etc.)
- Surveillez les déclenchements MMP : Un taux de déclenchement élevé peut indiquer des limites mal configurées ou des conditions de marché défavorables
Gestion des ordres
- Activez le MMP de manière sélective : Définissez
mmp_enabled=trueuniquement pour les ordres que vous souhaitez protéger - Utilisez une devise cohérente : Assurez-vous que tous les ordres pour le même sous-jacent utilisent la même devise dans la configuration MMP
- Gérez les annulations MMP : Implémentez une logique pour détecter les annulations déclenchées par le MMP et ajuster votre cotation
Surveillance
- Suivez les déclenchements MMP : Surveillez les raisons
"MMP triggered during fill processing"et"Order canceled by MMP trigger" - Examinez les fenêtres d'exécution : Vérifiez les métriques cumulées via la configuration MMP (non exposées via l'API actuellement)
- Ajustez les limites : Si le MMP se déclenche trop fréquemment, augmentez les limites ; s'il se déclenche trop rarement, diminuez-les
Problèmes courants
Le MMP se déclenche trop fréquemment
Causes :
- Limites trop basses par rapport à la taille typique des exécutions
- Conditions de marché défavorables
- Cotation rapide entraînant de nombreuses exécutions
Solutions :
- Augmentez
qty_limit,delta_limitouvega_limit - Augmentez
interval_mspour autoriser davantage d'exécutions dans la fenêtre - Réduisez la fréquence de cotation
Le MMP ne se déclenche pas
Causes :
- Limites trop élevées
- MMP non activé sur les ordres (
mmp_enabled=false) - Discordance de devise (la devise de la configuration MMP != sous-jacent de l'ordre)
Solutions :
- Diminuez les limites
- Vérifiez que
mmp_enabled=truesur les ordres - Vérifiez que la devise de la configuration MMP correspond au sous-jacent de l'ordre
Annulations inattendues
Symptôme : Des ordres sont annulés avec la raison "Order canceled by MMP trigger" alors que vous ne vous y attendiez pas.
Cause : Un autre ordre pour la même combinaison portefeuille+sous-jacent a déclenché le MMP.
Solution : Examinez tous les ordres avec MMP activé pour le même sous-jacent lorsqu'un déclenchement se produit.