MetaTrader 5 Build 1730: Projekte in MetaEditor und synthetische Finanzinstrumente

In der neuen Version der Plattform wird die Unterstützung für Desktop-Terminals und mobile Terminals älterer Versionen eingestellt: Kundenterminal

20 Dezember 2017

Unterstützung für alte Versionen der Terminals eingestellt

In der neuen Version der Plattform wird die Unterstützung für Desktop-Terminals und mobile Terminals älterer Versionen eingestellt:

  • Kundenterminal: Versionen älter als 730 vom 23. November 2012
  • Mobiles Terminal für iPhone: Versionen älter als 1171 vom 11. November 2015
  • Mobiles Terminal für Android: Versionen älter als 1334 vom 5. August 2016

Solche Terminals können sich nicht mit Servern der neuen Versionen verbinden. Wir empfehlen Ihnen ausdrücklich, Ihre Terminals vorab zu aktualisieren.

Protokolldatei des MQL5 Storage geändert

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).

Terminal

  1. Nun kann man synthetische Finanzinstrumente auf der Plattform erstellen. Das sind Finanzinstrumente, die auf einem oder mehreren der vorhandenen basieren. Man muss eine Formel für die Berechnung der Kurse angeben, und die Plattform wird Ticks des synthetischen Symbols in Echtzeit erzeugen sowie eine Minuten-Historie für es erstellen.

    Wie es funktioniert

    • Sie erstellen ein synthetisches Finanzinstrument und geben eine Formel für seine Berechnung an.
    • Die Plattform berechnet seine Ticks mit einer Frequenz von 10 Mal pro Sekunde, vorausgesetzt, dass sich der Preis mindestens eines Symbols in der Formel geändert hat.
    • Die Plattform berechnet die Historie von Minutenbalken (für zwei letzte Monate) auf Basis von Minutenbalken der Symbole in seiner Formel. Alle neuen Balken (der aktuelle und der nächste) werden in Echtzeit basierend auf erzeugten Ticks des synthetischen Symbols gezeichnet.

    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:




    Erstellen Sie ein neues benutzerdefiniertes Symbol, öffnen Sie dessen Spezifikation und geben Sie seine Formel an:




    Einfachheitshalber zeigt der Formel-Editor die Liste möglicher Varianten an, während man Namen von Symbolen und Funktionen eingibt.

    Die Berechnung von Ticks und Minutenbalken eines synthetischen Symbols beginnt, sobald es zur Marktübersicht hinzugefügt wird. Gleichzeitig werden der Marktübersicht alle Symbole hinzugefügt, die für die Berechnung des synthetischen Symbols benötigt werden. Dem Journal der Plattform wird eine Eintragung über den Beginn der Berechnung hinzugefügt: Synthetic Symbol USDX: processing started.
    • Die Berechnung des synthetischen Symbols wird beendet, wenn es in der Marktübersicht ausgeblendet wird.
    • Symbole, die momentan für die Berechnung synthetischer Symbole verwendet werden, können in der Marktübersicht nicht ausgeblendet werden.

    Berechnung von Kursen in Echtzeit
    Jede 100 Ms (zehn mal pro Sekunde) wird überprüft, ob sich der Preis der Symbole in der Formel geändert hat. Wenn sich der Preis mindestens eines Symbols geändert hat, wird der Preis des synthetischen Symbols berechnet und ein Tick wird generiert. Die Berechnung wird parallel in drei Threads für Bid, Ask und Last-Preise durchgeführt. Zum Beispiel, wenn die Formel EURUSD*GBPUSD ist, werden die Preise des synthetischen Symbols wie folgt berechnet:

    • Bid — bid(EURUSD)*bid(GBPUSD)
    • Ask — ask(EURUSD)*ask(GBPUSD)
    • Last — last(EURUSD)*last(GBPUSD)

    Das Vorhandensein der Veränderungen wird für jeden Preis separat geprüft. Wenn sich bei einer Berechnung nur der Bid-Preis des ursprünglichen Symbols verändert hat, wird für den Tick des synthetischen Symbols nur der entsprechende Preis berechnet.

    Zeichnen der Historie von Munitenbalken
    Neben dem Sammeln von Ticks in Echtzeit, erstellt die Plattform eine Minuten-Historie des synthetischen Symbols. Auf diese Weise kann sich der Trader seine Charts wie die Charts einfacher Symbole ansehen und mithilfe von Objekten und Indikatoren technische Analyse durchführen.

    Sobald der Trader ein synthetisches Symbol zur Marktübersicht hinzufügt, prüft die Plattform, ob es für ihn eine berechnete Minutenhistorie gibt. Wenn nicht, wird die Historie für die letzten 60 Tage erstellt. Das macht ungefähr 50 000 Balken aus. Wenn ein kleinerer Wert im Parameter "Max. Balken im Chart" in den Einstellungen der Plattform angegeben wurde, wird diese Beschränkung angewandt.

    Wenn einige Balken für diese Perioden bereits gezeichnet wurden, erzeugt die Plattform zusätzlich neue Balken. Eine tiefere Historie wird erst beim Versuch erstellt, sich einen älteren Zeitraum auf dem Chart anzusehen (wenn man zurück scrollt oder die Historie aus einem MQL5-Programm abruft).

    Die Historie von Minutenbalken eines synthetischen Symbols wird basierend auf Minutenbalken (nicht Ticks) der Symbole in seiner Formal berechnet. Um den Open-Kurs eines Minutenbalkens eines synthetischen Symbols zu berechnen, verwendet die Plattform Open-Kurse der Symbole in der Formel. Die High-, Low- und Close- Kurse werden gleich berechnet.

    Wenn der benötigte Minutenbalken für ein Symbol aus der Formel fehlt, verwendet die Plattform den Close-Kurs des vorherigen Balkens für die Berechnung. Es werden zum Beispiel drei Symbole verwendet: EURUSD, USDJPY und GBPUSD. Fehlt bei der Berechnung eines Balkens, der der Minute 12:00 entspricht, der Minutenbalken von USDJPY, werden folgende Preise verwendet:

    • Für Open — EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
    • Für High — EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
    • Für Low — EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
    • Für Close — EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

    Wenn der Minutenbalken bei allen Symbolen in der Formel fehlt, wird der entsprechende Minutenbalken des synthetischen Symbols nicht berechnet.

    Zeichnen neuer Minutenbalken
    Alle neuen Balken (der aktuelle und die darauffolgenden) des synthetischen Symbols werden basierend auf erzeugten Ticks erstellt. Der Preis, nach welchem die Balken gezeichnet werden, hängt vom Parameter "Zeichnen von Charts" in der Spezifikation ab:





    Welche Operationen in der Formel des Symbols verwendet werden dürfen
    In der Formel können Preisdaten sowie einige Eigenschaften existierender Symbole (bereitgestellt vom Broker) verwendet werden. Dafür sind folgende Informationen anzugeben:

    • Symbolname — je nach dem, welcher Preis des synthetischen Symbols berechnet wird, wird in der Formel der Bid-, Ask- oder Last-Preis des angegebenen Finanzinstruments verwendet. Zum Beispiel wenn man EURUSD*GBPUSD angibt, wird Bid als bid(EURUSD)*bid(GBPUSD) und Ask — als ask(EURUSD)*ask(GBPUSD) berechnet.
    • bid(Symbolname) — bei der Berechnung des Bid-Preises des synthetischen Symbols wird die Verwendung des Bid-Preises des angegebenen Symbols erzwungen. Diese Variante ist ähnlich der vorherigen (ohne Angabe des Preistyps).
    • ask(Symbolname) — bei der Berechnung des Bid-Preises des synthetischen Symbols wird die Verwendung des Ask-Preises des angegebenen Symbols erzwungen. Bei der Berechnung des Ask-Preises wird umgekehrt der Bid-Preis des angegebenen Symbols verwendet. Bei der Berechnung des Last-Preises wird der Last-Preis des angegebenen Symbols verwendet. Zum Beispiel wenn man ask(EURUSD)*GBPUSD angibt, wird wie folgt berechnet:
      • Bid = ask(EURUSD)*bid(GBPUSD)
      • Ask = bid(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • last(Symbolname) — der Last-Preis des angegebenen Symbols wird bei der Berechnung aller Preise des synthetischen Symbols (Bid, Ask und Last) verwendet. Wenn man zum Beispiel last(EURUSD)*GBPUSD angibt, wird wie folgt berechnet:
      • Bid = last(EURUSD)*bid(GBPUSD)
      • Ask = last(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • volume(Symbolname) — in der Formel wird das Tickvolumen des angegebenen Symbols verwendet. Stellen Sie sicher, dass die Volumen-Daten für das angegebene Symbol vom Broker geliefert werden.
    • point(Symbolname) — in die Formel wird der Wert der minimalen Preisveräderung des angegebenen Symbols eingefügt.
    • digits(Symbolname) — in die Formel wird die Anzahl der Nachkommastellen im Preis des angegebenen Symbols eingefügt.

    Wenn der Symbol einen komplizierten Namen hat (Bindestrich, Punkte usw. beinhaltet), muss er in Anführungszeichen gesetzt werden. Zum Beispiel, "RTS-6.17".
    Folgende Rechenoperationen können in der Formel verwendet werden: Addition (+), Subtraktion (-), Multiplikation (*), Division (/) und Division mit Rest (%). EURUSD+GBPUSD bedeutet, zum Beispiel, dass der Preis als Summe der Preise von EURUSD und GBPUSD berechnet wird. In der Formel kann auch das unäre Minus für die Änderung des Vorzeichens verwendet werden: -10*EURUSD.

    Die Rechenoperationen werden nach Vorrangregeln ausgeführt:

    • Zunächst werden Multiplikation, Division und Division mit Rest ausgeführt, danach werden Addition und Subtraktion ausgeführt.
    • Die Rechenoperationen werden von links nach rechts ausgeführt. Wenn mehrere Operationen in der Formel (zum Beispiel, Addition und Subtraktion) verwendet werden, wird zunächst die Rechenoperation ganz links ausgeführt.
    • Um die Reihenfolge der Ausführung zu ändern, kann man runde Klammern ( und ) verwenden. Die Ausdrücke in Klammern haben bei der Berechnung den höchsten Vorrang. Für diese Ausdrücke gilt auch das Prinzip von links nach rechts: zuerst wird der Ausdruck in Klammern berechnet, der in der Formel ganz links steht.

    Darüber hinaus können Konstanten in der Formel verwendet werden:

    • Nummerische (ganzzahlige und mit Gleitkomma). Zum Beispiel, EURUSD*2+GBPUSD*0.7.
    • Die Symbol-Eigenschaften _Digits und _Point. _Digits — Anzahl der Nachkommastellen im Preis des Symbols, _Point — minimale Preisveränderung des Symbols.

    Darüber hinaus kann man in der Formel alle mathematischen Funktionen, die in MQL5 unterstützt werden, außer MathSrand, MathRand und MathIsValidNuber, verwenden. Für alle Funktionen werden kurze Namen verwendet: fabs(), acos(), asin() usw.

  2. Es wurde eine Option hinzugefügt, die es erlaubt, Kurse für benutzerdefinierte Finanzinstrumente in Eichtzeit hinzuzufügen. Nun ist es möglich, einen Expert Advisor in MQL5 zu schreiben, der Kurse für das angegebene Finanzinstrument liefern wird. Dafür wird die neue Funktion CustomTicksAdd verwendet.
    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.
  3. In der Marktübersicht werden jetzt auch High und Low Kurse angezeigt. Standardmäßig sind diese Spalten deaktiviert. Sie können die Anzeige im Kontextmenü aktivieren:




    Für Symbole, deren Charts nach Bid-Preisen (in der Spezifikation angegeben) gezeichnet werden, werden Bid High und Bid Low Preise angezeigt. Für Finanzinstrumente, deren Charts nach Last-Preisen gezeichnet werden, werden Last High und Last Low angezeigt.

    Mit den Spalten High/Low wird die Last-Spalte automatisch aktiviert, wenn es mindestens ein Symbol in der Marktübersicht gibt, dessen Charts nach Last-Preisen gezeichnet werden.

  4. Es wurde die Option hinzugefügt, Tick-Historie benutzerdefinierter Finanzinstrumente zu bearbeiten. Klicken Sie auf "Symbole" im Kontextmenü der Marktübersicht, wählen Sie ein benutzerdefiniertes Symbol aus und rufen Sie den gewünschten Zeitraum im Ticks-Reiter ab.

    • Die Werte können durch einen Doppelklick geändert werden.
    • Für das Hinzufügen oder Löschen von Einträgen, verwenden Sie das Kontextmenü.
    • Um mehrere Balken/Ticks zu löschen, wählen Sie diese mit der Maus aus, während Sie Shift oder Strg+Shift drücken und halten.




    Die geänderten Einträge werden wie folgt hervorgehoben:

    • grüner Hintergrund — geänderte Eintrag
    • grauer Hintergrund — gelöschter Eintrag
    • gelber Hintergrund — hinzugefügter Eintrag

    Um die Änderungen zu speichern, klicken Sie auf "Änderungen übernehmen" im unteren Teil des Fensters.

  5. Im Verzeichnis des Navigators werden nun vorläufige Konten angezeigt.

    Händler können Anfragen an den Broker direkt aus Desktop-Terminals senden, um ein Realkonto zu eröffnen. Dafür reicht es, eine einfache Form mit Kontaktdaten wie beim Eröffnen eines Demo-Kontos auszufüllen. Danach wird ein vorläufiges Konto für den Händler erstellt. Weiter setzt sich der Broker mit dem Händler in Verbindung, um einen Vertrag zu schließen, und erstellt aus dem vorläufigen Konto ein Realkonto.




  6. Anzeige der Zeit in Millisekunden im Kurse-Fenster hinzugefügt:




  7. Das Scanning verfügbarer Server wurde im Dialog der Eröffnung eines neuen Kontos beschleunigt.
  8. Die Anzeige des grafischen Objekts "Trendlinie" mit den aktivierten Optionen "Strahl nach links" und "Strahl nach rechts" wurde korrigiert.
  9. Die Arbeit mit einer großen Anzahl interner E-Mails (hundert tausende) wurde optimiert.
  10. Die Arbeit des Terminals mit einer großen Anzahl von Finanzinstrumenten (50 Tausend und mehr) wurde optimiert.
  11. Es wurde die Optimierung der Tick-Historie benutzerdefinierter Symbole hinzugefügt, die nach dem Bearbeiten der Historie ausgeführt wird.

MetaEditor

  1. 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.

    Vor dem Update auf die neue Version der Plattform empfehlen wir alle lokalen Änderungen im Storage zu speichern (Commit ausführen).

    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:

    • Wenn Sie den Storage in der aktuellen Kopie des MetaEditors noch nicht verwendet haben, klicken Sie auf "MQL5 Storage aktivieren" im Kontextmenü des Navigator-Fensters. Alle vorhandenen Verzeichnisse und Dateien werden auf Ihren lokalen PC übertragen.
    • Wenn Sie mit dem Storage bereits gearbeitet haben, klicken Sie auf "Dateien aus dem Storage erhalten" im Kontextmenü eines konkreten Projekts oder des MQL5 Wurzelelements im Navigator-Fenster, um Dateien zu extrahieren.

    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.

    Die Eigenschaften des Programms in der Projektdatei haben Vorrang vor den Eigenschaften, die im Quellcode angegeben sind. Wenn Sie Eigenschaften sowohl im Projekt als auch im Quellcode angeben, werden die im Projekt angegebenen Eigenschaften verwendet.




    Es wurden zwei neue Optionen für die Kompilierung von MQL5-Programmen den Projekteigenschaften hinzugefügt:

    • Zusätzliche Optimierung aktivieren — Anwendungen mit deaktivierter Optimierung werden zwar schneller kompiliert, laufen aber langsamer.
    • Divisoren mit Gleitkomma prüfen — Anwendungen mit deaktivierter Überprüfung arbeiten etwas schneller, weil die Division-durch-Null-Fehler bei der Ausführung des Codes nicht überprüft werden.

    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:

    • Privates Projekt
    • Jeder darf am Projekt teilnehmen
    • Teilnahme am Projekt auf Anfrage




    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.





    Jeder Teilnehmer erhält nur Leserechte. Um die Rechte zu erhalten, eigene Änderungen im Storage vorzunehmen, wenden Sie sich an den Autor des Projekts. Um seinen bzw. ihren Benutzernamen zu erfahren, öffnen Sie die Eigenschaften des Projekts über das Kontextmenü.

  2. Es wurde die Möglichkeit hinzugefügt, verschiedene Eigenschaften und Ressourcen in den Code des Programms ganz einfach einzufügen. Sie können zum Beispiel eine Include-Datei ganz schnell in den Code einfügen. Wählen Sie "Einfügen — MQH als #incude" und danach die gewünschte Include-Datei im erschienenen Fenster aus. Danach wird die Anweisung #include mit dem richtig angegebenen Pfad zur ausgewählten Datei in den Code des Programms eingefügt.




    Über dieses Menü können Sie auch Dateien als ein binäres Array oder ein Text-Array in den Code eines Programms einfügen. Sie können zum Beispiel Vorlagen von Charts samt Expert Advisors/Indikatoren übertragen: fügen Sie ihre Vorlage in den Code des Programms als Array ein und speichern Sie ihn mithilfe der FileSave Funktion auf der Festplatte. Danach kann man die Vorlage direkt aus dem Expert Advisor mithilfe der Funktion ChartApplyTemplate auf den Chart anwenden.
    //+------------------------------------------------------------------+
    //| 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");
      }

  3. Es wurde die Option hinzugefügt, Strings in die Formate ASCII, HEX und Base64 umzuwandeln. Wählen Sie einen String im Quellcode aus und klicken Sie auf den gewünschten Befehl im Menü "Bearbeiten — Umwandeln":




  4. Die Suche nach Dateien ohne Berücksichtigung der Groß- bzw. Kleinschreibung wurde korrigiert.
  5. Es wurde ein Fehler bei der Berechnung des Wertes eines Ausdrucks vom Typ x.y[0][1].z behoben.
  6. Die Navigation im Code mithilfe der Buttons "Weiter" und "Zurück" wurde korrigiert.

MQL5

  1. Es wurde ein neuer Online-Service für einen zusätzlichen Schutz von MQL5-Programmen hinzugefügt — MQL5 Cloud Protector. Dieser Schutz ist gleich dem Schutz, der im MetaTrader Market, dem größten Marktplatz von Handelsanwendungen, verwendet wird, wo die von Verkäufern eingereichten Produktdateien (EX5) in nativen Code kompiliert werden.

    Nun ist dieser Schutz für jeden Nutzers verfügbar. Man muss nur den Befehl Service — MQL5 Cloud Protector im MetaEditor ausführen. Der einzige Unterschied zum Schutz im Market besteht darin, dass die Datei nicht an den PC des Nutzers gebunden wird. Die durch den MQL5 Cloud Protector geschützten Dateien können auf allen Rechnern wie EX5-Dateien gestartet werden.
    MQL5 Cloud Protector ist ein sicherer Service. Ein zusätzlicher Schutz wird nur auf eine kompilierte Datei angewandt. Der Quellcode wird nicht an den Service weitergeleitet. Zuerst wird ein Programm in eine EX5-Datei auf dem PC des Nutzers kompiliert, danach wird die kompilierte Datei über einen verschlüsselten Kanal an den Service übertragen, geschützt und an den Nutzer zurückgeschickt.



  2. Es wurden Funktionen für das Arbeiten mit benutzerdefinierten Finanzinstrumenten hinzugefügt.

    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

  3. Der Standardbibliothek wurden Template-Sammlungen von Daten hinzugefügt, die Klassen und Benutzeroberflächen für das Definieren von Sammlungen auf Basis von Templates beinhalten. Die neuen stark typisierten Sammlungen sind bequem für die Entwicklung von Programmen und zeigen eine hohe Leistung bei der Arbeit mit Daten.

    Die Bibliothek befindet sich im Verzeichnis des Terminals im Ordner Include\Generic.

  4. Es wurde die Unterstützung für Vorlagen für Daten vom Typ union hinzugefügt.
  5. Es wurde die Eigenschaft SYMBOL_VISIBLE hinzugefügt. Der Aufruf von SymbolInfoInteger(symbol, SYMBOL_VISIBLE) gibt false zurück, wenn das angegebene Symbol in der Marktübersicht nicht sichtbar ist.
  6. Es wurde das Ereignis CHARTEVENT_MOUSE_WHEEL hinzugefügt. Das Ereignis wird beim Scrollen oder beim Drücken auf das Mausrad auf dem Chart aufgerufen (wenn CHART_EVENT_MOUSE_WHEEL für ihn auf true gesetzt wurde).
  7. Es wurden neue Chart-Eigenschaften hinzugefügt:

    • CHART_EVENT_MOUSE_WHEEL — das Ereignis des Scrollens und Drückens auf das Mausrad auf dem Chart CHART_EVENT_MOUSE_WHEEL aktivieren/deaktivieren. Möglichen Werte: 0 und 1.
    • CHART_CROSSHAIR_TOOL — die Option der Umschaltung des Cursors in den Fadenkreuz-Modus durch das Drücken auf die mittlere Maustaste aktivieren/deaktivieren. Möglichen Werte: 0 und 1.
    • CHART_CONTEXT_MENU — die Anzeige des Kontextmenüs durch einen Klick auf die rechte Maustaste im Chart aktivieren/deaktivieren. Möglichen Werte: 0 und 1.

  8. Puffer mit dem Stil DRAW_NONE werden nun bei der Berechnung des Maßstabs des Indikatorsfensters nicht berechnet.
  9. Es wurde die Erzeugung des Ereignisses CHARTEVENT_CHART_CHANGE beim Setzen von CHART_SCALEFIX (fester Maßstab) für den Chart hinzugefügt.
  10. Es wurde die Funktion ArraySwap hinzugefügt, die es erlaubt, den Inhalt dynamischer Arrays schnell zu verschieben.
    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.

  11. Es wurde die neue Eigenschaft TERMINAL_RETRANSMISSION hinzugefügt. Sie zeigt den Anteil von erneut gesendeten Netzwerkpaketen (Retransmits) im TCP/IP Protokoll für alle laufenden Anwendungen und Services auf dem PC. Auch in einem schnellen und richtig konfigurierten Netzwerk kann es zu Paketverlusten kommen, als Ergebnis gibt es keine Bestätigungen über die Zustellung von Paketen zwischen dem Empfänger und dem Sender. In solchen Fällen werden die "verloren gegangenen" Pakete erneut gesendet.

    Das Terminal berechnet diesen Wert nicht, er wird einmal pro Minute aus dem Betriebssystem abgerufen. Das ist kein Indikator der Verbindungsqualität zwischen einem konkreten Terminal und eines konkreten Handelsservers, denn er wird für die ganze Netzwerkaktivität berechnet, einschließlich Systemaktivität und Hintergrundsaktivität.

    Die Eigenschaft TERMINAL_RETRANSMISSION wurde zur Aufzählung ENUM_TERMINAL_INFO_DOUBLE hinzugefügt. Die Eigenschaft wird über die Funktion TerminalInfoDouble abgefragt.
  12. Das Arbeiten mit der Handelshistorie wurde verbessert.

Signale

  1. Die Angabe des Typs der Orderausführung (filling) bei erzwungenem Schließen von den nach einem Signal eröffneten Positionen wurde korrigiert. In den Einstellungen des Kopierens von Signalen gibt es die Option "Stop, wenn Kontostand unter XXX USD": wenn das Geld auf dem Konto unterhalb des angegebenen Levels liegt, wird das Kopieren von Handelssignalen automatisch beendet, alle Positionen werden zwingend geschlossen. Früher wurde in einigen Fällen beim erzwungenen Schließen von Positionen der Ausführungstyp für Orders falsch angegeben. Nun überprüft das Terminal die erlaubten Ausführungstypen in den Einstellungen des Symbols und gibt eine zulässige Variante an.

Tester

  1. Das Verhalten der Funktion HistoryOrderSelect im Strategietester entspricht nun dem Verhalten der gleichen Funktion im Kundenterminal.
  2. Das Verhalten der Funktionen CopyTicks und CopyTicksRange im Strategietester entspricht nun den gleichen Funktionen im Kundenterminal.
  3. Die Anzeige grafischer Objekte beim Testen im visuellen Modus wurde optimiert.
  4. Die Anzeige grafischer Objekte beim Testen im visuellen Modus wurde optimiert (mit dem börslichen Risikomanagementsystem). Nun wird nur Kapital (Equity) auf dem Chart angezeigt, Kontostand und Deposit Load werden nicht angezeigt. Der Handelsstatus solcher Konten wird nach Equity bewertet. Der Kontostand zeigt nur die Menge der Eigenmittel auf dem Konto und berücksichtigt nicht Vermögenswerte und finanzielle Verbindlichkeiten des Händlers. Deposit Load (margin/equity) wird nicht angezeigt, weil die Margin bei der Berechnung an der Börse den aktuellen Preis eines Vermögenswertes/einer Verbindlichkeit darstellt, und er verändert sich mit Equity.

  • Es wurde eine Übersetzung der Benutzeroberfläche ins Holländische hinzugefügt.
  • Die Dokumentation wurde aktualisiert.