Почему происходит мерцание индикаторов (линий, стрелок, гистограмм) в биржевом терминале MT5? - страница 7

 
вообщем не знаю поможет или нет, но я решил эту проблему так: в коде где цикл типа for(int i=rates_total-prev_calculate; i>=0;i--) заменил rates_total-prev_calculate на числовое значение 1500 и мерцание прекратилось!
 
Dmitry Melnichenko: вообщем не знаю поможет или нет, но я решил эту проблему так: в коде где цикл типа for (int i=rates_total-prev_calculate; i>=0;i--) заменил rates_total-prev_calculate на числовое значение 1500 и мерцание прекратилось!

Странно, поступив так, Вы просто ограничили кол-во обрабатываемых баров в цикле значением 1500, т.е. Вы заметили, что если резко ограничить кол-во баров (на порядок, а то и на 2 порядка) для обработки, то мерцание исчезает. Возможно в этом что-то есть, надо будет проверить.

Тогда функция OnCalculate() из первого примере в этой ветке будет выглядеть так:

//+------------------------------------------------------------------+
//| Custom indicator iteration function
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const datetime& time[],     // Time 
                 const double&   open[],     // Open 
                 const double&   high[],     // High 
                 const double&   low [],     // Low 
                 const double&   close[],    // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& real_volume[],  // Real Volume 
                 const int&  spread[])       // Spread 
{
// int N=rates_total-prev_calculated; if (N>MAX_PERIOD) N-=MAX_PERIOD;

   for (int i=1500; i>0 && !IsStopped(); i--) {
      double ma_fast=getMA(ma_fast_handle, i);
      double ma_slow=getMA(ma_slow_handle, i);;
      aom=ma_fast-ma_slow;
      if (aom>last_aom) {aUP[i]=aom; aDN[i]=EMPTY_VALUE;}
      else              {aDN[i]=aom; aUP[i]=EMPTY_VALUE;}
      last_aom=aom;
   }
   aUP[0]=EMPTY_VALUE; aDN[0]=EMPTY_VALUE;
   return(rates_total);
}

Но это не решает проблему в целом, если нужно отобразить индикатор на всем множестве баров.

 

Видимо терминал не отправляет брокеру подтверждение, что история котировок изменилась. ( может антивирус сопротивляется ).

А брокер (сервер брокера) шлёт и шлёт, "надо изменить историю котировок".

Или ваш комьпьютер слаб для MT5, чтобы успеть изменить историю котировок до того как брокер пришлёт новые котировки истории.

 
Sergey Chalyshev:

Видимо терминал не отправляет брокеру подтверждение, что история котировок изменилась. ( может антивирус сопротивляется ).

А брокер (сервер брокера) шлёт и шлёт, "надо изменить историю котировок".

Или ваш комьпьютер слаб, чтобы успеть изменить историю котировок до того как брокер пришлёт новые котировки истории.

 

Мерцание ЗЗ происходит и в выходные дни.
 
-Aleks-:

 

Мерцание ЗЗ происходит и в выходные дни.

От брокера зависит и его настроек сервера. Демо сервер MQL, например, через 3 часа историю переписывает.

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


 
Sergey Chalyshev:

От брокера зависит и его настроек сервера. Демо сервер MQL, например, через 3 часа историю переписывает.

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

 

У меня брокер "Открытие" - не демо счет.

Разработчики молчат, как партизаны.

 
-Aleks-:

 

У меня брокер "Открытие" - не демо счет.

Разработчики молчат, как партизаны.


ChartRedraw

Вызывает принудительную перерисовку указанного графика.

Есть в коде?

 
Sergey Chalyshev:

ChartRedraw

Вызывает принудительную перерисовку указанного графика.

Есть в коде?

 

Нет.
 
-Aleks-:

 

Нет.

Конкретно этот индикатор глючит? Поковыряюсь на досуге.

 
Sergey Chalyshev:

Конкретно этот индикатор глючит? Поковыряюсь на досуге.

 

Я говорю про стандартный индикатор ZigZag из MT5.