Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1754

 
La situation est la suivante : la variable X stocke l'indice de la barre dans l'historique, nous savons que lorsqu'une nouvelle barre apparaît, il y a un décalage, et donc X pointe déjà vers une barre différente. Comment le réparer ? L'idée : à chaque nouvelle barre, nous augmentons le compteur (count++) et l'ajoutons à X. Ainsi, X pointera toujours vers la même barre, quel que soit le décalage. Mais il y a un problème - lorsque l'EA est initialisé, la première barre actuelle ne devrait pas être prise en compte. Je pense que cela peut être facilement résolu si le compte est initialement juste égal à -1. C'est-à-dire que sur la barre actuelle après le compte d'incrémentation sera "0", et sur la nouvelle barre suivante (lorsque le premier décalage de 1 barre s'est produit après l'initialisation) il sera "1". Qu'en pensez-vous ? Peut-être que je ne pense pas du tout au bon endroit ?
 
Nerd Trader #:
La situation est la suivante : la variable X stocke l'indice de la barre dans l'historique, nous savons que lorsqu'une nouvelle barre apparaît, il y a un décalage, et donc X pointe déjà vers une barre différente. Comment le réparer ? L'idée : à chaque nouvelle barre, nous augmentons le compteur (count++) et l'ajoutons à X. Ainsi, X pointera toujours vers la même barre, quel que soit le décalage. Mais il y a un problème - lorsque l'EA est initialisé, la première barre actuelle ne devrait pas être prise en compte. Je pense que cela peut être facilement résolu si le compte est initialement juste égal à -1. C'est-à-dire que sur la barre actuelle après le compte d'incrémentation sera "0", et sur la nouvelle barre suivante (lorsque le premier décalage de 1 barre s'est produit après l'initialisation) il sera "1". Qu'en pensez-vous ? Peut-être que je ne pense pas du tout au bon endroit ?

Si c'est un indicateur, c'est suffisant

bool  ArraySetAsSeries(
   const void&  array[],    // массив по ссылке
   bool         flag        // true означает обратный порядок индексации
   );

à tous les tableaux et tampons de l'indicateur utilisé.

Alors la barre de zéro deviendra rates_total-1

ArraySetAsSeries - Операции с массивами - Справочник MQL4
ArraySetAsSeries - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArraySetAsSeries - Операции с массивами - Справочник MQL4
 
Nerd Trader #:
La situation est la suivante : la variable X stocke l'indice de la barre dans l'historique, nous savons que lorsqu'une nouvelle barre apparaît, il y a un décalage, et donc X pointe déjà vers une barre différente. Comment le réparer ? L'idée : à chaque nouvelle barre, nous augmentons le compteur (count++) et l'ajoutons à X. Ainsi, X pointera toujours vers la même barre, quel que soit le décalage. Mais il y a un problème - lorsque l'EA est initialisé, la première barre actuelle ne devrait pas être prise en compte. Je pense que cela peut être facilement résolu si le compte est initialement juste égal à -1. C'est-à-dire que sur la barre actuelle après le compte d'incrémentation sera "0", et sur la nouvelle barre suivante (lorsque le premier décalage de 1 barre s'est produit après l'initialisation) il sera "1". Qu'en pensez-vous ? Peut-être que je ne pense pas du tout au bon endroit ?
      datetime x=время нужного бара;
      int index=iBarShift(_Symbol,0,x);
 
MakarFX #:
Pourquoi se donner tant de mal ?
 
Alexey Viktorov #:
Pourquoi se donner tant de mal ?
C'est plus facile pour moi)
 
MakarFX #:
C'est plus facile pour moi)

Mais le processeur est plus lourd...

 
Alexey Viktorov #:

Mais le processeur est plus lourd...

Je ne sais pas quelles fonctions portent quelle charge. Y a-t-il un endroit où l'on peut lire sur ce sujet ?
 
Nerd Trader #:
La situation est la suivante : la variable X stocke l'indice de la barre dans l'historique, et nous savons que lorsqu'une nouvelle barre apparaît, elle est décalée et donc X pointe déjà vers une autre barre. Comment le réparer ? L'idée : à chaque nouvelle barre, nous augmentons le compteur (count++) et l'ajoutons à X. Ainsi, X pointera toujours vers la même barre, quel que soit le décalage. Mais il y a un problème - lorsque l'EA est initialisé, la première barre actuelle ne devrait pas être prise en compte. Je pense que cela peut être facilement résolu si le compte est initialement juste égal à -1. C'est-à-dire que sur la barre actuelle après le compte d'incrémentation sera "0", et sur la nouvelle barre suivante (lorsque le premier décalage de 1 barre s'est produit après l'initialisation) il sera "1". Qu'en pensez-vous ? Peut-être que je ne pense pas du tout au bon endroit ?

Pas là. Il n'y a rien dans X lors du chargement de l'EA/indicateur s'il est à l'intérieur du terminal, à moins qu'il ne s'agisse d'une intuition ou d'une variable externe ou globale à l'extérieur du terminal, donc quelque chose doit être écrit là d'abord. Ensuite, nous lisons simplement les changements du nombre total de barres (en tenant compte de l'apparition d'une nouvelle barre).

datetime BarTime ;

FlagNewBar=false;
if(BarTime!=iTime(NULL,0,0))
{
 BarTime=iTime(NULL,0,0);
 FlagNewBar=true;
}
if(FlagNewBar==true)
{
// И когда тру, делаем что нужно делать когда появился новый бар, 
//на следующем тике флаг нового бара будет ложь, так как БарТайм время все время существования нулевого бара будет равным
}
 

Salutations. Pouvez-vous me donner un indice ? Comment dans mt5 à l'initialisation ou au tick définir le test ?

Jusqu'à présent, je n'ai trouvé que OnTester(), qui est appelé juste avant OnDeinit().

 
@Alexey Viktorov @MakarFX intéressant, assez bonnes solutions. Merci.

@Valeriy Yastremskiy L'index est placé en X toujours dans OnInit(). Mon code ressemble à ceci :
last_time = iTime(NULL, 0, 0);

  if(last_time > bar.time_open){
    bar.time_open = last_time;
    coint++;//стартовое значение -1
  }
La condition avec FlagNewBar me semble redondante.