Offline Charts in dem Neuen MQL4

MetaQuotes | 4 Mai, 2016

Das aktualisierte MQL4 hat das neue Format zum Speichern historischer Daten und stellt die geeignete MqlRates Struktur für die komfortable Aufbewahrung der Zeit-, Öffnung-, Tief-, Hoch-, Schluss- und Volumen-Werte bereit. Seit vielen Jahren haben Trader ihre MQL4 Anwendungen entwickelt, die ihre Daten in HST-Dateien sammeln und speichern um Offline-Charts zu erzeugen. Wir können Ihnen versichern, dass alle zuvor kompilierten EX4 Dateien im neuen MetaTrader 4 Terminal auf die gleiche Weise wie zuvor funktionieren.



Alle Alten EX4 Programme arbeiten in dem neuen MetaTrader 4 Terminal

Wie bereits erwähnt, nicht eine einzige benutzerdefinierte ausführbare EX4 Datei, die vom alten Compiler kompiliert wird gelöscht oder geändert werden, wenn Sie das Terminal upgraden. Das bedeutet, dass alle Ihre bewährten Anwendungen, die nicht in dem Standard-Lieferumfang des Terminals enthalten sind, automatisch an den neuen Speicherort kopiert werden und für die Arbeit zur Verfügung stehen.



Offline-Charts im MetaTrader 4 Terminal

Die Standardauslieferung des neuen Client-Terminal enthält das aktualisierte PeriodConverter Skript, das HST-Dateien im neuen Format erzeugt. Wenn Sie Programme jedoch auf der Grundlage des älteren period_converter Skript haben und mit dem älteren Compiler kompiliert haben, werden sie weiter wie gewohnt arbeiten.

Nehmen wir an, dass wir die kompilierte period_comverter_509.ex4 Skript, entwickelt auf der älteren Version. Während der Aktualisierung wurde es automatisch auf den neuen Speicherort kopiert und steht nun für den Start im Navigator-Fenster zur Verfügung. Wir wenden sie an auf das EURUSD M1 Chart, um für EURUSD M2 eine benutzerdefinierte Historie zu erstellen.


Der Multiplikator ist auf 3 voreingestellt. Lassen Sie uns es auf 2 ändern. Wir sollten auch sicher sein DLL-Aufruf zu ermöglichen, um in der Lage zu sein, offline EURUSD M2 Chart zu verwalten, die wir öffnen werden, nachdem die entsprechende Historie gebildet wurde.

Sobald das Skript meldet, die Datendatei in das Experten Journal zu generieren, gehen Sie zu Datei - Chart offline öffnen und ermitteln Sie die EURUSD M2 Zeile. Das sind die Daten, die durch unser Skript vorbereitet wurden.

Nachdem das Offline-Chart geöffnet wurde, geht das Skript an die Arbeit mit EURUSD M1 und verarbeitet neu ankommende Echtzeit Ticks. Nachdem es herausgefunden hat, dass das Offline-Chart mit dem angegebenen Zeitraum geöffnet wurde, beginnt es Aktualisierung-Befehle an dieses Chart zu senden, alle 2 Sekunden ein Befehl.

Somit arbeitet das alte, von der älteren Compiler-Version kompilierte Skript erfolgreich in dem neuen Terminal, aktiviert die volle integrierte Funktionalität.

Erledigen Sie alle beschriebenen Schritte: Herunterladen der angehangenen ausführbaren period_converter_509.ex4 Datei und platzieren sie in <Daten Ordner>\MQL4\Scripts.



Aktualisierung des alten Skript für den neuen Compiler

An einem gewissen Punkt müssen Sie den Quellcode Ihrer Anwendung ändern und sie in dem neuen MetaEditor kompilieren. Hier zeigen wir, wie Sie die Änderungen in MQL4 Sprache prüfen, durch zwei kleine Korrekturen mit dem period_converter_509 Skript als Beispiel. Natürlich können wir den Quellcode der period_conveter_509.mq4 ohne Änderungen kompilieren, und es wird funktionieren. Aber es wäre besser, die Sprachänderungen zu berücksichtigen und kleinere Korrekturen am Code vornehmen.

Gemeinsamer-Zugriff Modus sollte explizit angegeben werden, wenn die Datei geöffnet wird
Wie Sie sich erinnern können, werden alle Dateien wurden in gemeinsamen Zugriffsmodus geöffnet in dem alten MQL4. In dem neuen MQL4, müssen FILE_SHARE_WRITE und FILE_SHARE_READ Flags ausdrücklich für die gemeinsame Nutzung angegeben werden, wenn Dateien geöffnet werden. Wenn die Flags fehlen, wird die Datei im exklusiven Modus geöffnet und kann nicht von jemand anderem geöffnet werden, bis sie von dem Benutzer geschlossen wird, der sie geöffnet hat. Das ist genau das Verhalten, das wir brauchen, da wir die historische Datendatei erzeugt durch das Skript in MetaTrader 4 Terminal als Offline-Diagramm öffnen möchten. Also fügen wir einfach diese beiden Flags FileOpenHistory () Funktionsaufruf hinzu:

   // 1-st change - add share flags
   ExtHandle=FileOpenHistory(c_symbol+i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ);

