Le bon langage dépend de la frontière entre recherche, calcul et exécution. Un robot comprend données, règles, demandes, confirmations et récupération après incident. MQL5 ne dispense pas de ces contrôles ; Python ne les fournit pas automatiquement avec une bibliothèque.

Dessiner le chemin jusqu’au compte

Un EA MQL5 s’exécute dans le terminal MetaTrader5. Le package Python MetaTrader5 communique lui aussi avec un terminal ; ce n’est pas une connexion universelle directe à tous les serveurs des courtiers. Une autre API peut avoir une architecture différente. Dessinez les processus et les dépendances avant de comparer les syntaxes.

initialize peut lancer le terminal si nécessaire. Vérifiez explicitement chemin d’installation, numéro de compte, serveur et environnement démo ou réel. Une connexion réussie ne répond pas à la question « l’ordre précédent a-t-il été exécuté ? ». Interrogez état et historique avant de reprendre un travail interrompu.

Ce que MQL5 rapproche et ce qu’il ne garantit pas

MQL5 donne accès aux événements et fonctions de la plateforme, aux indicateurs et au testeur. Cela réduit certaines interfaces externes, sans rendre le traitement instantané ni tous les ticks visibles à votre logique. Lorsqu’un événement NewTick est déjà en traitement ou dans la file, un nouveau n’est pas ajouté de la même façon : un handler long peut donc compter moins d’appels que de ticks reçus.

Un modèle de machine learning n’impose pas nécessairement Python en continu. MetaQuotes documente l’exécution de modèles ONNX dans MQL5. Formes des entrées/sorties et prétraitements doivent correspondre ; une conversion de fichier ne prouve pas égalité numérique ni compatibilité de chaque opérateur. Comparez des cas limites identiques avant de parler de parité.

Python : recherche souple, dépendances explicites

pandas facilite préparation et contrôle des données ; d’autres bibliothèques fournissent statistiques et modèles. Ce confort n’assure ni accès courtier ni installation sur tous les systèmes. Les fichiers actuellement publiés du package MetaTrader5 sur PyPI sont des wheels Windows x86-64 pour versions précises de CPython : vérifiez vos versions au lieu d’assimiler la portabilité générale de Python à celle de cette intégration.

Le dépôt original ib_insync est archivé depuis le 14 mars 2024. Il ne faut pas le présenter comme un projet actuellement maintenu sur cette seule base. Archivage ne signifie pas que chaque utilisation est impossible ; version d’API, maintenance effective et alternatives doivent être examinées séparément. Une démonstration ancienne n’est pas une attestation de fonctionnement actuel.

Trois architectures, trois frontières à contrôler

Sur petit écran, faites défiler le tableau pour lire toutes les colonnes.

Une liste de responsabilités plutôt qu’un classement des langages
ArchitectureContrôle important
EA seulDonnées, événements, état des demandes et redémarrage du terminal
Recherche Python puis EAFichier/modèle exporté, version et égalité des règles
Python continu et terminalDeux processus, transport, supervision et rapprochement du compte

Recherche hors ligne puis export n’oblige pas à maintenir un service Python pendant les séances. À l’inverse, une décision calculée en continu ajoute ses propres possibilités de panne. L’hébergement virtuel MetaQuotes n’est pas un bureau Windows général où installer arbitrairement votre chaîne Python. Un EA de secours ne contourne pas l’absence du même terminal ou de la même connexion dont il dépend.

Avec NaN, deux conditions apparemment équivalentes divergent

Modèle source limité à un float scalaire Python : x vaut NaN et le seuil vaut 10. x <= 10 est faux ; sa négation est vraie. Mais x > 10 est faux aussi. Si « pas inférieur ou égal » autorise l’entrée, la donnée invalide passe par une branche inattendue. Un contrôle math.isfinite préalable rejette NaN et les infinis, sans prétendre résoudre tous les défauts de données.

Une donnée invalide ne doit pas devenir une permission

