#property indicator_type1 DRAW_COLOR_CANDLES - страница 3

 
wtvirtual:

Совершенно верно. Проблему решил чуть иначе, но суть та же.

Оказалось достаточным в OnDeinit() инициализировать пустыми значениями 4 "свечных" массива. Грязь, соответственно, исчезла. 

Лучше так

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int i,limit;
   if(_Show_HA)
     {

...

      return(rates_total);
     }
   return(0);
  }
 
stringo:

Лучше так

Нет, так не выйдет, поскольку после блока расчётов свечных массивов следуют другие блоки других расчётов, которые начинаются с такой строки:

if( prev_calculated == rates_total ) return(rates_total);

То есть расчёт ведётся только один раз при формировании новой свечи. Удаление остаточной и произвольной грязи из свечных буферов в функции деинициализации решает много проблем. Особенно после "старого" MQL4 :)

 
stringo:
В случае отказа от расчётов в OnCalculate достаточно вернуть 0, а не rates_total. И не надо ничего занулять
Вообще красота тогда
 
Slawa:
В случае отказа от расчётов в OnCalculate достаточно вернуть 0, а не rates_total. И не надо ничего занулять
В случае возврата нуля идет принудительное обнуление всех индикаторных буферов? Что-то в справке такого не нашел.
 
fxsaber:
В случае возврата нуля идет принудительное обнуление всех индикаторных буферов? Что-то в справке такого не нашел.
fxsaber:
В случае возврата нуля идет принудительное обнуление всех индикаторных буферов? Что-то в справке такого не нашел.
Нет. Индикаторные буфера принудительно не обнуляются. Это же можно проверить самостоятельно
 
Slawa:
Нет. Индикаторные буфера принудительно не обнуляются. Это же можно проверить самостоятельно
Вот и я не понял, что Вы имели в виду тогда.
 

Да просто в основном цикле, если в элемент буфер отправляете значения, то отправляете, а если не отправляете, то отправлять туда EMPTY_VALUE или 0. 

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

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