En bref

La plateforme ou le serveur refuse un niveau de prix associé à l’ordre. Avant de modifier le code, il faut relever la plateforme, le code exact, les prix Bid et Ask, les niveaux demandés et les contraintes du symbole.

1. Les codes MT4 et MT5 ne sont pas identiques

Sur MT4, le code 130 correspond à ERR_INVALID_STOPS. Sur MT5, le code de retour serveur 10016 correspond à TRADE_RETCODE_INVALID_STOPS. Le message décrit un problème comparable, mais le diagnostic doit utiliser le code et les outils propres à la plateforme concernée.

2. Stop Loss ou Take Profit trop proche

Chaque symbole peut imposer une distance minimale entre le prix courant et les niveaux de protection. Sur MT4, cette information est notamment exposée par MODE_STOPLEVEL. Sur MT5, elle correspond à SYMBOL_TRADE_STOPS_LEVEL, exprimé en points.

3. Niveau placé du mauvais côté du marché

Pour un achat, le Stop Loss se situe normalement sous le marché et le Take Profit au-dessus. Pour une vente, c’est l’inverse. La vérification doit aussi tenir compte du bon prix de référence, Bid ou Ask, selon l’ordre et l’opération demandée.

4. Confusion entre points, pips et décimales

Un calcul prévu pour un symbole à quatre décimales ne peut pas toujours être repris tel quel sur un symbole à cinq décimales. La valeur du point, le nombre de décimales et l’incrément de cotation autorisé doivent être lus pour le symbole réellement traité.

5. Prix mal normalisé

Un niveau peut sembler correct à l’écran tout en ne respectant pas l’incrément de prix du symbole. Les valeurs envoyées doivent être ramenées à un prix autorisé par les propriétés de l’instrument, et pas seulement arrondies de manière visuelle.

6. Prix ou contraintes devenus différents

Le marché peut évoluer entre le calcul du stop et l’envoi de l’ordre. Certaines contraintes sont également dynamiques : sur MT4, une valeur nulle de MODE_STOPLEVEL ne garantit pas toujours l’absence de restriction côté serveur.

7. Prix d’un ordre en attente trop proche

L’erreur ne concerne pas uniquement le Stop Loss et le Take Profit. Le prix d’ouverture d’un Buy Limit, Sell Limit, Buy Stop ou Sell Stop peut lui aussi être refusé s’il ne respecte pas la distance minimale.

8. Modification dans la zone de gel

Sur MT5, SYMBOL_TRADE_FREEZE_LEVEL définit une distance dans laquelle certaines opérations ou modifications peuvent être bloquées. Un ordre accepté à l’ouverture peut donc devenir temporairement non modifiable à proximité du marché.

Checklist de diagnostic

  • noter MT4 ou MT5, le code exact et l’heure de l’erreur ;
  • journaliser Bid, Ask, le prix demandé, le Stop Loss et le Take Profit ;
  • lire la distance minimale des stops et, sur MT5, le niveau de gel ;
  • contrôler les décimales, la valeur du point et l’incrément de prix ;
  • vérifier le type d’ordre et le côté attendu pour chaque niveau ;
  • reproduire le défaut sur le même symbole et avec les mêmes paramètres.

Une correction robuste

Une correction fiable lit les propriétés du symbole, calcule les niveaux depuis le bon prix de référence, applique la distance minimale avec une marge cohérente, normalise les prix, puis journalise la requête et son résultat exact.

Sur MT5, le code doit notamment exploiter le retour de la requête et peut la contrôler avant son envoi. Une boucle de tentatives infinies ou un élargissement arbitraire des stops masque le défaut sans garantir le comportement attendu.

Que transmettre pour faire corriger l’EA ?

Préparez si possible le code source que vous êtes autorisé à utiliser, le journal autour de l’erreur, le symbole, l’unité de temps, l’environnement de test et les paramètres employés. Une capture situe le problème, mais les valeurs calculées et le journal sont généralement plus utiles.

Références officielles

Diagnostic DataVryx

Un défaut précis demande des valeurs précises.

Testez d’abord le journal dans le démonstrateur, ou transmettez les éléments nécessaires pour chiffrer une correction ciblée.

Ouvrir l’analyseur de journal MT4/MT5

Demande de devis