Cette page a été traduite automatiquement. La version anglaise fait référence. Lire en anglais
Aller au contenu principal

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 :

  1. Suivant les métriques cumulées d'exécution dans une fenêtre temporelle glissante
  2. Annulant les ordres lorsque les limites sont dépassées
  3. 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 portefeuille
  • currency : Devise du sous-jacent (p. ex. "BTC", "ETH")
  • interval_ms : Longueur de la fenêtre glissante en millisecondes
  • frozen_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 optionnelle
  • vega_limit : Limite de véga optionnelle
  • enabled : Indique si le MMP est activé pour cette combinaison portefeuille+devise

Réponse : ApiResponse<MmpConfigData>

Obtenir la configuration MMP

Endpoint : GET /mmp-config?wallet=...&currency=...

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 :

  1. Le moteur apparie et accepte d'abord l'exécution
  2. Ensuite, le MMP vérifie les métriques cumulées
  3. 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 à CANCELED avec 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 :

  1. Ordre actif : La quantité restante est arrêtée, l'ordre passe à CANCELED avec la raison "MMP triggered during fill processing"
  2. 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_ms millisecondes
  • Pendant le gel, les nouvelles exécutions peuvent être rejetées (selon l'implémentation)

Calcul des métriques d'exécution

Quantité

  • Source : size de 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

  1. Définissez des limites appropriées : En fonction de votre tolérance au risque et de la taille typique de vos exécutions
  2. Utilisez des configurations spécifiques à chaque devise : Configurez par sous-jacent (BTC, ETH, etc.)
  3. 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

  1. Activez le MMP de manière sélective : Définissez mmp_enabled=true uniquement pour les ordres que vous souhaitez protéger
  2. 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
  3. 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

  1. Suivez les déclenchements MMP : Surveillez les raisons "MMP triggered during fill processing" et "Order canceled by MMP trigger"
  2. 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)
  3. 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_limit ou vega_limit
  • Augmentez interval_ms pour 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=true sur 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.