Secuencia de ejecución de Init() y DeInit() - página 28

 
Alexey Viktorov:
El número de ventanas está claro, pero el número de MA con diferentes parámetros ¿cómo determinarlo?
Es necesario consultar y analizar los parámetros del indicador.
 
Lo he descubierto
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);
}

Es muy importante hacer un IndicatorRelease de su mango ANTES de OnDeinit.

Curiosamente, después de cada IndicatorRelease, el manejador del indicador se incrementa en uno.

 
fxsaber:
Lo he descubierto

Es muy importante hacer un IndicatorRelease de su mango ANTES de OnDeinit.

Curiosamente, después de cada IndicatorRelease, el manejador del indicador se incrementa en uno.

¿IndicatorRelease ya funciona en el probador? Por si acaso, antes no funcionaba.
 
Andrey Dik:
¿Funciona ya IndicatorRelease en el probador? Por si acaso, antes no funcionaba.
No lo he probado.
 
fxsaber:
No lo he probado.
Me refiero a que la ausencia de la posibilidad de descargar un indicador de la memoria en el probador conducirá a la suspensión del sistema, si, por ejemplo, usted optimiza los indicadores por sus propios medios sobre la marcha. O, por ejemplo, cambiar los parámetros del indicador de forma dinámica provocará un desbordamiento de la memoria, ya que cada vez se creará un nuevo manejador y el anterior no se borrará en el probador.
 
https://www.mql5.com/ru/code/18138
Init_Sync
Init_Sync
  • 2017.04.17
  • fxsaber
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов
 
buen tema
 
Alexberrr:
Buen tema

Una necesaria y relevante en este momento. Yo mismo estuve buscando la causa durante mucho tiempo, pensé que era un error en mi código, gracias a este hilo se ha solucionado el problema.

Gracias a todos.

Razón de la queja: