J'aimerais ouvrir une discussion technique et pragmatique sur un phénomène bien connu des développeurs d'Expert Advisors (EA) sur MetaTrader 5 : la différence d'exécution constatée entre un Stop Loss / Take Profit côté serveur (posé directement chez le broker) et des SL / TP virtuels (gérés en local par le code de l'EA qui envoie un ordre Market au moment voulu).
Même chez des brokers d'excellente réputation (No Dealing Desk / Raw Spread), on constate régulièrement que la sortie en SL/TP serveur donne un prix d'exécution légèrement moins favorable qu'un ordre déclenché côté client via l'EA.
Pourquoi ce décalage et quelles en sont les raisons techniques ?
1. La visibilité du carnet d'ordres (La "carte" donnée au broker)
Lorsque vous inscrivez un SL ou un TP côté serveur sur MT5, votre niveau de sortie devient une donnée d'ordre Pending stockée sur les serveurs du broker (et potentiellement visible dans la profondeur du carnet si le broker agrège sa liquidité).
- L'impact du SL serveur : Un Stop Loss serveur est en réalité un ordre Stop Market. Dès que le cours touche le prix du SL, l'ordre est libéré sur le marché pour être exécuté au premier prix disponible. Le broker/fournisseur de liquidité sait exactement où se trouve la poche de liquidité (les paquets de SL) et l'exécution se fait souvent dans le glissement de prix (slippage) défavorable.
- L'avantage du SL virtuel : Le broker ignore où se situe votre niveau d'invalidation. Tant que le prix n'est pas franchi, aucune instruction n'est présente sur le serveur. Lorsque votre EA détecte la touche du niveau, il envoie un ordre d'interruption Market instantané. Cela évite le ciblage ou la pré-exposition de votre ordre dans la file d'attente.
Sur MT5, la gestion des ordres d'arrêt automatique côté serveur obéit aux règles strictes des fournisseurs de liquidité (LP) :
- Côté serveur : Un TP serveur est un ordre Limit, tandis qu'un SL serveur est un ordre Stop. En théorie, un ordre Limit ne peut pas glisser négativement (soit il est exécuté au prix soit meilleur). Mais en pratique sur les bougies très rapides, le serveur MT5 valide le déclenchement du SL au pire prix du *spread* élargi instantané.
- Côté virtuel : En gérant la sortie par l'EA via une instruction `OrderSend()` en Market, vous envoyez la demande d'exécution au moment exact où votre terminal voit le prix bid/ask réel, ce qui permet parfois de capturer un prix plus proche du marché avant le pic d'élargissement du spread.
On pourrait penser que le SL serveur est plus rapide car il réside sur la même machine que le moteur de cotation du broker. C'est vrai, mais cela se retourne parfois contre le trader :
- Le serveur déclenche le SL dès la micro-seconde où un tick aberrant ou un élargissement temporaire du spread (*spread spike*) se produit.
- Un EA local (ou sur VPS) configuré avec un filtre de confirmation (ex: attendre qu'un tick persiste 200 ms ou que la bougie ferme) évitera les fausses cassures "mèches" qui viennent exécuter les SL serveur avant de repartir dans le bon sens.
Attention toutefois, la médaille a son revers et les SL virtuels ne sont pas sans danger :
- Panne de réseau / crash du VPS : Si votre terminal MT5 coupe, votre position n'a plus AUCUNE protection.
- Latence extrême lors des annonces : Lors d'un NFP ou d'un FOMC, le délai d'envoi de l'ordre par l'EA (Ping + temps de traitement MQL5) peut générer un slippage encore plus cataclysmique qu'un SL serveur.
Pour concilier le meilleur des deux mondes, beaucoup de développeurs utilisent la technique du **SL d'urgence (Hard SL)** : un SL virtuel serré géré par l'EA pour les sorties quotidiennes, doublé d'un SL serveur placé beaucoup plus loin (ex: à 3x la distance) uniquement pour servir de "parachute" en cas de déconnexion du VPS.
Avez-vous mesuré l'écart d'exécution (en pips/points) entre vos SL virtuels et vos SL serveur sur vos EA MT5 ?

