Un errore di divisione per zero è apparso in un indicatore - pagina 9

 
Sergey Savinkin:

E perché saranno rotondi se prima si fa CopyRate dal timeframe orario (si ottengono i numeri rotondi), poi si passa alla proceduraCreateFigure il tempo del timeframe corrente (time, che diventa Time), e poi si cerca l'indice per il timeframe corrente?start_index=ArrayBsearch(Time,start_time);

Esatto, stiamo cercando un tempo rotondo su un tempo non rotondo nell'array... Cioè cercare una barra su un timeframe di un minuto in cui il tempo corrispondeva all'ora di apertura dell'ora.

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

Le emozioni sono buone!

Ma forse ci sarà qualche pensiero sostanziale?

 

Ecco quello che riguarda il tempo per esempio - ho aggiunto due variabili per risparmiare 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);

Otteniamo una stampa come questa

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

Cioè come se in una situazione normale/stazionaria tutto fosse corretto.

Puoi vedere che alle 14:00 c'è una correzione del tempo di apertura della barra sul minuto TF alle 14:05 - tempo effettivo della prima apparizione della barra su TF M1.
 
Aleksey Vyazmikin:

Le emozioni sono buone!

Ma forse ci sarà qualche pensiero sostanziale?

L'ora è la stessa, quindi limite=0. Volevo farlo io stesso.

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

L'ora è la stessa, quindi limite=0. Volevo farlo io stesso.

E se l'ora è la stessa? Dopo tutto, ci sono 60 barre in quest'ora su TF M1!

E in caso di coincidenza tra la TF corrente e quella calcolata c'è una protezione e non ci saranno divisioni per zero in questa situazione

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

Ti stai nascondendo?

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

???