Некорректная инициализация индикаторов в визуальном тестере

 

Если делаю инициализацию индикаторов в OnInit() { } эксперта, то в визуальном тестере индикатор обычно не появляется и не отрисовывается.

При этом в логе инициализация прошла, handle получен.  Такое ощущение, что в визуальном режиме тестер не успевает что-то сделать и индикатор не цепляется к графику.

Если делаю инициализацию индикаторов в OnTick() { } эксперта, то проблема пропадает, однако это порождает лишнюю писанину, проверки и прочее.

Если раскомментить IndicatorInitialization() в OnTick и закомментировать в OnInit, то начинает работать. 

int  TicksTesterIndicatorHandle = INVALID_HANDLE;
bool InitComplite=false;
int OnInit()
  {
   IndicatorInitialization();
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   IndicatorRelease(TicksTesterIndicatorHandle);
  }

void OnTick()
  {
//if(!InitComplite)
//  {
//   IndicatorInitialization();
//  }
  }
//+------------------------------------------------------------------+
bool IndicatorInitialization()
  {
//---Получить хэндл индикатора TicksTesterIndicator
   TicksTesterIndicatorHandle=iCustom(NULL, _Period, "OnInit_TestIndicator");

//--- Нужно проверить, не были ли возвращены значения Invalid Handle
   if(TicksTesterIndicatorHandle<0)
     {
      Print("Ошибка при создании индикатора TicksTesterIndicator - номер ошибки: ",GetLastError(),"!!!");
      return(false);
     }
   else
     {
      Print("TicksTesterIndicator инициализирован, хэндл: ", TicksTesterIndicatorHandle);
      ArraySetAsSeries(Buf, true);
      InitComplite=true;
     }
   return(true);
  }


MT5 v5 build 2981

 

@Slava, поможет воспроизвести проблему?

 

Мы работаем над этим.

Как только станет понятно, в чём дело, исправим

 
Была такая же проблема. У меня в OnInit() эксперта стояла задержка на секунду, и индикаторы не появлялись. Убрал задержку - заработало.
Вообще, с инициализацией в OnInit() косяков было много. Я запарился с ними бороться и просто перенес в OnTick().
 
secret:
Была такая же проблема. У меня в OnInit() эксперта стояла задержка на секунду, и индикаторы не появлялись. Убрал задержку - заработало.
Вообще, с инициализацией в OnInit() косяков было много. Я запарился с ними бороться и просто перенес в OnTick().
Slava:

Мы работаем над этим.

Как только станет понятно, в чём дело, исправим

Да, я прочитал где-то на форуме такое решение и сделал так же, но увы это не решает всех проблем. Например, сейчас использую в коде
ChartGetInteger(0, CHART_WINDOWS_TOTAL, 0);
, так вот с запуском при средней скорости воспроизведения всё работает, а с запуском при максимальной скорости воспроизведения функция выдает только окно графика, без подокон индикаторов, видимо вызывается до появления подокна. Нужно чтобы тестер дожидался появления и прорисовки окон что ли, а там видать идут параллельные процессы независимо друг от друга.
 
Slava:

Мы работаем над этим.

Как только станет понятно, в чём дело, исправим

И тишина...

Ох и не хочется переносить расчет индикаторов в тело эксперта, но наверное придется смириться и заняться очередным развитием своих навыков по ходу переделки, поскольку эксперты - это:

1. Проблемы с инициализацией

2. Проблемы с "не все данные рассчитаны" и нельзя принудительно вызвать OnCalculate() для пересчета

3. Проблемы с обменом данными между индикаторами, что приводит в том числе к необходимости подключения нескольких одинаковых индикаторов с одинаковыми настройками.

4. Проблемы при оптимизации экспертов (не писал примеры на форум, т.к. нет результата от этой темы и предыдущие мои замечания касательно дисплеев высокого разрешения проигнорированы)

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

 
Sunriser #:

И тишина...

Ох и не хочется переносить расчет индикаторов в тело эксперта, но наверное придется смириться и заняться очередным развитием своих навыков по ходу переделки, поскольку эксперты - это:

1. Проблемы с инициализацией

2. Проблемы с "не все данные рассчитаны" и нельзя принудительно вызвать OnCalculate() для пересчета

3. Проблемы с обменом данными между индикаторами, что приводит в том числе к необходимости подключения нескольких одинаковых индикаторов с одинаковыми настройками.

4. Проблемы при оптимизации экспертов (не писал примеры на форум, т.к. нет результата от этой темы и предыдущие мои замечания касательно дисплеев высокого разрешения проигнорированы)

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

Я Вам так скажу, перенос логики индикатора в тело эксперта решит ВСЕ Ваши проблемы. Я как и Вы боролся с этими индикаторами и всё равно то тут вылетит то тут отвалится в итоге собрался и запихнул все индикаторы в эксперт и проблем с их расчётом не стало, поскольку эксперт рассчитывается в многопоточном режиме, а индикатор в однопоточном и если индюк написан криво или имеет сложную логику расчёта то в какой то момент он может просто не успеть посчитать всё что нужно. Как мне объяснили это давным давно, так что переносите и это избавит от всех проблем.  Я перестал использовать индикаторы и очень рад этому!
 
Sunriser:

Если делаю инициализацию индикаторов в OnInit() { } эксперта, то в визуальном тестере индикатор обычно не появляется и не отрисовывается.

При этом в логе инициализация прошла, handle получен.  Такое ощущение, что в визуальном режиме тестер не успевает что-то сделать и индикатор не цепляется к графику.

Если делаю инициализацию индикаторов в OnTick() { } эксперта, то проблема пропадает, однако это порождает лишнюю писанину, проверки и прочее.

Если раскомментить IndicatorInitialization() в OnTick и закомментировать в OnInit, то начинает работать. 


MT5 v5 build 2981


Давно заметил такое........ причём через раз - то успевает - то не успевает........ смирился тем что просто перезапускаю тест...

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