und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
Init_Sync - Bibliothek für den MetaTrader 5
- Ansichten:
- 800
- Rating:
- Veröffentlicht:
- 2017.05.12 13:49
- 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
Der Indikator zeigt den aktuellen Spread mithilfe einer farbigen Linie an.
Exp_XFatlXSatlCloudDas Exp_XFatlXSatlCloud Handelssystem basiert auf der Änderung der Trendrichtung, die der XFatlXSatlCloud Indikator anzeigt.
Zwei mit FArbe gefüllte Rechtecke, die zwischen den Werten von zwei Bollinger Kanälen auf einem Balken gezeichnet werden.
XMA_Keltner_PivotZwei mit Farbe gefüllte Rechtecke, die zwischen den Werten von zwei Keltner Kanäle auf einem Balken gezeichnet werden.