Последовательность выполнение Init() и DeInit() - страница 28

 
Alexey Viktorov:
Количество окон понятно, а количество МА с разными параметрами как определить?
Нужно запросить и парсить параметры индикатора.
 
Выкрутился
int GetShortNames( string &ShortNames[], const long Chart_ID = 0, const int SubWindow = 0 )
{    
  const int Total = ChartIndicatorsTotal(Chart_ID, SubWindow);

  ArrayResize(ShortNames, Total);
  
  for (int i = 0; i < Total; i++)
    ShortNames[i] = ChartIndicatorName(Chart_ID, SubWindow, i);
    
  return(Total);

}

// Возвращает свое "Короткое имя" - ShortName
string GetMyShortName( void )
{  
  string Res = "";
  
  const int SubWindow = ChartWindowFind();
  
  string ShortNames[];

  GetShortNames(ShortNames, 0, SubWindow);
  
  const string TmpShortName = __FUNCSIG__ + (string)MathRand();

  IndicatorSetString(INDICATOR_SHORTNAME, TmpShortName);    

  string NewShortNames[];

  const int Total = GetShortNames(NewShortNames, 0, SubWindow);
  
  for (int i = 0; i < Total; i++)
    if (NewShortNames[i] == TmpShortName)
    {
      Res = ShortNames[i];
      
      IndicatorSetString(INDICATOR_SHORTNAME, Res);
      
      break;
    }
  
  return(Res);
}

// Возвращает свой хэндл
int GetMyHandle( void )
{
  const string ShortName = GetMyShortName();
  
  const string TmpShortName = __FUNCSIG__ + (string)MathRand();  
  
  IndicatorSetString(INDICATOR_SHORTNAME, TmpShortName);

  const int Res = ChartIndicatorGet(0, ChartWindowFind(), TmpShortName);
  
  IndicatorSetString(INDICATOR_SHORTNAME, ShortName);  

  return(Res);
}

Очень важно ДО OnDeinit сделать IndicatorRelease своего хэндла.

Интересно, что после каждого такого IndicatorRelease хэндл индикатора увеличивается на единицу.

 
fxsaber:
Выкрутился

Очень важно ДО OnDeinit сделать IndicatorRelease своего хэндла.

Интересно, что после каждого такого IndicatorRelease хэндл индикатора увеличивается на единицу.

IndicatorRelease уже работает в тестере? Спрашиваю на всякий случай - раньше не работал.
 
Andrey Dik:
IndicatorRelease уже работает в тестере? Спрашиваю на всякий случай - раньше не работал.
Не проверял.
 
fxsaber:
Не проверял.
Я это к тому сказал, что отсутствие возможности выгрузки индикатора из памяти в тестере приведёт к подвешиванию системы, если, например, делать оптимизацию индикаторов своими средствами на "лету". Или, например. динамическое изменение параметров индикатора так же приведёт к переполнению памяти, так как будет создаваться каждый раз новый хендл а старый не удаляется в тестере. 
 
https://www.mql5.com/ru/code/18138
Init_Sync
Init_Sync
  • 2017.04.17
  • fxsaber
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов
 
хорошая тема 
 
Alexberrr:
хорошая тема 

Нужная и актуальная в данный момент. Я сам долго искал причину, думал косяк в моём коде, благодаря этой теме проблема была решена.

Спасибо всем!

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