Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bibliotheken

Init_Sync - Bibliothek für den MetaTrader 5

Ansichten:
754
Rating:
(31)
Veröffentlicht:
2017.05.12 13:49
\MQL5\Include\
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Wenn man den Zeitrahmen oder den Symbolnamen des Charts in MT ändert, werden alle Indikatoren vom Chart gelöscht und dann wieder gestartet. Dabei ist die Reihenfolge Unload/Upload in MT5 im Gegensatz zu MT4 wegen der Besonderheiten der Konfiguration nicht definiert.

Dieser Umstand ruft manchmal nicht ersichtliche Probleme hervor. Diese Probleme hängen damit zusammen, dass OnInit der neuen geladenen Kopie des Indikators früher ausgeführt wird, als OnDeinit der entladenen Kopie

Die Situationen, in welchen dieses Problem auftritt, sind meistens mit dem Wunsch verbunden, eine Information aus OnDeinit der alten Kopie des Indikators nach OnInit der neuen Kopie (explizit/implizit) zu übertragen. Mit anderen Worten muss die neue Kopie des Indikators von der alten Kopie "wissen" und darf nicht geladen werden, bis die alte entladen worden ist.

Diese Bibliothek erlaubt es, jedem Indikator solche Synchronisierung zuzuweisen.

Nehmen wir einen einfachen Indikator als Beispiel

#property indicator_chart_window

#property indicator_buffers 1
#property indicator_plots   1
#property indicator_color1  clrRed
#property indicator_type1   DRAW_LINE

input int Input = 0;

double Buffer[];

int OnInit()
{
  SetIndexBuffer(0, Buffer);
  Print("Init");
  return(INIT_SUCCEEDED);
}

void OnDeinit( const int Reason )
{
  Print("DeInit");
}

void OnChartEvent( const int id,
                   const long& lparam,
                   const double& dparam,
                   const string& sparam )
{
}

void OnTimer()
{
}

int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[] )
{
  ArrayCopy(Buffer, open, prev_calculated, prev_calculated);  
  return(rates_total);
}

Wenn man diesen Indikator startet und seinen Zeitrahmen oder Symbol ändert, sieht man eine Störung in der Reihenfolge der Strings "Init" und "Deinit" im Journal.

Wenn man aber am Anfang des Codes des Indikators den folgenden string hinzufügt:

#include <Init_Sync.mqh> // Synchronisiert Init/Deinit von Indikatoren

wird die Reihenfolge eingehalten.

Damit diese Eigenschaft für irgendeinen Indikator funktioniert, muss der oben angeführte String am Anfang des Codes hinzugefügt werden.

Anmerkungen

// Die Bibliothel synchronisiert Init/Deinit von Indikatoren.
// Der Indikator muss unbedingt int OnInit(), OnDeinit, OnTimer und OnChartEvent beinhalten.
// Die nicht verwendet werden - leer schreiben.

#include <TypeToBytes.mqh> // https://www.mql5.com/de/code/16280
#include <crc64.mqh>       // https://www.mql5.com/en/blogs/post/683577

Die mqh-Dateien, die miteinbezogen werden, findet man unter in der Quelle angegebenen Links.

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/18138

Color_Spread Color_Spread

Der Indikator zeigt den aktuellen Spread mithilfe einer farbigen Linie an.

Exp_XFatlXSatlCloud Exp_XFatlXSatlCloud

Das Exp_XFatlXSatlCloud Handelssystem basiert auf der Änderung der Trendrichtung, die der XFatlXSatlCloud Indikator anzeigt.

XMA_BB_Pivot XMA_BB_Pivot

Zwei mit FArbe gefüllte Rechtecke, die zwischen den Werten von zwei Bollinger Kanälen auf einem Balken gezeichnet werden.

XMA_Keltner_Pivot XMA_Keltner_Pivot

Zwei mit Farbe gefüllte Rechtecke, die zwischen den Werten von zwei Keltner Kanäle auf einem Balken gezeichnet werden.