20 Dezember 2017
20 Dezember 2017
In der neuen Version der Plattform wird die Unterstützung für Desktop-Terminals und mobile Terminals älterer Versionen eingestellt:
Solche Terminals können sich nicht mit Servern der neuen Versionen verbinden. Wir empfehlen Ihnen ausdrücklich, Ihre Terminals vorab zu aktualisieren.
Für die Unterstützung von Gruppenprojekten wurde die Protokolldatei des MQL5 Storage geändert. Aus diesem Grund müssen Sie nach dem Update der Plattform alle Daten aus dem Storage erneut laden (Checkout). Die Daten, die im MQL5 Storage gespeichert sind, werden während der Aktualisierung nicht betroffen und gehen nicht verloren.
Vor dem Update auf die neue Version der Plattform empfehlen wir alle lokalen Änderungen im Storage zu speichern (Commit ausführen).
Wie es funktioniert
Sie können zum Beispiel ein Finanzinstrument erstellen, welches den Dollarindex (USDX) zeigt. Seine Formel sieht wie folgt aus:
50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)
Hinweis: in der ursprünglichen Formel des Dollarindex werden die
Währungspaare USDEUR und USDGBP verwendet. Das es nur gegenläufige
Währungspaare auf der Plattform gibt, wird für diese eine negative
Potenz und der Ask-Preis statt Bid-Preis verwendet.
Die
Plattform berechnet den Preis des neuen Symbols in Echtzeit basierend
auf den Kursen der sechs anderen Symbole, die von Ihrem Broker
bereitgestellt werden. In der Marktübersicht und auf dem Chart sehen
Sie, wie sich sein Preis ändert:
int CustomTicksAdd( const string symbol, // Symbolname const MqlTick& ticks[] // Array mit Tickdaten, die auf das benutzerdefinierte Finanzinstrument angewandt werden müssen );Die Funktion CustomTicksAdd erlaubt es, die Tick so zu übertragen, als ob sie vom Server des Brokers eintreffen würden. Die Daten werden nicht direkt in die Datenbank von Ticks geschrieben, sondern in die Marktübersicht gesendet. Das Terminal speichert dann die Ticks aus der Marktübersicht in seiner Datenbank. Wenn eine große Datenmenge bei einem Aufruf übertragen wird, ändert die Funktion ihr Verhalten, um Ressourcen zu sparen. Wenn über 256 Ticks übergeben werden, werden die Daten in zwei Teile geteilt. Der erste Teil (der größere) wird direkt in die Datenbank von Ticks geschrieben (wie dies CustomTicksReplace tut). Der zweite Teil, der aus den letzten 128 Ticks besteht, wird in die Marktübersicht übertragen und danach vom Terminal in der Datenbank gespeichert.
Nun sind vollständige Projekte im MetaEditor verfügbar. Es ist viel einfacher geworden, Programme zu entwickeln.
Die Hauptdatei eines MQL5-Programms erscheint jetzt nicht mehr als
Projekt. Ein Projekt ist eine separate Datei "MQPROJ", in welcher die
Einstellungen eines Programms, Parameter der Kompilierung und
Informationen über alle verwendeten Dateien gespeichert werden. Der
Zugriff auf die wichtigsten Einstellungen des Projekts erfolgt über ein
separates Dialog-Fenster. Man braucht nicht mehr diese im Queelcode über
#property anzugeben.
Für eine bequeme Arbeit mit Projekten gibt es ein separates Tab
im Navigator-Fenster. Hier werden alle verwendeten Dateien nach
Kategorien angezeigt: include, resource, header usw. Dabei werden die
Dateien zum Navigator des Projekts automatisch hinzugefügt. Zum
Beispiel, wenn Sie eine neue MQH-Datei in den Code miteinbeziehen, wird
diese im Bereich "Dependencies" im Navigator-Fenster automatisch
angezeigt.
Es wurde die Möglichkeit implementiert, mit neuen
Projekten im MQL5 Online-Storage zu arbeiten. Nun kann man große
Projekte gemeinsam mit anderen Mitgliedern der MQL5.community
entwickeln.
Für das Arbeiten mit Gruppenprojekten wurde der neue Bereich Shared Projects hinzugefügt. Ein Projekt, das in diesem Bereich erstellt wurde, wird direkt in den Storage geschickt. Sie können anderen Nutzern Zugriffsrechte schnell erteilen und mit einer gemeinsamen Entwicklung beginnen.
Bei der Kompilierung des Projekts in Shared Project wird die EX5-Datei je nach dem Typ des Programms in das lokale Verzeichnis Experts, Indicators oder Scripts automatisch kopiert. Sie können das Programm direkt auf dem Chart starten, ohne Dateien jedes Mal manuell kopieren zu müssen.
Neue Funktionen bei der Arbeit mit dem MQL5 Storage
Für die Implementierung einer vollständigen Arbeit mit Gruppenprojekten wurde das Protokoll der Arbeit mit dem MQL5 Storage komplett geändert. Aus diesem Grund müssen Sie nach dem Update der Plattform alle Daten aus dem Storage erneut laden (Checkout). Die Daten, die im MQL5 Storage gespeichert sind, werden während der Aktualisierung nicht betroffen und gehen nicht verloren.
Der Befehl "Checkout from Storage" ist nicht mehr verfügbar. Für das Extrahieren von Daten werden die Befehle "MQL5 Storage aktivieren" und "Dateien aus dem Storage erhalten" verwendet:
Neue Projekte: ein Beispiel für die Erstellung und Details der Arbeit
Dem MetaEditor wurde eine neue Einheit hinzugefügt. Es geht um Projekte. Das ist eine Datei mit der Erweiterung mqproj, in welcher allgemeine Eigenschaften eines Programms sowie Informationen über alle verwendeten Dateien gespeichert werden. Nun kann man die Eigenschaften des Programms in einem separaten Dialogfensters des MetaEditors verwalten statt diese manuell im Quellcode zu ändern (Anweisungen #property).
Wenn Sie einen Code haben, können Sie neue Projekte ganz einfach testen, indem Sie den Befehl "Neues Projekt aus der Quelldatei" ausführen.
Im Verzeichnis, in welchem sich die ausgewählte Quelldatei befindet, wird eine gleichnamige Datei des Projekts mit der Erweiterung mqproj erstellt. Dem Projekt werden die Haupteigenschaften des Programms automatisch hinzugefügt, die als #property in der Quelldatei angegeben sind. Dazu gehören Name, Copyright, Version, Link zum Autor und Beschreibung.
Es wurden zwei neue Optionen für die Kompilierung von MQL5-Programmen den Projekteigenschaften hinzugefügt:
Für die Arbeit mit dem Projekt nutzen Sie das separate Tab "Projekt" im Navigator-Fenster. In diesem Reiter werden alle im Projekt verwendeten Dateien angezeigt. Bei der Erzeugung eines Projekts aus der Quelldatei werden zum Bereich "Dependencies" alle Include-Dateien (die mittels der Anweisung #include in der MQ5-Hauptdatei und in allen miteinbezogenen Dateien angegeben wurden) automatisch hinzugefügt.
Beim Hinzufügen neuer Include-Dateien zum Quellcode erscheinen diese auch im Navigator des Projekts. Zum Bereich Headers werden die verwendeten Header-Dateien hinzugefügt, zum Bereich Resources — Abbildungen, Töne und andere MQL5-Programme, die als Ressourcen ins Projekt miteinbezogen werden. Im Bereich Sources werden MQ5-Datein mit dem Quellcode angezeigt. Zum Bereich "Einstellungen und Dateien" kann man andere Dateien hinzufügen, zum Beispiel Testeinstellungen und Vorlagen für Charts.
Um bereits existierende Dateien zum Projekt hinzuzufügen oder Dateien aus dem Projekt zu löschen, nutzen Sie Befehle des Kontextmenüs. Seien Sie aufmerksam beim Löschen: Sie können eine Datei aus dem Projekt entfernen (Bindung entfernen) oder diese von der Festplatte komplett löschen:
Ein neues Projekt zu erstellen ist genauso einfach, wie ein MQL5-Programm. Klicken Sie auf "Neues Projekt" und wählen Sie den Typ des Programms aus sowie geben Sie seine Eigenschaften im MQL5 Wizard an (Name, Event-Handler usw.).
Um eine ausführbare EX5-Datei zu erhalten, können Sie das Projekt öffnen und die Kompilierung ausführen (F7) oder wie früher, die MQL5-Hauptdatei öffnen und diese kompilieren.
Gruppenprojekte im MQL5 Storage: Details der Arbeit
Gruppenprojekte werden im Bereich Shared Projects verwaltet. Wenn Sie den Storage noch nicht aktiviert haben, führen Sie den Befehl Activate MQL5 Storage im Kontextmenü des Ordners aus. MetaEditor überprüft, ob Ihr Storage gespeicherte Daten enthält und ob Gruppenprojekte für Sie verfügbar sind. Die vorhandenen Daten werden aus dem Storage extrahiert und auf den PC geladen (Checkout). Verfügbare Gruppenprojekte werden im Bereich Shared Project angezeigt. Um ein Gruppenprojekt zu erhalten, klicken Sie auf "Dateien aus dem Storage extrahieren" im Kontextmenü.
Um ein neues Gruppenprojekt zu erstellen, wählen Sie den Ordner Shared Projects aus und klicken Sie auf "Neues Projekt":
Durchlaufen Sie die Standardschritte des MQL5 Wizards: Geben Sie den Typ, den Namen und die Eigenschaften des künftigen Programms ein. Wählen Sie klare und verständliche Namen für Gruppenprojekte aus, damit andere Teilnehmer diese leicht finden könnten. Der Name darf nur lateinische Buchstaben enthalten, Leerzeichen sind nicht erlaubt.
Sobald das Projekt erstellt ist, wird es zum MQL5 Storage automatisch hinzugefügt. Die verwendeten Dateien der Standardbibliothek werden zum Storage nicht hinzugefügt, sie können diese manuell hinzufügen wenn nötig.
Um anderen Teilnehmern die Arbeit an dem Projekt zu erlauben, öffnen Sie seine Eigenschaften. Hier kann man konkreten Nutzern Zugriffsrechte erteilen, indem man ihre Benutzernamen bei der MQL5.community angibt, sowie gemeinsame Parameter der Gruppenarbeit setzen:
Einfachheitshalber wird die finale ausführbare Datei (EX5) bei
der Kompilierung je nach dem Typ des Programms in den Ordner Experts,
Indicators oder Scripts automatisch kopiert. Auf diese Weise können Sie
das Programm direkt im Terminal starten, ohne es manuell in das
benötigte Verzeichnis kopieren zu müssen.
Öffentliche Projekte im MQL5 Storage: Details der Arbeit
Wie bereits oben erwähnt, kann man für jedes Gruppenprojekt im MQL5 Storage einstellen, wer auf das Projekt zugreifen kann: das Projekt kann privat sein oder offen für die Teilnahme anderer Nutzer. Nun werden alle Projekte, an denen jeder teilnehmen darf, im separaten Reiter "Öffentliche Projekte" angezeigt.
Jeder kann ein interessantes Projekt für sich finden und sich an der Entwicklung beteiligen. Klicken Sie auf "Teilnehmen" und erhalten Sie das Projekt aus dem Storage.
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- Template-Datei als binäres Array unsigned char my_template[]= { 0xFF,0xFE,0x3C, ... ,0x00 // das Array im Beispiel wurde gekürzt }; //--- Speichern und Anwenden des Templates if(FileSave("my_template.tpl",my_template)) { Print("Custom template saved in \\MQL5\\Files"); if(ChartApplyTemplate(0,"\\Files\\my_template.tpl")) Print("Custom template applied to the current chart"); else Print("Failed to apply custom template"); } else Print("Failed to save custom template"); }
Funktion | Aktion |
---|---|
CustomSymbolCreate | Erstellt ein benutzerdefiniertes Symbol mit dem angegebenen Namen in der angegebenen Gruppe |
CustomSymbolDelete | Löscht ein benutzerdefiniertes Symbol mit dem angegebenen Namen |
CustomSymbolSetInteger | Setzt den Wert einer Eigenschaft vom ganzzahligen Typ für ein benutzerdefiniertes Symbol |
CustomSymbolSetDouble | Setzt den Wert einer Eigenschaft vom reellen Typ für ein benutzerdefiniertes Symbol |
CustomSymbolSetString | Setzt den Wert einer Eigenschaft vom String-Typ für ein benutzerdefiniertes Symbol |
CustomSymbolSetMarginRate | Setzt den Koeffizienten der Margin je nach Typ und Richtung einer Order für ein benutzerdefiniertes Symbol |
CustomSymbolSetSessionQuote | Setzt den Anfang und das Ende der angegebenen Notierungssitzung für das angegebene Symbol und Wochentag |
CustomSymbolSetSessionTrade | Setzt den Anfang und das Ende der angegebenen Notierungssitzung für das angegebene Symbol und Wochentag |
CustomRatesDelete | Löscht alle Balken im angegebenen Zeitintervall aus der Preishistorie des benutzerdefinierten Symbols |
CustomRatesReplace | Ersetzt die komplette Preishistorie des benutzerdefinierten Symbols im angegebenen Zeitraum durch die Daten aus einem Array vom Typ MqlRates |
CustomRatesUpdate | Fügt der Historie des benutzerdefinierten Symbols fehlende Balken hinzu und ersetzt die vorhandenen Balken durch die Daten aus dem Array vom Typ MqlRates |
CustomTicksAdd | Fügt Daten aus einem Array vom Typ MqlTick zur Preis-Historie eines benutzerdefinierten Symbols hinzu. Das benutzerdefinierte Symbol muss in der Marktübersicht ausgewählt werden |
CustomTicksDelete | Löscht alle Balken im angegebenen Zeitintervall aus der Preishistorie des benutzerdefinierten Symbols |
CustomTicksReplace | Ersetzt die komplette Preishistorie des benutzerdefinierten Symbols im angegebenen Zeitraum durch die Daten aus einem Array vom Typ MqlTick |
Die Bibliothek befindet sich im Verzeichnis des Terminals im Ordner Include\Generic.
bool ArraySwap( void& array1[], // erstes Array void& array2[] // zweites Array );Die Funktion akzeptiert dynamische Arrays von einem Typ und einer Dimension. Für mehrdimensionale Arrays muss die Anzahl der Elemente in allen Dimensionen außer der ersten gleich sein.