Rejoignez notre page de fans
Détecter le début d'une nouvelle barre ou d'une nouvelle bougie - expert pour MetaTrader 5
- Vues:
- 294
- Note:
- Publié:
-
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance
Pour un Expert Advisor (EA), lorsqu'une nouvelle cotation ("tick") est reçue par MetaTrader, la fonction standard de gestion d'événement OnTick() est appelée par le terminal. Cependant, il n'existe pas de fonction standard de gestion d'événement pour le démarrage d'une nouvelle barre (bougie).
Pour détecter cela, vous devez surveiller l'heure d'ouverture de la barre la plus récente. Lorsqu'elle change, cela signifie le début d'une nouvelle barre, et vous pouvez réagir à la situation et gérer l'événement. L'exemple de code suivant, compatible avec MQL4 et MQL5, illustre l'une des méthodes permettant d'atteindre cet objectif :
// Gestionnaire standard de l'événement tick void OnTick() { // Vérification de la présence d'une nouvelle barre (compatible avec MQL4 et MQL5). static datetime dtBarraCorrente = WRONG_VALUE; datetime dtBarraPrecedente = dtBarraCorrente; dtBarraCorrente = iTime( _Symbol, _Period, 0 ); bool bEventoBarraNova = ( dtBarraCorrente != dtBarraPrecedente ); // Réagir à l'apparition d'une nouvelle barre et gérer la situation. if( bEventoBarraNova ) { // Détecter s'il s'agit du premier tic reçu et traiter la situation. /* Par exemple, lorsqu'il est appliqué pour la première fois au graphique et que la barre est quelque part au milieu de sa progression et n'est pas vraiment le début d'une nouvelle barre. */ if( dtBarraPrecedente == WRONG_VALUE ) { // Faire quelque chose au premier tick ou au milieu d'une barre ... } else { // Faire quelque chose lorsqu'une barre normale apparaît ... }; // Faire quelque chose d'indépendant de la condition précédente ... } else { // Faire autre chose ... }; // Faire d'autres choses ... };
Dans le code précédent, la variable statique garde une trace de l'heure d'ouverture de la barre, même lorsqu'elle revient de la fonction OnTick(). Contrairement à une variable locale normale, elle mémorise son contenu de données et ne le libère pas lorsqu'elle quitte la fonction. C'est la clé pour détecter un changement dans l'heure d'ouverture de la barre actuelle.
Il est également important de noter que lorsque l'EA est placé sur un graphique pour la première fois, le code précédent réagit comme si la barre venait de s'ouvrir. Cette condition nécessite un traitement spécial si la situation doit être gérée différemment.
Veuillez noter que le code source de toutes mes publications CodeBase est désormais également disponible via les "Projets publics" de MetaEditor sous le nom "FMIC".
Traduit du portugais par MetaQuotes Ltd.
Code original : https://www.mql5.com/pt/code/41601
Calendrier
Calendrier - analyse fondamentale sur l'historique et en temps réel.
SingleTesterCache
Données d'un seul passage du testeur.
Expert
Bibliothèque de lecture/écriture des paramètres d'EA arbitraires.
Coup de pied arrière
Cycle de l'algorithme : lorsqu'il n'y a pas de positions ouvertes, ouvrir deux positions opposées. Attendre la fermeture des deux positions.