Nun spült FileFlush () gespeicherte Daten sofort auf die Platte
Die FileFlush () Funktion wird im alten Skript zu oft verwendet. Es besteht keine Notwendigkeit, sie nach jeder Aufzeichnung der Balken-Daten aufzurufen, wie während der ersten Datei Generation. Es wäre ausreichend dies ganz am Ende zu tun, wenn alle vorbereiteten Daten auf einem Nicht-Standard-Symbol und/oder Zeitrahmen aufgezeichnet werden. Tatsache ist, dass die FileFlush () Funktion Implementierung in der neuen Version der MQL4 Sprache geändert wurde, um sofortige Datenübertragung auf das physische Laufwerk zu ermöglichen. Die alte Version verwendete Daten Writeback, und mehrere Anrufe führen nicht zur Skript Betrieb-Verlangsamung.

last_fpos=FileTell(ExtHandle);
last_volume=Volume[i];
//--- write generated bar data
FileWriteInteger(ExtHandle, i_time, LONG_VALUE);
FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);
// 2-nd change - remove FileFlush from here
//FileFlush(ExtHandle);

Lassen Sie uns die erhaltene Datei nach diesen beiden Korrekturen als period_converter_580.mq4 speichern und kompilieren. Sie können sie von den an diesen Artikel angehängten Dateien herunterladen. Nun öffnen wir ein weiteres EURUSD M1-Chart und führen Sie das Skript mit dem Parameter 3 aus, um ein Drei-Minuten-Nicht-Standard-EURUSD Chart zu erstellen.

Nachdem die Daten-Datei generiert wurde, öffnen wir es als Offline EURUSD M3 Chart.

Wie erwartet, nachdem das Chart geöffnet wurde, hat das gestartete period_converter_580 Skript es erkannt und eine Nachricht an das Journal geschickt. Von nun an wird es den Update-Befehl an das Offline-Chart nicht öfter als einmal pro 2 Sekunden senden.

So haben wir die Arbeit mit dem bisherigen historischen Daten-Speicherformat getestet und sichergestellt, dass alles nach wie vor funktioniert.


Neues PeriodConverter Skript

Die Standardauslieferung des neuen MetaTrader 4 Client-Terminal-Version enthält auch ein PeriodConverter Skript, das die gleichen Aufgaben wie sein Vorgänger ausführt. Allerdings hat es einige kleinere Unterschiede zu dem alten, da es mit dem neuen Quellcode Stil entwickelt wurde. Außerdem verfügt es über die neuen Möglichkeiten der MQL4 Sprache.

Der wichtigste Unterschied zur vorherigen Version, ist die Verwendung der neuen MqlRates Struktur, entwickelt um mit Kursbalken-Daten im neuen Format arbeiten:

if(time0>=rate.time+periodseconds || i==0)
  {
   if(i==0 && time0<rate.time+periodseconds)
     {
      rate.tick_volume+=(long)Volume[0];
      if(rate.low>Low[0])
         rate.low=Low[0];
      if(rate.high<High[0])
         rate.high=High[0];
      rate.close=Close[0];
     }
   last_fpos=FileTell(ExtHandle);
   last_volume=(long)Volume[i];
   FileWriteStruct(ExtHandle,rate);
   cnt++;
   if(time0>=rate.time+periodseconds)
     {
      rate.time=time0/periodseconds;
      rate.time*=periodseconds;
      rate.open=Open[i];
      rate.low=Low[i];
      rate.high=High[i];
      rate.close=Close[i];
      rate.tick_volume=last_volume;
     }
  }

MQL4 Entwickler, die aktiv Offline-Charts verwenden werden schnell die Vorteile des neuen Ansatzes erkennen.

Struktur zur Speicherung von Informationen über Kurse, Volumen und Spread

struct MqlRates
  {
   datetime time;    // period start time
   double open;      // Open price
   double high;      // High price for the period
   double low;       // Low price for the period
   double close;     // Close price
   long tick_volume; // tick volume
   int spread;       // spread
   long real_volume; // trade volume
  };

Lassen Sie uns das neue PeriodConverter Skript kompilieren und es auf dem neuen EURUSD M1-Chart starten, so wie die vorherigen.

Zu diesem Zeitpunkt bereiten wir die Daten vor für das Offline-Chart EURUSD M4. Somit ist der Multiplikator gleich 4.

Nachdem die Daten vorbereitet wurden, öffnen wir das Offline-Chart, das die gleiche Weise.

Wie Sie sehen können, arbeiten alle drei Versionen des Skripts ähnlich. Alle Trader die mit benutzerdefinierten Symbol-Charts oder Nicht-Standard-Zeitrahmen arbeiten, sind in der Lage, sie in der neuen Version von MetaTrader 4 Terminal zu nutzen, sowie die bestehenden Quellcodes zu verbessern und neue zu entwickeln. Keine grundlegenden Veränderungen oder Schwierigkeiten erwarten Sie, während auf die neue Version wechseln.


Fazit

  1. Die Offline-Charts im neuen Terminal funktionieren auf die gleiche Weise wie vorher. Sowohl neue als auch frühere historische Datenformate werden unterstützt.
  2. Alte EX4 Dateien behalten ihre Funktionalität im neuen Terminal.
  3. Beginnen Sie neue MQL4 Anwendungen zu entwickeln, mit allen neuen Sprachfunktionen und offenbaren Sie ihr volles Potenzial.

Verwandte Artikel:

  1. Testen von Expert Advisors auf atypischen Zeitrahmen
  2. Grundsätze der Zeit-Transformation im Intraday-Trading
  3. Äquivolumen-Chart-Erstellung: Eine Neubetrachtung
  4. Synthetische Balken - Eine Neue Dimension Zur Anzeige Grafischer Informationen über Kurse
  5. Charts ohne"Gaps" (Lücken)