Dans cet article
Après cet article, vous saurez…
- Identifier dernière barre close dans le tableau décrit.
- Différencier demande, notifications et volume réellement confirmé.
- Vérifier handle, calcul, copie et marqueur vide avant signal.
Les notions sans quitter l’article
Backtest : test historique d’une règle Plan de trading Compte de démonstration Drawdown : baisse depuis un sommet Stop loss : seuil et prix exécutéUn Expert Advisor MQL5 est un programme événementiel de MetaTrader 5. Il peut calculer des règles et envoyer des demandes de trade sous les permissions requises. Événement reçu, permission activée et opération exécutée ne sont pas la même chose. Attacher un EA ne constitue pas une preuve de résultat financier.
Ce qu’un EA peut faire et ce que son fichier ne révèle pas
MetaEditor compile MQ5 en EX5. Un exécutable peut être distribué sans source ; apprendre MQL5 ne révèle pas l’algorithme d’un EX5 opaque. Indicateur peut calculer et notifier avec d’autres événements et restrictions de trading ; dire « il ne fait que dessiner » serait trop étroit. MT4 a ses EA et son langage distincts ; d’autres systèmes emploient d’autres interfaces.
Trois valeurs copiées, mauvais choix de barre
Modèle source : CopyBuffer réussit start_pos=1,count=3 dans un tableau ordinaire sans AS_SERIES. Mémoire physique : shift 3=103 à index 0, shift 2=101 à index 1, shift 1=102 à index 2. La dernière close est 102, pas 103 ; shift 0 courante n’a pas été demandé. Test strict> 102,5 passe pour 103 mais pas 102.
Index zéro du tableau n’est pas forcément dernière barre close
Faites défiler horizontalement ou agrandissez le schéma pour lire les détails.
Déclarez offset, buffer, quantité renvoyée et indexation du tableau. Une copie complète ne corrige pas une lecture de la mauvaise barre. CopyBuffer place le plus ancien élément au début de mémoire physique ; direction logique d’indexation reste à vérifier. Index 2 n’est pas une règle universelle pour autres configurations.
La somme deal 0,10 ne doit pas être effacée par changement de statut.
- D1+D 2
- 0,10 lot – 0,04+0,06.
- ORDER_DELETE
- Statut d’ordre – Ne signifie pas expositionzéro.
- Réponse incertaine
- Rapprocher avant retry – Deux 0,10 remplis feraient 0,20.
Initialisation, ticks et désinitialisation
OnInit prépare les ressources et signale l’échec si requis ; une réinitialisation peut le rappeler. OnTick traite NewTick du symbole du graphique attaché ; événement déjà en file ou en traitement empêche ajout d’un nouveau NewTick. Ce n’est pas un historique garanti de chaque tick. Timer, BookEvent, ChartEvent et autres événements peuvent être utilisés sans imposer OnTick à tout EA.
Désactiver AutoTrading interdit nouvelles demandes EA, mais ne stoppe pas ses calculs ni interrompt le handler courant. OnDeinit gère arrêt et motif avec ressources et état à préserver. OnTimer et OnTradeTransaction peuvent être essentiels. En multi-symboles, tick du graphique attaché ne prouve pas fraîcheur des autres séries.
CTrade facilite l’envoi, pas la certitude d’exécution
OrderSend true indique des vérifications et prise en charge, pas forcément fill. Examinez retcode et rapprochez ordres, deals et positions. OrderCheck est précontrôle, sans garantir l’état ultérieur. CTrade.Buy, Sell et PositionClose demandent également ResultRetcode et ResultDeal selon l’opération.
Modèle source : demande d’achat 0,10 lot, réponse locale incertaine. Recommencer sans rapprochement peut produire 0,20 si les deux remplissent. Absence de confirmation locale ne prouve pas absence d’action serveur. Modèle de notifications : D 1 achat 0,04,D 2 achat 0,06,puis ORDER_DELETE. Compteur erroné remis à zéro par suppression finit 0 ; ordre ORDER_DELETE,D1,D 2 finit 0,10. Somme de deals confirmés 0,10 dans les deux séquences.
Le statut d’ordre n’est pas l’exposition de position. Un ledger réel doit aussi gérer ventes, retournements, corrections et comptabilité du compte ; arrivée des notifications n’a pas de priorité garantie. Ajout de procédure : après reconnexion, comparez identifiants de deals, volume cumulé et état actuel avant de réémettre. Cette règle d’idempotence ne se prouve pas par un booléen de retour.
Tester sans réutiliser silencieusement les mêmes choix
Le StrategyTester utilise modes de ticks générés ou réels collectés par le courtier selon données. Gardez provenance, dates, contrats, coûts et mode ; les ticks réels ne sont pas un flux MetaQuotes universel. Optimiser et évaluer sur même histoire peut surestimer l’évidence, sans garantir une courbe lisse ou un futur échec.
Réservez une période inutilisée et conservez tous les essais. Retard simulé du testeur n’est pas mesure de toutes futures exécutions réelles. Backtester une stratégie : prix, coûts et fuites de données explique séparation développement/évaluation.
Répétabilité et surveillance sont des objectifs de conception
Deux cents trades mensuels, décisions rapides et travail nocturne peuvent être besoins, pas preuves d’avantage. Définissez entrées, événements, règles d’abstention et supervision. Les annonces inhabituelles demandent tests sans invalider toute automatisation par principe. Une courbe de marketplace ou un sondage de forum non identifié ne mesure pas performance future.
Construire ou acheter demande les mêmes contrôles critiques
Un petit projet vérifie règles précises ; ni trois à six mois ni programmation maison ne garantissent supériorité. Source permet revue mais pas résultat. AutoTrading local ne clôture pas les positions. Un stop ordinaire accepté par serveur peut rester actif terminal fermé, une sortie calculée uniquement par EA requiert programme et connexion.
L’hébergement MetaQuotes est un environnement migré séparé, trading automatisé permis ; bouton local ne l’arrête pas. VPS Windows est un autre service. Préparez redémarrage, données absentes, pas de volume invalide, réponse incertaine et modifications manuelles. En netting, stratégies sur même symbole partagent sa position nette ; MagicNumber ne crée ni capital ni marge séparés.
Handle créé : les valeurs sont-elles prêtes ?
BarsCalculated renvoie quantité calculée ou−1 en erreur ; vérifiez barre requise puis nombre réellement copié. Une lecture manquée n’est pas RSI zéro : zéro valide et absence de donnée sont états distincts. Contrôlez buffer et offset plutôt que remplacer un défaut par une observation extrême.
Tous les contrôles doivent réussir
Quatre contrôles avant une valeur exploitable
Faites défiler horizontalement ou agrandissez le schéma pour lire les détails.
Quatre cas source demandent une valeur : Ahandle invalide, pas de lecture ; Bhandle présent mais 0 copié, attendre ; Cune valeur copiée égale EMPTY_VALUE, pas de signal utilisable ; Dune valeur valide 45, évaluation possible.45 est fictif, pas signal d’investissement. EMPTY_VALUE vaut par défaut DBL_MAX, nombre fini ; finitude seule ne suffit pas. Un indicateur personnalisé peut spécifier un autre marqueur vide.
Exercice : une valeur est copiée mais vide. N’évaluez pas le seuil ; enregistrez l’absence et réessayez à l’événement approprié après contrôle du contrat. Ne rejetez pas automatiquement tout zéro valide. EA et API : backtester les versions disponibles hors ligne traite disponibilité externe et EA limité au test visuel : séparer signal et objet graphique les dépendances graphiques.
Une première revue contrôlée
- Sur démo adaptée, chargez un exemple fourni, tel Moving Averageou MACD Sample, sur EUR/USDH 1 et lisez rapport, drawdown et PF ; aucun compte réel nécessaire.
- Lisez OnInit, OnTick et CTrade dans la documentation pour repérer événements et réponses.
- Écrivez données, entrée, sortie, taille et conditions d’abstention avec toute décision encore discrétionnaire.
- Testez acceptation des données, séquence d’événements, reprise et réponses incertaines. Durée dépend du périmètre, pas d’un mois garanti.
Robot MQL5 ou Python : tester les frontières et la reprise compare ensuite dépendances et validations des deux environnements sans désigner un langage toujours meilleur.
Vérifiez vos acquis
Environ 2 minutes de pratique.
Voir la réponse et l’explication
Ordre physique : shifts 3,2,1 ; dernière close est shift 1, pas barre courante 0.
Autres questions
MQL5 ouPython : quelle différence ?
MQL5 utilise événements, données et fonctionsMT 5. Pythonpeut employer une API ou intégrationMetaQuotes avec terminal ; ce n’est pas toujours REST/FIX externe. Comparez dépendances, validations et tests, sans meilleur langage universel.
Faut-il programmer pour utiliser unEA ?
Un compilé documenté peut fonctionner sans écrire du code, mais il faut comprendre entrées, permissions, logs et reprise. Apprendre MQL5 ne dévoile pas un EX5 sans source et aucun délai d’apprentissage ne garantit la revue.
Pourquoi backtest brillant et réel négatif ?
Données, sélection, coûts, délai et exécution peuvent différer. Réutiliser l’histoire de sélection surestime parfois la preuve, sans résultat mathématiquement garanti. Gardez essais et période inutilisée.
UnVPS est-il indispensable ?
Cela dépend disponibilité et chemin requis. VPS n’est pas garantie de latence/fill. Distinguez Windows et hébergementMetaQuotes ; bouton AutoTrading local n’arrête pas une instance distante déjà migrée.
Sources et vérification
- MetaQuotes — CopyBuffer
Offset depuis barre courante et plus ancien au début physique ; indexation de destination distincte.
- MetaQuotes — OnTick
FileNewTick, permissions et poursuite des calculs quand AutoTrading désactivé.
- MetaQuotes — OrderSend
True ne confirme pas fill, retcode et rapprochement requis.
- MetaQuotes — OnTradeTransaction
Notifications ordre/deal/position et priorité d’arrivée non garantie.
- MetaQuotes — BarsCalculated
Quantité calculée ou−1 ; handle seul ne prouve pas donnée prête.
- MetaQuotes — Other Constants
EMPTY_VALUE par défautDBL_MAX et INVALID_HANDLE−1 ; contrats personnalisés à lire.
- MetaTrader 5 — migration hébergement
Distant distinct du boutonlocal, journalisation et automatisation permise.
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.
