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

 
Aleksey Vyazmikin:

Вот допустим имеем

При этом знаем, что start_time должно быть 2018.04.28 23:00

Получается, что тут время не верное ?

Алексей, посмотрите мой пример. Я там построчно показал, как часовое время, которое Вы передаете, превращается в ближайшее время с текущего бара.

 
Не нашел объявления типа переменной limit. Зрение слабое
 
Алексей Тарабанов:
Не нашел объявления типа переменной limit. Зрение слабое

Пост 50, процедура OnCalculate

 
Sergey Savinkin:

Пост 50, процедура OnCalculate

Спасибо, но кто из них 50? Может, ссылкой подсобите? 

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

Спасибо, но кто из них 50? Может, ссылкой подсобите? 

https://www.mql5.com/ru/forum/262864/page5

Ссылка только на страницу. Там написано #50 в заголовке поста. Ваш #74 ))

В одном индикаторе появилась ошибка деления на ноль
В одном индикаторе появилась ошибка деления на ноль
  • 2018.07.04
  • www.mql5.com
Общее обсуждение: В одном индикаторе появилась ошибка деления на ноль
 
Спасибо
 
Sergey Savinkin:
У вас сначала написано limit=start_index-stop_index+1, то есть limit==1, а потом, где деление на 2 - limit=(int)(stop_time-start_time)/PeriodSeconds(_Period). Единица не прибавлена. Ноль делится на период.

Правильно, limit=start_index-stop_index+1 это при i>0 т.е. для расчета на истории, а limit=(int)(stop_time-start_time)/PeriodSeconds(_Period) расчет на текущем баре.

Да и дело то по сути в том, почему у нас время такое кривое - если у нас тайм фрейм час, то даты должны быть круглыми, как в начале так и в конце - в этом истинная проблема, что время бара на начальную дату каким то образом попадает не верное!!!

Возможно тут проблема

start_index=ArrayBsearch(Time,start_time);

Так как start_time приходит корректно в этот момент 

datetime start_time=rates[i].time;
 
Алексей, нет никакого "в конце". Это просто квантование. Ровно в 18:00 бар открылся, показал минимум и максимум и благополучно закрылся, в ту же секунду. 
 
Алексей Тарабанов:
Алексей, нет никакого "в конце". Это просто квантование. Ровно в 18:00 бар открылся, показал минимум и максимум и благополучно закрылся, в ту же секунду. 

Смотрите, бар у нас открылся в 18:00, значит начальное время (start_time) будет 18:00, а конечное (stop_time) предполагаемое время окончания бара для ТФ час - 19:00. Таким образом и индекс между ними будет разный на таймфрейме M1. А в коде бывает, что начальный и конечный индекс совпадает, что не верно.

 
Aleksey Vyazmikin:

Правильно, limit=start_index-stop_index+1 это при i>0 т.е. для расчета на истории, а limit=(int)(stop_time-start_time)/PeriodSeconds(_Period) расчет на текущем баре.

Да и дело то по сути в том, почему у нас время такое кривое - если у нас тайм фрейм час, то даты должны быть круглыми, как в начале так и в конце - в этом истинная проблема, что время бара на начальную дату каким то образом попадает не верное!!!

Возможно тут проблема

Так как start_time приходит корректно в этот момент 

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

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