Uma divisão por erro zero apareceu em um indicador - página 9

 
Sergey Savinkin:

E por que eles serão redondos se você primeiro fizer CopyRates a partir do horário (os números redondos são obtidos), depois passe para o procedimentoCreateFigure the time from the current timeeframe (tempo, que se transforma em Tempo), e depois procure o índice pelo horário atual?start_index=ArrayBsearch(Time,start_time);

Isso mesmo, estamos procurando um tempo redondo em um tempo não redondo na matriz. Isto é, procurando uma barra em um minuto de tempo em que o tempo correspondia ao horário de abertura da hora.

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

Emoções são boas!

Mas talvez haja algumas reflexões substantivas!?

 

Eis o que acontece com o tempo, por exemplo - acrescentei duas variáveis para economizar tempo

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);

Recebemos uma impressão como esta

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

Isto é, como se em uma situação normal/estacionária tudo estivesse correto.

Você pode ver que às 14:00 horas há correção do tempo de abertura do bar no minuto TF para 14:05 - hora real do primeiro bar que aparece na TF M1.
 
Aleksey Vyazmikin:

Emoções são boas!

Mas talvez haja algumas reflexões substantivas!?

A hora é a mesma, portanto limite=0. Eu mesmo quis fazer isso.

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

A hora é a mesma, portanto limite=0. Eu mesmo quis fazer isso.

Então e se a hora for a mesma? Afinal, há 60 barras nesta hora na TF M1!

E em caso de coincidência do TF atual e do calculado há uma proteção e não haverá divisões por zero nesta situação

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

Você está se escondendo!?

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

???

Razão: