Виснет терминал и другие траблемы. Помогите

 

Перевел сверхсекретный индикатор из mql4 на mql5. Но по какой-то причине он нестабильно работает (на мт5). Один раз накинул - работает нормально, второй - плохо. И вот так вот иногда нормально, иногда плохо.

На видео видно, что когда первый раз накинул, при изменении параметров он как-то криво отображает закрашивание некоторых свеч в другие цвета. Закрашивается с помощью DRAW_COLOR_HISTOGRAM2 (красным и синим, на видео мало заметно) по open[] и close[], которые OnCalculate(). Предварительно, для удобства, эти массивы устанавливаются как AsSeries:

  if(firstCount){
      ArraySetAsSeries(open,true);
      ArraySetAsSeries(close,true);
      ArraySetAsSeries(time,true);
  }

Второй раз накинул (на видео пример) - все работает нормально, третий - тоже нормально. Иногда при добавлении зиг-зага терминал виснет наглухо (или при удалении). Вот это самое неприятное...

Индикатор добавляет другие индикаторы (в OnInit) по хэндлу через ChartIndicatorAdd():

   ResetLastError();
   if((ZZ_handle=iCustom(NULL,PERIOD_CURRENT,"Examples\\ZigZag",ZZDepth,ZZDeviation,ZZBackstep))==INVALID_HANDLE){
      PrintFormat("ZZ handle troubles, err code: %d", GetLastError());
      return (INIT_FAILED);
   }
   if((slowMovingHandle=iMA(NULL, PERIOD_CURRENT, SlowMovingPeriod, 0, MA_Method, MA_Apply_To))==INVALID_HANDLE){
      PrintFormat("Slow moving handle troubles");
      return (INIT_FAILED);
   } 
   if((fastMovingHandle=iMA(NULL, PERIOD_CURRENT, FastMovingPeriod, 0, MA_Method, MA_Apply_To))==INVALID_HANDLE){
      PrintFormat("fast moving handle troubles");
      return (INIT_FAILED);
   }
//////////////////////отображение  мувингов и зиг-зага/////////////////////////////////      

        ResetLastError();
        if(!ChartIndicatorAdd(NULL,0,slowMovingHandle)){
            PrintFormat("Cant add slowMoving, err code: %d", GetLastError());
        }
        ResetLastError();
        if(!ChartIndicatorAdd(NULL,0,fastMovingHandle)){
            PrintFormat("Cant add fastMoving, err code: %d", GetLastError());
        }
     
       if(ShowZigZaggio){
        ResetLastError();
        if(!ChartIndicatorAdd(NULL,0,ZZ_handle)){
            PrintFormat("Cant add ZZ, err code: %d", GetLastError());
        }  
       } 

При удалении в Deinit происходит удаление всех программно добавленных индикаторов:

      int indicatorsTotal=ChartIndicatorsTotal(NULL,0);
      string indicators[55];
      for(int i=0; i<indicatorsTotal; i++){
         indicators[i]=ChartIndicatorName(NULL,0,i);
      }
      for(int i=0; i<indicatorsTotal; i++){
         if(indicators[i]==_shortName) continue;               //текущий не удалять
         if(!ChartIndicatorDelete(NULL,0,indicators[i])){
               PrintFormat("Cant delete indicator, err: %d", GetLastError());
            }
      }

а затем освобождение:

if(ZZ_handle!=INVALID_HANDLE) 
         IndicatorRelease(ZZ_handle); 
      if(slowMovingHandle!=INVALID_HANDLE) 
         IndicatorRelease(slowMovingHandle); 
      if(fastMovingHandle!=INVALID_HANDLE) 
         IndicatorRelease(fastMovingHandle);

В чем могут быть причины? Как решить эти проблемы?


 
Yevhenii Levchenko:

Перевел сверхсекретный индикатор из mql4 на mql5. Но по какой-то причине он нестабильно работает (на мт5). Один раз накинул - работает нормально, второй - плохо. И вот так вот иногда нормально, иногда плохо.

На видео видно, что когда первый раз накинул, при изменении параметров он как-то криво отображает закрашивание некоторых свеч в другие цвета. Закрашивается с помощью DRAW_COLOR_HISTOGRAM2 (красным и синим, на видео мало заметно) по open[] и close[], которые OnCalculate(). Предварительно, для удобства, эти массивы устанавливаются как AsSeries:

Второй раз накинул (на видео пример) - все работает нормально, третий - тоже нормально. Иногда при добавлении зиг-зага терминал виснет наглухо (или при удалении). Вот это самое неприятное...

Индикатор добавляет другие индикаторы (в OnInit) по хэндлу через ChartIndicatorAdd():

При удалении в Deinit происходит удаление всех программно добавленных индикаторов:

а затем освобождение:


В чем могут быть причины? Как решить эти проблемы?

ArrayInitialize(buffer1,EMPTY_VALUE);
 
Vitaly Muzichenko:
В справочнике по этим буферам пишется, что
Стиль DRAW_COLOR_HISTOGRAM2 можно использовать как в отдельном подокне графика, так и в главном окне. Для пустых значений отрисовка не производится, 
все значения в индикаторных буферах нужно устанавливать явным образом. Инициализация буферов пустым значением не производится.
Я попробовал инициализировать так как вы говорите... пару раз накинул, прошуршал настройки - вроде работает корректно (правда я не знаю, это из за того, что он иногда работает нормально или из за того, что это правильное решение).

А с зиг-загом что, есть мысли? Почему терминал виснет при добавлении или удалении?
 
Yevhenii Levchenko:
В справочнике по этим буферам пишется, что Я попробовал инициализировать так как вы говорите... пару раз накинул, прошуршал настройки - вроде работает корректно (правда я не знаю, это из за того, что он иногда работает нормально или из за того, что это правильное решение).

А с зиг-загом что, есть мысли? Почему терминал виснет при добавлении или удалении?

Нет мыслей)

 
Vitaly Muzichenko:

Нет мыслей)

Спасибо все равно! :)

ArrayInitialize() не работает... Так же нестабильно - то корректно работает, то не...

 
Yevhenii Levchenko:

Спасибо все равно! :)

ArrayInitialize() не работает... Так же нестабильно - то корректно работает, то не...

Проверить индикаторы по отдельности вешают или нет?. Возможно в коде где-то бесконечный цикл?
 
Aleksey Mavrin:
Проверить индикаторы по отдельности вешают или нет?. Возможно в коде где-то бесконечный цикл?

Бесконечных циклов нет... код такой же как в мт4... там работает нормально. В мт4 другие проблемы - там нельзя программно добавлять индикаторы. Просто копирую буферы там (с мувингами отлично получается, а с зиг-загом не очень). Но это не так важно...

Что значит:

Aleksey Mavrin:
Проверить индикаторы по отдельности вешают или нет?

?

Выше код из OnInit есть, где добавляются индикаторы. Поочередно вроде как...

 

Вот как такое возможно? По графику видно, что гистограммы ограничиваются мувингами. В коде нигде такого не прописано! Вообще никак в коде мувинги и гистограммы не связаны... Гистограммы строятся только по open и close...

Если снять и накинуть опять, отрисовывает нормально.


 
Перевожу. По отдельности индикаторы делают так чтобы терминал зависал?
 
Aleksey Mavrin:
Перевожу. По отдельности индикаторы делают так чтобы терминал зависал?

Мувинги добавляются без условий (добавляются всегда без проблем), а зиг-заг опционально. Иногда при включении опции добавления зиг-зага терминал виснет. Иногда это происходит, когда отключать опцию отображения зиг-зага...

 
Yevhenii Levchenko:

Вот как такое возможно? По графику видно, что гистограммы ограничиваются мувингами. В коде нигде такого не прописано! Вообще никак в коде мувинги и гистограммы не связаны... Гистограммы строятся только по open и close...

Если снять и накинуть опять, отрисовывает нормально.


Не правильно написан индикатор.
Причина обращения: