OnDeinit

Die Funktion wird von Indikatoren und EAs aufgerufen, wenn das Ereignis Deinit eintritt. Sie wird auch verwendet, ein laufendes MQL5-Programm zu deinitialisieren.

void  OnDeinit(
   const int  reason         // deinitialization reason code
   );

Parameter

Ursache

[in]  Die Ursache der Deinitialisierung als Zahlencode.

Rückgabewert

Kein Rückgabewert

Hinweis

In den folgenden Fällen wird das Deinit-Ereignis für EAs und Indikatoren generiert:

  • Vor einer Neuinitialisierung aufgrund der Änderung des Symbols oder des Zeitrahmens des Charts, auf dem das MQL5-Programm läuft;
  • Vor einer Neuinitialisierung durch Änderung der Eingaben;
  • Vor dem Entladen eines MQL5-Programms.

Der Parameter reason kann die folgenden Werte annehmen:

Konstante

Wert

Beschreibung

REASON_PROGRAM

0

Der EA endete durch den Aufruf der Funktion ExpertRemove()

REASON_REMOVE

1

Das Programm wurde von Chart entfernt

REASON_RECOMPILE

2

Programm wurde neu kompiliert

REASON_CHARTCHANGE

3

Ein Symbol oder ein Zeitrahmen des Charts wurden geändert

REASON_CHARTCLOSE

4

Chart wurde geschlossen

REASON_PARAMETERS

5

Eingaben wurden von Nutzer geändert

REASON_ACCOUNT

6

Ein anderes Konto wurde aktiviert oder die Verbindung zum Handelsserver wurde aufgrund von Änderungen in den Kontoeinstellungen neu hergestellt.

REASON_TEMPLATE

7

Ein anderes Template wurde auf den Chart übertragen

REASON_INITFAILED

8

Die Funktion OnInit() gab einen Wert ungleich Null zurück

REASON_CLOSE

9

Terminal wurde beendet

Der Zahlencode der Deinitialisierung des EAs kann von der Funktion UninitializeReason() oder von der vordefinierten Variablen _UninitReason empfangen werden.

Beispiele der Verwendung der Funktionen OnInit() und OnDeinit() von einem EA

input int fake_parameter=3;      // nicht verwendeter Parameter
//+------------------------------------------------------------------+
//| Expert Initialisierungsfunktion                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Abfrage der Versionsnummer (build) mit dem das Programm kompiliert wurde
   Print(__FUNCTION__," Build #",__MQLBUILD__);
//--- Der Grund eines Reset kann auch in Oninit() erhalten werden
   Print(__FUNCTION__," Deinitialization reason code can be received during the EA reset");
//--- Der erste Weg, um an den Code der Deinitialisierung zu kommen
   Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- Der zweite Weg, um an den Code der Deinitialisierung zu kommen  
   Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialisierungsfunktion des Experten                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Der erste Weg, um an den Code der Deinitialisierung zu kommen
   Print(__FUNCTION__," Deinitialization reason code = ",reason);
//--- Der zweite Weg, um an den Code der Deinitialisierung zu kommen
   Print(__FUNCTION__," _UninitReason = ",getUninitReasonText(_UninitReason));
//--- Der dritte Weg, um an den Code der Deinitialisierung zu kommen  
   Print(__FUNCTION__," UninitializeReason() = ",getUninitReasonText(UninitializeReason()));
  }
//+------------------------------------------------------------------+
//| Rückgabe der Beschreibung der Ursache der Deinitialisierung      |
//+------------------------------------------------------------------+
string getUninitReasonText(int reasonCode)
  {
   string text="";
//---
   switch(reasonCode)
     {
      case REASON_ACCOUNT:
         text="Account was changed";break;
      case REASON_CHARTCHANGE:
         text="Symbol or timeframe was changed";break;
      case REASON_CHARTCLOSE:
         text="Chart was closed";break;
      case REASON_PARAMETERS:
         text="Input-parameter was changed";break;
      case REASON_RECOMPILE:
         text="Program "+__FILE__+" was recompiled";break;
      case REASON_REMOVE:
         text="Program "+__FILE__+" was removed from chart";break;
      case REASON_TEMPLATE:
         text="New template was applied to chart";break;
      default:text="Another reason";
     }
//---
   return text;
  }

Siehe auch

OnInit, Ereignisbearbeiter, Durchführung der Programme, Ereignisse des Client-Terminals, Deinitialisierungsgruende, Sichtbereich und Lebensdauer der Variablen, Erzeugung und Entfernung der Objekte