Init() und DeInit() Ausführungsreihenfolge - Seite 28

 
Alexey Viktorov:
Die Anzahl der Fenster ist klar, aber wie lässt sich die Anzahl der MA mit unterschiedlichen Parametern bestimmen?
Sie müssen die Indikatorparameter abfragen und auswerten.
 
Ich habe es herausgefunden
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 ist sehr wichtig, ein IndicatorRelease seines Handles VOR OnDeinit auszuführen.

Interessanterweise wird der Indikator-Handle nach jedem solchen IndicatorRelease um eins erhöht.

 
fxsaber:
Ich habe es herausgefunden

Es ist sehr wichtig, ein IndicatorRelease seines Handles VOR OnDeinit auszuführen.

Interessanterweise wird der Indikator-Handle nach jedem solchen IndicatorRelease um eins erhöht.

FunktioniertIndicatorRelease bereits in der Testversion? Nur für den Fall, dass es vorher nicht funktioniert hat.
 
Andrey Dik:
Funktioniert IndicatorRelease schon in der Testversion? Nur für den Fall, dass es vorher nicht funktioniert hat.
Ich habe es nicht getestet.
 
fxsaber:
Ich habe es nicht getestet.
Ich meine damit, dass die fehlende Möglichkeit , einen Indikator aus dem Speicher des Testers zu entladen, zu einer Aussetzung des Systems führen wird, wenn Sie z.B. Indikatoren mit Ihren eigenen Mitteln im laufenden Betrieb optimieren. Oder, zum Beispiel, das dynamische Ändern von Indikatorparametern führt zu einem Speicherüberlauf, weil jedes Mal ein neues Handle erstellt wird und das alte im Tester nicht gelöscht wird.
 
https://www.mql5.com/ru/code/18138
Init_Sync
Init_Sync
  • 2017.04.17
  • fxsaber
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов
 
gutes Thema
 
Alexberrr:
Gutes Thema

Das ist im Moment notwendig und wichtig. Ich habe selbst lange nach der Ursache gesucht, dachte es wäre ein Fehler in meinem Code, dank dieses Threads ist das Problem gelöst.

Ich danke Ihnen allen!