Seqüência de execução Init() e DeInit() - página 28

 
Alexey Viktorov:
O número de janelas é claro, mas o número de MA com parâmetros diferentes como determinar?
Você precisa consultar e analisar os parâmetros indicadores.
 
Descobrimos
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);
}

É muito importante fazer um IndicatorRelease de seu manípulo ANTES DE DEINITAR.

Curiosamente, após cada um desses IndicatorRelease, o cabo indicador é incrementado por um.

 
fxsaber:
Descobrimos

É muito importante fazer um IndicatorRelease de seu manípulo ANTES DE DEINITAR.

Curiosamente, após cada um desses IndicatorRelease, o cabo indicador é incrementado por um.

IndicatorRelease já trabalhando no testador? Só por precaução - não funcionava antes.
 
Andrey Dik:
O IndicatorRelease já está trabalhando no testador? Só por precaução - não funcionava antes.
Não o testou.
 
fxsaber:
Não o testei.
Quero dizer que a ausência da possibilidade de descarregar um indicador da memória no testador levará à suspensão do sistema, se, por exemplo, você otimizar os indicadores por seus próprios meios em tempo real. Ou, por exemplo, a mudança dinâmica dos parâmetros indicadores levará ao transbordamento da memória, pois toda vez que um novo cabo for criado e o antigo não será apagado no testador.
 
https://www.mql5.com/ru/code/18138
Init_Sync
Init_Sync
  • 2017.04.17
  • fxsaber
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов
 
bom tema
 
Alexberrr:
Bom tema

Um necessário e relevante no momento. Eu mesmo procurei a causa por muito tempo, pensei que fosse um bug no meu código, graças a este tópico o problema foi resolvido.

Obrigado a todos vocês!