Dans cet article
Après cet article, vous saurez…
- Décrire la dépendance de Python au terminal MT5.
- Tester NaN et les seuils avec des types explicites.
- Réconcilier une demande incertaine avant une répétition.
Les notions sans quitter l’article
Backtest : test historique d’une règle Exécution d’un ordre Commission de transaction Stop loss : seuil et prix exécuté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.
| Architecture | Contrôle important |
|---|---|
| EA seul | Données, événements, état des demandes et redémarrage du terminal |
| Recherche Python puis EA | Fichier/modèle exporté, version et égalité des règles |
| Python continu et terminal | Deux 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
Faites défiler horizontalement ou agrandissez le schéma pour lire les détails.
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
- Listez système, API, données, horizon et contraintes de supervision.
- Construisez un journal de lecture et décisions, sans envoyer de demande réelle.
- Comparez jeux d’entrée figés dans les deux implémentations si une migration est envisagée.
- 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.
Vérifiez vos acquis
Environ 2 minutes de pratique.
Voir la réponse et l’explication
x <= 10 est faux avec NaN ; sa négation est vraie. Contrôlez d’abord la validité.
Autres questions
Python suffit-il pour créer un robot ?
Le langage permet une implémentation, pas un système complet. Il reste API, données, états, confirmations et supervision, y compris contraintes du terminal utilisé.
Une architecture hybride est-elle plus sûre ?
Pas par nature. Recherche hors ligne puis export peut réduire les processus permanents ; Python continu ajoute transport et supervision. Une panne commune peut toucher les deux couches.
MQL5 reçoit-il forcément tous les ticks ?
Le traitement OnTick peut regrouper des arrivées quand un événement est déjà en file ou traité. Mesurez le chemin effectif plutôt que déduire latence et exhaustivité du langage.
Quand migrer de Python vers MQL5 ?
Quand un besoin concret et vérifié le justifie, après tests d’équivalence. ONNX peut éviter un service Python continu dans certains cas compatibles ; il n’efface pas prétraitements et contrôles.
Sources et vérification
- MetaQuotes — initialize
Connexion au terminal et lancement éventuel ; pas confirmation d’un ordre antérieur.
- MetaQuotes — order_send
Structure du résultat et demande de fermeture avec identifiant de position.
- Python — expressions
Comparaisons du float NaN, périmètre scalaire explicitement conservé.
- Python — math.isfinite
Rejet des infinis et NaN ; zéro fini.
- Python — flottants
Représentation binaire et différence entre affichage et calcul.
- MetaQuotes — ONNX
Modèles et formes des entrées/sorties dans MQL5.
- MetaTrader5 — fichiers PyPI
Fichiers publiés Windows x86-64 ; compatibilité à vérifier pour la version choisie.
- ib_insync — dépôt original
Archive en lecture seule datée du 14 mars 2024 ; pas déclaration universelle d’inutilisabilité.
Les calculs reposent sur des hypothèses explicites. Ils ne remplacent ni les données actuelles du marché ni les conditions de l’intermédiaire.
