Une erreur de division par zéro est apparue dans un indicateur - page 9

 
Sergey Savinkin:

Et pourquoi seront-ils ronds si vous faites d'abord des CopyRates à partir de l'heure (les nombres ronds sont obtenus), puis passez à la procédureCreateFigure le temps de l'heure actuelle (time, qui se transforme en Time), et ensuite cherchez l'index par l'heure actuelle ?start_index=ArrayBsearch(Time,start_time);

C'est ça, on cherche un temps rond sur un temps non rond dans le tableau... C'est à dire rechercher, sur une échelle de temps en minutes, une barre dont l'heure correspond à l'heure d'ouverture de l'heure.

 
О !
 
Алексей Тарабанов:
О !

Les émotions sont bonnes !

Mais peut-être y aura-t-il des réflexions de fond ?

 

Voici ce qu'il en est du temps par exemple - j'ai ajouté deux variables pour gagner du temps

void CreateFigure(int i,const datetime &Time[],const double &Open[],const double &High[],const double &Low[],const double &Close[],MqlRates &rates[])
  {
   datetime start_time=rates[i].time;
   datetime stop_time=(start_time+PeriodSeconds(TimeFrames));
   datetime start_timeA=start_time;
   
//---
   int start_index,stop_index,limit;
   datetime vertical_line_time;
//---
   start_index=ArrayBsearch(Time,start_time);
   datetime start_timeB=Time[start_index];   
   if(Time[start_index]<start_time) start_index=(start_index>0?start_index-1:start_index);
   start_time=Time[start_index];
   Print("start_timeA=", start_timeA, " start_timeB=",start_timeB," start_time=",start_time);

Nous obtenons une impression comme celle-ci

2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 12:00:00 start_timeB=2018.07.04 12:00:00 start_time=2018.07.04 12:00:00
2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 13:00:00 start_timeB=2018.07.04 13:00:00 start_time=2018.07.04 13:00:00
2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 14:00:00 start_timeB=2018.07.04 13:59:00 start_time=2018.07.04 14:05:00
2018.07.05 00:39:30.465 IndDrafter_Test (Si-9.18,M1)    start_timeA=2018.07.04 15:00:00 start_timeB=2018.07.04 15:00:00 start_time=2018.07.04 15:00:00

C'est-à-dire comme si, dans une situation normale/stationnaire, tout était correct.

Vous pouvez voir qu'à 14:00 il y a une correction de l'heure d'ouverture de la barre sur le TF minute à 14:05 - heure réelle de l'apparition de la première barre sur le TF M1.
 
Aleksey Vyazmikin:

Les émotions sont bonnes !

Mais peut-être y aura-t-il des réflexions de fond ?

L'heure est la même, donc limite=0. Je voulais le faire moi-même.

 
Алексей Тарабанов:

L'heure est la même, donc limite=0. Je voulais le faire moi-même.

Et si l'heure est la même ? Après tout, il y a 60 barres dans cette heure sur TF M1 !

Et en cas de coïncidence entre le TF actuel et le TF calculé, il existe une protection et il n'y aura pas de divisions par zéro dans cette situation.

if(_Period>=TimeFrames) return(0);
 
Dormir
 
Алексей Тарабанов:
Dormir

Tu te caches ?

 
Dormir
 
Алексей Тарабанов:
Dormir

? ??