Une donnée invalide ne doit pas devenir une permissionPour un float Python NaN : inférieur ou égal à10 faux, négation vrai, supérieur à10 faux, isfinite faux. Vérifier la validité avant le seuil.x = NaN · seuil = 10x ≤ 10 → fauxnon (x ≤ 10) → vraix > 10 → fauxisfinite(x) → fauxValidité d’abord ; décision ensuite.
Cas construit pour le float scalaire Python ; tableaux NumPy et types Decimal demandent leurs propres tests.

Faites défiler horizontalement ou agrandissez le schéma pour lire les détails.

Reprise après réponse perdueDeux demandes de 0,10 lot supposées exécutées ; contrat 100 000 EUR et pip standard.EXEMPLE DE CALCULPremière exécution0,10 lotRépétition exécutée0,20 lot totalValeur du pip2 USD
Reprise après réponse perdue. Deux demandes de 0,10 lot supposées exécutées ; contrat 100 000 EUR et pip standard.

Rapprocher les fills avant de renvoyer.

Première exécution
0,10 lot – Réponse non reçue.
Répétition exécutée
0,20 lot total – Exposition doublée dans ce cas.
Valeur du pip
2 USD – Au lieu de 1 USD, hors frais et conversion.

Équivalence du modèle, pas seulement ressemblance du code

Le float Python 0.1 + 0.2 donne 0.30000000000000004 et dépasse le float 0.3. Decimal construit à partir des chaînes « 0.1 » et « 0.2 » donne exactement 0.3 ; des unités entières peuvent aussi convenir si l’unité et les arrondis sont définis. Afficher moins de décimales ne change pas le nombre comparé. Testez inférieur, égal, supérieur, absent et non fini, sans présumer le résultat d’un autre langage non testé.

Ajout pour une interface française : « 0,1 » est un affichage local, pas un littéral numérique Python valide à passer tel quel à float. Séparez interprétation du formulaire, stockage et code. En CSV, remplacer toutes les virgules sans connaître séparateur et guillemets peut changer les colonnes. Une entrée ambiguë doit être signalée, pas devinée.

Autre modèle source : signal disponible après une clôture 1,1000 ; protocole A calcule une entrée à ce prix, protocole B au prochain Ask 1,1003. Différence de trois pips, dont il faut décomposer temporalité et côté de cotation. L’attribuer entièrement au temps de calcul Python serait injustifié ; sur H1 aussi, un mauvais instant peut changer une opération.

Choisir avec un prototype sans ordres

  1. Listez système, API, données, horizon et contraintes de supervision.
  2. Construisez un journal de lecture et décisions, sans envoyer de demande réelle.
  3. Comparez jeux d’entrée figés dans les deux implémentations si une migration est envisagée.
  4. Définissez reprise, rapprochement et état incertain avant activation.

Aucun ratio de temps d’apprentissage, nombre de lignes ou délai de trois mois ne vaut règle générale. Migrez pour une exigence démontrée : API absente, environnement incompatible ou calcul mesuré insuffisant, et non pour une promesse de performance attachée au langage.

Une réponse perdue n’est pas une absence d’exécution

Demande source de 0,10 lot exécutée, réponse perdue, nouvel envoi aveugle de 0,10 exécuté aussi : total 0,20 lot. Sous contrat fictif de 100 000 EUR par lot et pip 0,0001 USD/EUR, valeur du pip passe de 1 à 2 USD. Ce cas ne dit pas que chaque répétition est exécutée ; il démontre le risque d’une reprise sans rapprochement.

order_send retourne une structure à inspecter. La fermeture documentée utilise une demande adaptée et le ticket de position ; n’inventez pas une fonction native générale position_close. Interruption de processus, rejet explicite, exécution partielle et réponse inconnue exigent des états distincts. Backtest Python : alignement, disponibilité et exécution permet ensuite de contrôler ces hypothèses hors compte.