В одном индикаторе появилась ошибка деления на ноль - страница 9

 
Sergey Savinkin:

И с какого они у Вас будут круглыми, если Вы сначала делаете CopyRates с часового таймфрейма (получаются круглые цифры), потом передаете в процедуру CreateFigure время с текущего таймфрейма (time, которое превращается в Time), а потом ищете индекс уже по времени текущего таймфрейма? start_index=ArrayBsearch(Time,start_time);

Так правильно, ищем в массиве соответствие круглому времени на не круглом... Т.е. ищем, бар на минутном тайм фрейме на котором время соответствовало времени открытия часа.

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

Эмоции - хорошо!

Но может будут мысли по существу!?

 

Вот что по времени к примеру - добавил две переменных для сохранения времени

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

Получаем такой принт

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

Т.е. как бы в обычной/стационарной ситуации всё корректно.

Видно, как в 14:00 происходит корректировка времени открытия бара на минутном ТФ до 14:05 - фактического времени появления первого бара на ТФ М1.
 
Aleksey Vyazmikin:

Эмоции - хорошо!

Но может будут мысли по существу!?

Час один и тот-же, поэтому limit=0. Сам хотел. 

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

Час один и тот-же, поэтому limit=0. Сам хотел. 

И что, что час один и тот же? Ведь в этом часу 60 баров на TF M1!

А в случае совпадения текущего TF и расчетного есть защита и никаких там делений на ноль не будет при таком раскладе

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

Шифруетесь!?

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

???

Причина обращения: