Discussion de l'article "Le gestionnaire d'événements "New Bar"" - page 5

 
tito.vinicius:

Actuellement, mon EA ouvre plusieurs ordres sur la même bougie. Je pense que le contenu de cet article pourrait m'aider.

Comment puis-je l'implémenter ?


Vous pouvez retirer la logique d'entrée de l'événement OnTick() et la placer dans la fonction OnNewBar(). De cette façon, elle ne sera exécutée que lorsqu'il y a une nouvelle barre, plus besoin d'entrer plusieurs fois sur la même bougie, car une fois qu'elle a été exécutée, elle ne s'exécutera à nouveau que sur la bougie suivante.

 
merci beaucoup pour ce très beau papier - vos efforts sont très appréciés !
 

Bon article.

Merci de votre attention.

 

Très bien, merci,

J'espérais une fonction des bibliothèques MQL5 mais il semble qu'il n'y en ait pas ? J'ai une librairie de trading modulaire et j'ai rencontré le problème suivant : le module de signal définissait son drapeau IsNewBar et remplaçait le prevCandleTime et lorsque le module TrailingSL devait évaluer la même fonction, il renvoyait un faux car le prevCandleTime était le même que le courant.

Oui, je peux stocker le résultat dans un indicateur central et l'utiliser pour tous les modules et je ne rencontrerai pas ce problème MAIS les modules peuvent fonctionner sur des périodes différentes, c'est pourquoi cette solution est si parfaite, merci.

 
Article très instructif, merci beaucoup
 
Merci, c'est la meilleure façon de détecter un nouveau bar :)
 
À mon avis, nous compliquons parfois inutilement les choses. Pour des raisons pratiques, rien, même en termes de performances, ne peut battre l'heure du système (l'heure des fenêtres). Au début de la minute suivante, ou pour être sûr, après quelques secondes, nous pouvons supposer qu'il y aura une nouvelle barre pour chaque symbole. Disons une minute... cinq minutes... quinze minutes, ou n'importe quel autre délai. Pour être sûr, vous pouvez vérifier si l'heure de la barre et l'heure du système sont les mêmes.

Mais il n'est pas nécessaire de créer plusieurs instances de cette classe, juste pour vérifier s'il y a une nouvelle barre, alors que nous savons tous quand une nouvelle barre sera peinte.


 
double Old_open, New_open;
bool  NewBar = false;

int OnInit()
  {
        //---------- 

        Old_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        
        //---------- 

        return(INIT_SUCCEEDED);
  }
void OnTick()
  {
        //---
        New_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        if (New_open != Old_open)
           {
               Print("Il y a un nouveau bar qui arrive., TimeCurrent());
               NewBar = true;
               Old_open = New_open;
           }
        else NewBar = false;
         
  }

Bonjour, je suppose que dès que la cotation Open() est arrivée, cela signifie qu'une nouvelle barre est arrivée. Je pense que c'est plus simple ou est-ce que j'ai raté quelque chose ?

 
Max Go nouvelle barre est arrivée. Je pense que c'est plus facile ou est-ce que j'ai raté quelque chose ?

Imaginez une situation où le prix d'ouverture d'une nouvelle barre est égal au prix d'ouverture de la barre précédente.... Il y a une forte probabilité d'attraper une telle situation sur des petits TFs.

 

Je n'ai pas de méthode plus simple que celle-ci.
suit l'heure d'ouverture de la barre actuelle et les compare à chaque tic-tac.

// Je n'ai pas de méthode plus simple que celle-ci.
// Suit l'heure d'ouverture de la barre actuelle et les compare à chaque tic-tac.

double lastTime = 0;

void OnTick() {

   if(isNewBar()){

      Print("New Bar");

     }

}



bool isNewBar() {

   double thisTime= NormalizeDouble(iTime(_Symbol, PERIOD_CURRENT, 0), _Digits);

   if(lastTime != thisTime) {

      lastTime = thisTime;

      return true;

     }

   return false;

  }

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
NormalizeDouble - Преобразование данных - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5