Quatre défauts silencieux qui faussent votre Expert Advisor

 

Bonjour,

Après un an de développement sur un Expert Advisor combinant logique MQL5 et pipeline d'apprentissage automatique, j'ai identifié quatre défauts qui ne produisent aucune erreur visible mais faussent complètement les résultats : lien signal/résultat rompu, fuite de données dans l'entraînement, PERIOD_CURRENT passé en paramètre, et normalisation de prix incompatible avec le pas de cotation du symbole.

Je propose un article présentant chacun de ces défauts avec son symptôme, son diagnostic et sa correction, accompagné de code MQL5 directement réutilisable (trois fichiers .mqh compilés et testés, plus un script Python).

Vous trouverez ci-dessous le plan et le résumé. Je reste à votre disposition pour toute précision.

Cordialement,
Erwann FOUARGE



Catégorie suggérée

Expert Advisors / Statistiques et analyses (à ajuster selon les options proposées ; « Machine learning » peut aussi convenir vu la section sur la fuite de données)

Résumé court (à coller dans le champ description)

Un bug qui fait planter un EA se corrige vite : on le voit. Cet article traite des défauts d'une autre nature — ceux qui ne produisent aucune erreur, aucun message dans le journal, aucun comportement visiblement anormal. L'EA tourne, envoie des ordres, remplit ses fichiers, et pourtant les résultats sont faux.

Quatre défauts réels sont présentés, trouvés dans un EA complexe développé sur un an : un lien signal/résultat rompu par confusion entre ticket d'ordre et identifiant de position, une fuite de données produisant une AUC de 1.0 en entraînement et 0.50 en production, un PERIOD_CURRENT passé en paramètre qui fait échouer silencieusement toutes les comparaisons de timeframe, et un NormalizeDouble insuffisant face aux symboles dont le pas de cotation diffère du point.

Chaque défaut est présenté avec son symptôme trompeur, son diagnostic et sa correction. Le code MQL5 fourni est directement réutilisable. L'article se termine sur la méthode qui permet de détecter ce type de problème : se méfier des chiffres trop beaux et trop constants, journaliser les valeurs plutôt que les états.

Structure des sous-sections

  1. Introduction — pourquoi un bug invisible est plus dangereux qu'un crash
  2. Défaut n°1 : le lien entre signal et résultat n'existe pas ( DEAL_POSITION_ID )
  3. Défaut n°2 : la fuite de données dans l'apprentissage
  4. Défaut n°3 : PERIOD_CURRENT passé en paramètre
  5. Défaut n°4 : NormalizeDouble ne suffit pas (retcode 10016)
  6. La méthode, plus importante que les corrections
  7. Conclusion et annonce du second article sur la validation

Fichiers joints

PositionOutcome.mqh , PriceNormalization.mqh , BlockReasonCounter.mqh , auc_bootstrap.py