Кто виноват и как решить проблему iBars(...

 

Всем доброго!

Пользовался самописным индикатором и даже не предполагал что могут возникнуть проблемы там где ее просто не должно быть.

И так в индикаторе есть такая проверка:

if(BarsOfHistory > _Bars - 2 || BarsOfHistory > rates_total - 2){
         Alert("No memory for history data. TimeFrames(",TimeFrames,"). BarsOfHistory is very huge! _Bars: ",_Bars,"; rates_total: ",rates_total);
         return(rates_total);
      }

Она иногда срабатывала если загружаемый инструмент был открыт впервые и по нему еще не прогрузилась история, тут все гуд и я с этим мерился.

Все это работало с стандартными инструментами форекса и казалось бы, ничего печального не должно быть с иными инструментами, а нет....

В общем прикрепил индикатор на XAUUSD и тут выявился неприятный баг или фича, чтобы это ни было оно мешает работе индикатора. И так сам чарт выглядит вполне здоровым и листая его, могу уйти глубоко в историю, но индикатор выдает следующее сообщение:

2017.04.07 08:08:34.512 ХХХХХ(v1.16) XAUUSD,H4: Alert: No memory for history data. TimeFrames(1440). BarsOfHistory is very huge! _Bars: 2048; rates_total: 2077

Как видите функция iBars и rates_total  возвращают значения не более 2077 , т.е. эта вся доступная глубина истории..... Но ведь график прорисовывается полностью, как же тут быть?



 

Выведите на принт все переменные, которые учавствуют в условии проверки.
Тут скорее проблема со значением BarsOfHistory 

 
Sergey Dzyublik:

Выведите на принт все переменные, которые учавствуют в условии проверки.
Тут скорее проблема со значением BarsOfHistory 


)))), это условие if(BarsOfHistory > _Bars - 2 || BarsOfHistory > rates_total - 2), а так же результаты Bars: 2048; rates_total: 2077 говорит о чем?

О том что BarsOfHistory более 2077 , лично в данном примере данное значение было 5000 , повторю еще раз, индикатор работает без проблем на всех форекс инструментах(как минимум на валютных).

Ниже чарт, как видите визуально он выглядит здоровым, т.е. бары есть ))), но программно я получаю иную информацию.

 

Да мне *** на выводимые значения.
Если вы пишете условие, то проверяйте все пути влияния на это условие.

В данном случае, предположительно, при первом проходе история еще не прогруженна, или ее не достаточно.
Скорее всего это кривизна кода, а не проблема с валютной парой.

Установите ваш индикатор на любой чарт.
И перекиньте drag-and-drop из обзора рынка на чарт ту валютную пару, которую ранее ни когда не открывали.
Как результат получите то же сообщение.

 

нужно делать проверку 

rates_total-prev_calculated>1

и если баров, вдруг, стало больше, то полная инициализация и перерасчет с нуля...