Sequenza di esecuzione di Init() e DeInit() - pagina 28

[Eliminato]  
Alexey Viktorov:
Il numero di finestre è chiaro, ma il numero di MA con diversi parametri come si determina?
È necessario interrogare e analizzare i parametri dell'indicatore.
 
L'ho capito
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);
}

È molto importante fare un IndicatorRelease del suo manico PRIMA di OnDeinit.

È interessante notare che dopo ogni IndicatorRelease, la maniglia dell'indicatore viene incrementata di uno.

 
fxsaber:
L'ho capito

È molto importante fare un IndicatorRelease del suo manico PRIMA di OnDeinit.

È interessante notare che dopo ogni IndicatorRelease, la maniglia dell'indicatore viene incrementata di uno.

IndicatorRelease funziona già nel tester? Per sicurezza - prima non funzionava.
 
Andrey Dik:
IndicatorRelease funziona già nel tester? Per sicurezza - prima non funzionava.
Non l'ho testato.
 
fxsaber:
Non controllato.
Intendo dire che l'assenza di possibilità di scaricare un indicatore dalla memoria nel tester porterà alla sospensione del sistema, se, per esempio, si ottimizzano gli indicatori con i propri mezzi al volo. Oppure, per esempio, cambiare dinamicamente i parametri dell'indicatore porterà a un overflow di memoria, perché ogni volta verrà creato un nuovo handle e quello vecchio non verrà cancellato nel tester.
 
https://www.mql5.com/ru/code/18138
Init_Sync
Init_Sync
  • 2017.04.17
  • fxsaber
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов
 
buon argomento
 
Alexberrr:
Buon argomento

Una necessaria e rilevante in questo momento. Stavo cercando io stesso la causa per molto tempo, pensavo fosse un bug nel mio codice, grazie a questo thread il problema è stato risolto.

Grazie a tutti!