OnInit

Die Funktion wird von Indikatoren und EAs aufgerufen, wenn das Ereignis Init eintritt. Sie wird auch verwendet zur Initialisierung eines MQL5-Programm verwendet. Es gibt zwei Versionen dieser Funktion.

Die Version, die das Ergebnis zurück gibt

int  OnInit(void);

Rückgabewert

int Ty des Wertes, Null steht für eine erfolgreiche Initialisierung.

Wenn INIT_FAILED zurückgegeben wird, wird der EA zwangsweise aus dem Chart entfernt.

Wenn INIT_FAILED zurückgegeben wird, wird der Indikator nicht aus dem Chart entfernt. Der im Chart verbleibende Indikator ist nicht funktionsfähig — die Ereignisbehandlung im Indikator wird nicht aufgerufen.

Diese Version von OnInit(), die das Ausführungsergebnis zurückgibt, wird zur Verwendung empfohlen, da sie nicht nur die Programminitialisierung erlaubt, sondern auch einen Fehlercode im Falle eines vorzeitigen Programmendes zurückgibt.

Die Version ohne Ergebnisrückgabe wird nur aus Kompatibilitätsgründen mit alten Codes belassen. Ein Verwenden wird nicht empfohlen.

void OnInit(void);)

Hinweis

Das Init-Ereignis wird unmittelbar nach dem Laden eines EA oder eines Indikators erzeugt. Für Skripte wird das Ereignis nicht erzeugt. Die Funktion OnInit() wird verwendet, um ein MQL5-Programm zu initialisieren. Wenn OnInit() einen Rückgabewert von Typ inthat, bedeutet ein Rückgabewert ungleich Null eine fehlgeschlagene Initialisierung und erzeugt das Ereignis Deinit mit dem Code der Deinitialisierung REASON_INITFAILEDals Ergebnis..

Die Version OnInit() mit der Rückgabe von void bedeutet, dass immer eine erfolgreiche Initialisierung durchgeführt wurde und das zu verwenden wird nicht empfohlen.

Für die Eingaben einer Optimierung eines EAs***wird empfohlen, Werte aus der Enumeration ENUM_INIT_RETCODE als Rückgabewert verwenden. Diese Werte sind für die Festlegung des Optimierungsprozesses einschließlich der Auswahl der am besten geeigneten Testmittel bestimmt. Mit der Funktion TerminalInfoInteger() können während der EA-Initialisierung vor dem Start des Tests Daten zur Agentenkonfiguration und Ressourcen (Anzahl der Kerne, freier Speicherplatz, etc.) abgefragt werden. Basierend auf den erhaltenen Daten können Sie entweder die Verwendung des Test-Agenten erlauben oder die Optimierung des EA unterbinden.

ID

Beschreibung

INIT_SUCCEEDED

Initialisierung war erfolgreich, der Test des EAs kann beginnen.

Dieser Code bedeutet dasselbe wie die Null - die EA-Initialisierung im Tester war erfolgreich.

INIT_FAILED

Initialisierung ist fehlgeschlagen. Es macht keinen Sinn, den Test trotz des aufgetretenen Fehlers fortzusetzen. Beispielsweise ist es nicht möglich, ein für den EA-Betrieb notwendiges Indikator anzulegen.

Die Rückgabe dieses Wertes bedeutet dasselbe wie die Rückgabe des Wertes ungleich Null - EA-Initialisierung im Tester fehlgeschlagen.

INIT_PARAMETERS_INCORRECT

Entwickelt, um einen falschen Satz von Eingabeparametern durch einen Programmierer zu kennzeichnen. In der allgemeinen Optimierungstabelle ist der Ergebnisstring mit diesem Rückgabecode rot markiert.

Ein Test für einen solchen Satz von EA-Eingaben wird nicht durchgeführt. Der Agent bleibt bereit, mit neuen Eingaben getestet zu werden.

Wenn dieser Wert empfangen wird, gibt der Strategie-Tester diese Aufgabe nicht zur wiederholten Ausführung an andere Agenten weiter.

INIT_AGENT_NOT_SUITABLE

Keine Programmausführungsfehler bei der Initialisierung. Aus irgendwelchen anderen Gründen ist der Agent jedoch nicht für die Durchführung eines Tests geeignet. Zum Beispiel gibt es nicht genügend RAM, kein OpenCL-Unterstützung, etc.

Nach der Rückgabe dieses Codes erhält der Agent keine Aufgaben mehr bis zum Ende von dieser Optimierung..

Die Benutzung der Rückgabewerte RINIT_FAILED/INIT_PARAMETERS_INCORRECT von OnInit() im Tester haben einige Besonderheiten, die bei der Optimierung von EAs berücksichtigt werden sollten:

  • Die Parameter, für die OnInit() den Wert INIT_PARAMETERS_INCORRECT zurückgibt, gilt als ungeeignet für den Test und wird nicht von der nächsten Population während genetische Optimierung verwendet. Zu viele "verworfene" Parametereinstellungen können bei der Suche nach optimalen EA-Parametern zu falschen Ergebnissen führen. Der Suchalgorithmus geht davon aus, dass die Funktion des Optimierungskriterium keine Lücken in der gesamten Vielzahl der Eingangsparameter aufweist.
  • Wenn OnInit() INIT_FAILED zurückgibt, bedeutet das, dass ein Test nicht gestartet werden kann und der EA aus dem Speicher des Agenten entfernt wird. Das EA wird erneut geladen, um den nächsten Durchlauf mit einem neuen Satz von Parametern durchzuführen. Der Start des nächsten Optimierungsdurchgangs dauert dadurch viel länger als bei einem Aufruf von TesterStop().

Beispiele der Verwendung der Funktionen OnInit() von einem EA

//--- Eingabeparameter
input int      ma_period=20; // Periodenlänge des gleitenden Durchschnitts
 
//--- Handle des Indikators, den der EA verwendet
int indicator_handle;   
//+------------------------------------------------------------------+
//| Expert Initialisierungsfunktion                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Prüfen der Gültigkeit von ma_period
   if(ma_period<=0)
     {
      PrintFormat("Invalid ma_period input value: %d",ma_period);
      return (INIT_PARAMETERS_INCORRECT);
     }
//--- Während der Optimierung
   if(MQLInfoInteger(MQL_OPTIMIZATION))
     {
      //--- Prüfung auf ausreichend RAM für den Agenten
      int available_memory_mb=TerminalInfoInteger(TERMINAL_MEMORY_TOTAL);
      if(available_memory_mb<2000)
        {
         PrintFormat("Insufficient memory for the test agent: %d MB",
                     available_memory_mb);
         return (INIT_AGENT_NOT_SUITABLE);
        }
     }
//--- Prüfen des Indikators
   indicator_handle=iCustom(_Symbol,_Period,"My_Indicator",ma_period);
   if(indicator_handle==INVALID_HANDLE)
     {
      PrintFormat("Failed to generate My_Indicator handle. Error code %d",
                  GetLastError());
      return (INIT_FAILED);
     }
//--- EA-Initialisierung war erfolgreich
   return(INIT_SUCCEEDED);
  }

Siehe auch

OnDeinit, Ereignisbearbeiter, Durchführung der Programme, Ereignisse des Client-Terminals, Initialization of variables, Creating and deleting objects