Indiquer une nouvelle barre - page 2

 
Doerk Hilger:

La méthode la plus simple :

static datetime tlastbar=0 ;

datetime tnewbar=iTime(NULL,PERIOD_CURRENT,0) ;

bool isnewbar=tnewbar!=tlastbar ;

tlastbar=tnewbar ;

Autant que je sache, le sujet est pour mql5. Votre code est uniquement pour mql4.
 
Willbur:

Voici ma version finale.

En fait, je suis un peu inquiet parce que c'est si facile.

Alain : Ce serait bien si tu publiais la bénédiction.

// -----------------------------------------------------------------------
bool NewBar(void)
{
bool iNewBar = false;
static double currPeriodProgress = 0;

   if(MathMod(TimeCurrent(),PeriodSeconds()) < currPeriodProgress) iNewBar = true;

   currPeriodProgress = MathMod(TimeCurrent(),PeriodSeconds());

   return(iNewBar);
}
// ------------------------------------------------------------------------
void OnTick()
{
    if(NewBar())     PlaySound("tick.wav");


Salutations de Cologne
Willbur

Le problème est qu'elle ne peut être utilisée qu'à partir de OnTick(). A partir d'autres gestionnaires d'événements, vous n'êtes jamais sûr que TimeCurrent() est lié au symbole que vous voulez.

Et je vous suggère de ne jamais faire deux fois le même calcul :

bool NewBar(void)
  {
   bool iNewBar=false;
   static double currPeriodProgress=0;

   double lastPeriodProgress=MathMod(TimeCurrent(),PeriodSeconds());

   if(lastPeriodProgress<currPeriodProgress) iNewBar=true;

   currPeriodProgress=lastPeriodProgress;

   return(iNewBar);
  }
 
Alain Verleyen:
Pour autant que je sache, le sujet est pour mql5. Votre code est uniquement pour mql4.
Que voulez-vous dire par là ? C'est juste un extrait et il peut être inclus où l'on veut, par exemple dans sa fonction NewBar(). Et c'est à mon avis la solution la plus simple, la plus rapide et la plus fiable. J'ai inclus ceci dans un dérivé de la classe CSymbolInfo pour toutes les échéances séparément et cela fonctionne parfaitement.
 

Je les ai utilisés dans MQL4

//global
long Bars_in_Chart;

   // detected new bar
   if(Bars_in_Chart<Bars)
   {
      Bars_in_Chart=Bars;
   }
 
Doerk Hilger:
Que voulez-vous dire par là ? C'est juste un extrait et il peut être inclus où l'on veut, par exemple dans sa fonction NewBar(). Et c'est à mon avis la solution la plus simple, la plus rapide et la plus fiable. J'ai inclus ceci dans un dérivé de la classe CSymbolInfo pour toutes les échéances séparément et cela fonctionne parfaitement.
Il n'y a pas de fonction iTime() dans mql5.
 
Alain Verleyen:
Il n'y a pas de fonction iTime() dans mql5.
MT5, vraiment ? Mais MQL5 n'est pas seulement MT5, c'est du moins ce que j'ai toujours compris, car MT4 utilise le compilateur MQL5. Mais en fait je ne le savais pas, j'utilise principalement MT4. Quoi qu'il en soit, merci pour l'information sur la restriction.
 
Doerk Hilger:
MT5, vraiment ? Mais MQL5 n'est pas seulement MT5, c'est du moins ce que j'ai toujours compris, car MT4 utilise le compilateur MQL5. Mais en fait je ne le savais pas, j'utilise principalement MT4. Quoi qu'il en soit, merci pour l'information sur la restriction.
Non, mql4 est pour MT4, mql5 est pour MT5. Ils ont un sous-ensemble de fonctions en commun, mais ce sont 2 langages différents.
 

MQL4 iTime() est facile et compréhensible pour les traders, tout comme la plupart des autres fonctions de MQL4.

MQL5 est différent, il faut un diplôme en informatique pour le coder, et c'est ce qui rebute la plupart des gens.

Voici un exemple que j'ai rencontré la semaine dernière, lorsque j'ai voulu commencer et convertir mes EA de MT4 à MT5 et la solution que j'ai trouvée.


 
Alain Verleyen:
Non, mql4 est pour MT4, mql5 est pour MT5. Ils ont un sous-ensemble de fonctions en commun, mais ce sont deux langages différents.

Le langage est le même mais ils ont un petit sous-ensemble de fonctions qui ne sont pas communes ;) Quoi qu'il en soit, vous avez probablement raison avec cette définition. MQ a beaucoup fait pour générer de la confusion à ce niveau.

 
Doerk Hilger:
MT5, vraiment ? Mais MQL5 n'est pas seulement MT5, c'est du moins ce que j'ai toujours compris, car MT4 utilise le compilateur MQL5. Mais en fait je ne le savais pas, j'utilise principalement MT4. Quoi qu'il en soit, merci pour l'information sur la restriction.
Savez-vous s'il existe une bibliothèque/classe publique qui implémente les anciennes fonctions iClose, iTime ... juste pour des raisons de compatibilité ? Cela aurait du sens lors d'une conversion pas à pas.
Raison: