Beta-Version der MetaTrader 5 Plattform Build 1625: Benutzerdefinierte Finanzinstrumente

 

Beta-Version der MetaTrader 5 Plattform Build 1625: Benutzerdefinierte Finanzinstrumente

Am 30. Juni 2017 wird ein Update für die MetaTrader 5 Plattform als Beta-Version veröffentlicht. Wir aktualisieren unseren öffentlichen Server MetaQuotes-Demo unter der Adresse access.metatrader5.com:443. Wir laden alle Trader ein, am Testen der neuen Version teilzunehmen, um alle Funktionen selbst auszuprobieren und den Entwicklern bei der Fehlerbehebung zu helfen.

Für das Update auf die Version 1625 der MetaTrader 5 Plattform reicht es, Verbindung zum Server access.metatrader5.com:443 herzustellen.

Nach dem diese Phase des Beta-Testens abgeschlossen wird, wird die neue Version der MetaTrader 5 Plattform veröffentlicht.

  1. Terminal: Es wurde die Option hinzugefügt, benutzerdefinierte Finanzinstrumente zu erstellen. Nun können Sie jedes Symbol erstellen, seine Einstellungen konfigurieren, eigene Preisdaten importieren und seine Charts ansehen.

    Erstellung eines benutzerdefinierten Symbols
    Öffnen Sie das Fenster der Verwaltung von Symbolen über das Kontextmenü "Martkübericht" und klicken Sie auf "Symbol erstellen":



    Ihnen stehen zahlreiche Parameter zur Verfügung. Die Liste der Parameter und deren Beschreibung können Sie sich in der Dokumentation anschauen. Sie können ganz schnell ein eigenes Symbol konfigurieren — kopieren Sie Parameter eines ähnlichen Symbols und ändern Sie, was Sie brauchen. Dafür wählen Sie ein vorhandenes Symbol aus dem Feld "Kopieren aus" aus.
    Der Name des benutzerdefinierten Symbols darf nicht mit den Namen von Symbolen des Brokers zusammenfallen. Wenn Sie sich mit dem Server verbinden, auf welchem ein Symbol vorhanden ist, dessen Name mit dem benutzerdefinierten Symbol zusammenfällt, wird das benutzerdefinierte Symbol gelöscht.
    Die Befehle für den Import und Export von Einstellungen sind auch hier verfügbar. Sie können benutzerdefinierte Symbole miteinander austauschen und diese zwischen Ihren Terminals übertragen. Die Einstellungen werden in Textdateien im JSON-Format exportiert.

    Verwaltung benutzerdefinierter Symbole
    Alle Symbole werden in der separaten Gruppe "Custom" angezeigt. Um ein Symbol zu ändern oder zu löschen, verwenden Sie das Kontexmenü in der Liste:




    Import der Preishistorie
    Sie können Kursdaten aus jeder Textdatei sowie aus Historiedateien des MetaTrader HST und HCC ins eigene Symbol importieren. Wählen Sie ein Symbol aus und gehen Sie zum Reiter "Balken". Momentan gibt es noch keine Unterstützung für den Import von Ticks.



    Im Importdialog geben Sie den Pfad zur Datei mit den Daten an und setzen Sie die Einstellungen:

    • Trennzeichen — Trennzeichen für Elemente in einer Textdatei.
    • Auslassung von Spalten und Zeilen — Anzahl der Spalten (von links nach rechts) und Zeilen (von oben nach unten), die man beim Import auslassen muss.
    • Verschiebung — Zeitverschiebung nach Stunden. Diese Option wird beim Importieren von Daten verwendet, die in einer anderen Zeitzone gespeichert wurden.
    • Nur ausgewählte — diese Option ermöglicht es, nur die im Ansichtsfenster ausgewählten Strings zu importieren. Die Strings können mithilfe der Maus ausgewählt werden, indem man die Taste "Ctrl" oder "Shift" drückt und hält.

    Die Datei mit Minutenbalken muss folgendes Format haben: Datum Zeit Open High Low Close Tickvolumen Volumen Spread. Zum Beispiel:
    2016.06.27    00:01:00    1.10024    1.10136    1.10024    1.10070    18    54000000    44
    2016.06.27    00:02:00    1.10070    1.10165    1.10070    1.10165    32    55575000    46
    2016.06.27    00:03:00    1.10166    1.10166    1.10136    1.10163    13    13000000    46
    2016.06.27    00:04:00    1.10163    1.10204    1.10155    1.10160    23    51000000    41
    Für ein benutzerdefiniertes Symbol können Sie die Daten jedes existierenden Symbols verwenden. Exportieren Sie sie (diese Option wurde in der vorherigen Version der Plattform hinzugefügt), modifizieren sie wenn nötig und importieren sie zurück.
    In MetaTrader 5 wird die Preishistorie als Minutenbalken gespeichert. Alle anderen Zeitrahmen werden basierend auf Minutenbalken erstellt. Beim Import können Sie auch Daten höherer Zeitrahmen verwenden, man muss aber dabei beachten, dass die Grafiken kleineren Zeitrahmen Lücken haben werden. Zum Beispiel beim Import von Stundendaten auf einem Minutenchart sehen Sie je einen Balken für jede Stunde.
    Die Preisdaten benutzerdefinierter Symbole werden in einem separaten Verzeichnis Custom (nicht in den Verzeichnissen für die Daten konkreter Handelsservern) gespeichert:
    C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

    Verwendung benutzerdefinierter Symbole
    Die Verwendung eigener Symbole unterscheidet sich kaum von der Verwendung von Symbolen, die vom Broker bereitgestellt werden. Sie werden auch im Markrübersicht-Fenster angezeigt, und man kann sich ihre Charts ansehen, auf welche Indikatoren und analytische Objekte gezogen werden können. Dabei kann man benutzerdefinierte Symbole nicht handeln.

    Mehr Möglichkeiten in den nächsten Versionen der Plattform
    Die Arbeit an benutzerdefinierten Symbolen ist noch nicht abgeschlossen, und in den weiteren Versionen der Plattform erscheinen neue Funktionen. Später wird die Option hinzugefügt, Historie in benutzerdefinierte Symbole direkt aus Expert Advisors zu importieren sowie Daten dieser Symbole in Echtzeit zu übertragen.

  2. Terminal: Es wurde das Filtern von Abschlüssen nach Volumen hinzugefügt.

    Man kann Abschlüsse mit einem Volumen, das kleiner als das angegebene ist, in Time & Sales ausblenden. Auf diese Weise bleiben im Time & Sales Fenster nur große Abschlüsse, die den Markt am meisten beeinflussen.

    Doppelklicken Sie auf die erste Zeile im Time & Sales Fenster, geben Sie das minimale Volumen in Lots an und klicken Sie dann auf irgendeinen anderen Bereich der Markttiefe. Die Abschlüsse werden ausgefiltert, und der aktuelle Wert des Filters erscheint in der Überschrift der Volumen-Spalte.



    Das minimale Volumen kann auch über das Kontextmenü von Time & Sales angegeben werden.

  3. Terminal: Es wurde die Option hinzugefügt, die Markttiefe an einen aktiven Chart einzubinden. Jedes Mal, wenn Sie zum Chart eines Symbols wechseln, wird das gleiche Symbol in der Markttiefe automatisch aktiviert. Sie brauchen nicht mehr die Markttiefe für jedes neue Symbol zu öffnen.




  4. Terminal: Es wurde die Aktualisierung von Werkzeugleisten nach dem Minimieren und Maximieren des Terminalfensters korrigiert.
  5. Terminal: Es wurde die Generierung der Handelshistorie von Positionen korrigiert, wenn sich die von Abschlüssen und Positionen überschneiden.
  6. MQL5: Es wurde die Möglichkeit hinzugefügt, MQL5-Programme auf Preishistorie zu profilieren. Dies ermöglicht es, die Performance von Programmen schnell zu überprüfen, ohne auf neue Ticks zu warten.

    Beim Profiling anhand realer Daten wird das Programm auf einem einfachen Chart im Terminal gestartet. Viele Programme, insbesondere Indikatoren, führen Berechnungen erst beim Eintreffen eines neuen Ticks durch (OnTick, OnCalculate). Daraus folgt, dass man für die Einschätzung der Performance auf das Eintreffen neuer Ticks in Echtzeit warten muss. Beim Testen anhand historischer Daten können Sie die richtige Belastung geben. Das Profiling wird im visuellen Modus im Strategietester gestartet, und Sie erhalten sofort viele Ereignisse des Eintreffens eines neuen Ticks.




  7. MQL5: Es wurde die Unterstützung für Unions hinzugefügt. Eine Union stellt einen besonderen Datentyp dar und setzt sich aus mehreren Variablen zusammen, die sich denselben Speicherbereich teilen. Daraus folgt, dass eine Union die Interpretation einer und derselben Reihenfolge der Bytes auf zwei (oder mehr) verschiedenen Weisen ermöglicht. Die Deklaration einer Union beginnt mit dem Schlüsselwort union.
    union LongDouble
    {
      long   long_value;
      double double_value;
    };
    
    Im Gegensatz zu Strukturen, gehören verschiedene Komponenten einer Union zu demselben Speicherbereich. In diesem Beispiel wurde die LongDouble Union deklariert, in welcher sich der Wert vom Typ long und der Wert vom Typ double einen Speicherbereich teilen. Man muss sich im Klaren sein, diese Union kann nicht gleichzeitig den gannzahligen Wert long und den reelen Wert double speichern (wie es in Strukturen der Fall ist), denn die Variablen long_value und double_value überschneiden sich (im Speicher). Das MQL5-Programm kann aber jederzeit die Information, die die Union beinhaltet, als einen ganzzahligen (long) oder reellen Wert (double) bearbeiten. Daraus folgt, dass die Union die Interpretation einer und derselben Reihenfolge von Daten auf zwei (oder mehr) verschiedenen Weisen ermöglicht.

    Bei der Deklaration einer Union reserviert der Compiler automatisch einen Speicherbereich, der für das Speichern des größten Typs nach Volumen in der Union der Variablen ausreichend ist. Für den Zugang zu einem Element der Union wird die gleiche Syntax wie für Strukturen verwendet, und zwar der Point-Operator.
    union LongDouble
    {
      long   long_value;
      double double_value;
    };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       LongDouble lb;
    //--- erhalten wir die ungültige Zahl -nan(ind) und geben sie aus
       lb.double_value=MathArcsin(2.0);
       printf("1.  double=%f                integer=%I64X",lb.double_value,lb.long_value);
    //--- die größte normalisierte Zahl (DBL_MAX)
       lb.long_value=0x7FEFFFFFFFFFFFFF;
       printf("2.  double=%.16e  integer=%I64X",lb.double_value,lb.long_value);
    //--- die kleinste positive normalisierte Zahl (DBL_MIN)
       lb.long_value=0x0010000000000000;    
       printf("3.  double=%.16e  integer=%.16I64X",lb.double_value,lb.long_value);
      }
    /*  Das Ergebnis der Ausführung
        1.  double=-nan(ind)                integer=FFF8000000000000
        2.  double=1.7976931348623157e+308  integer=7FEFFFFFFFFFFFFF
        3.  double=2.2250738585072014e-308  integer=0010000000000000
    */
    

  8. MQL5: Es wurde die automatische Generierung eines impliziten Copy Operators für Objekte von Strukturen und Klassen hinzugefügt. Nun erstellt der Compiler Copy Operators automatisch, was das Schreiben einfacher Einträge vom Typ b=a für Objekte ermöglicht:
    class Foo
      {
       int               value;
    public:
       string Description(void){return IntegerToString(value);};
       //--- Konstruktor standardmäßig
                         Foo(void){value=-1;};
       //--- Konstruktor mit Parametern   
                         Foo(int v){value=v;};
      };
    //+------------------------------------------------------------------+
    //|  Struktur, die Objekte vom Typ Foo beinhaltet                    |
    //+------------------------------------------------------------------+
    struct MyStruct
      {
       string            s;
       Foo               foo;
      };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //---
       MyStruct a,b;
       Foo an_foo(5);
       a.s="test";
       a.foo=an_foo;
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    //---
       Print("b=a");
       b=a;
    //---
       Print("a.s=",a.s," a.foo.Description()=",a.foo.Description());
       Print("b.s=",b.s," b.foo.Description()=",b.foo.Description());
    /*
       Das Ergebnis der Ausführung;
       a.s=test a.foo.Description()=5
       b.s= b.foo.Description()=-1
       b=a
       a.s=test a.foo.Description()=5
       b.s=test b.foo.Description()=5
    */
      }
    
    Im impliziten Operator wird das Kopieren von Objekten gliederweise bzw. "memberweise" umgesetzt.

    • Wenn ein Member das Objekt einer anderen Struktur oder Klasse ist, wird der Copy Operator dieses Objekts aufgerufen.
    • Wenn ein Member ein Array ist, wird die Funktion ArrayCopy für das Kopieren verwendet.
    • Wenn ein Member ein Array von Objekten ist, wird das aufnehmende Array mithilfe von ArrayResize auf die benötigte Größe erhöht.
    • Wenn ein Member ein Pointer auf ein Objekt ist, wird der Pointer und nicht das Objekt kopiert.

    Wenn nötig können Sie das Verhalten neu definieren und statt eines impliziten Copy Operators eine eigene Variante mithilfe der Überladung erstellen.

  9. MQL5: Es wurde die Speichernutzung beim Abrufen der Preishistorie aus Expert Advisors mithilfe der Copy* Funkion optimiert. Bei der Arbeit mit großen Datenmengen wird der Speicherverbrauch vielfach reduziert.

  10. MQL5: Nun gibt die TimeToStruct Funktion den Booleschen Wert zurück und ermöglicht es zu überprüfen, ob datetime in MqlDateTime erfolgreich umgewandelt wurde.
  11. MQL5: Es wurde das Verbot für die Verwendung der Funktionen FileWriteStruct und FileReadStruct für Strukturen, die Zeilen, dynamische Arrays, Objekte und Pointer hinzugefügt.
  12. MQL5: Es wurden die folgenden Statuscodes hinzugefügt:

    • TRADE_RETCODE_REJECT_CANCEL — die Anfrage auf die Aktivierung einer Pending Order abgelehnt, die Order gelöscht
    • TRADE_RETCODE_LONG_ONLY — die Anfrage wurde abgelehnt, weil die Regel "Nur Long-Positionen erlaubt" auf dem Symbol gesetzt wurde
    • TRADE_RETCODE_SHORT_ONLY — die Anfrage wurde abgelehnt, weil die Regel "Nur Short-Positionen erlaubt" auf dem Symbol gesetzt wurde
    • TRADE_RETCODE_CLOSE_ONLY — die Anfrage wurde abgelehnt, weil die Regel "Nur das Schließen existierender Positionen erlaubt" auf dem Symbol gesetzt wurde

  13. MQL5: Es wurde ein neuer Wert hinzugefügt, den die Funktion SymbolInfoInteger mit dem Parameter SYMBOL_ORDER_MODE zurückgibt. SYMBOL_ORDER_CLOSEBY — Erlaubnis einer Close By Operation - Schließen einer Position durch eine Gegenposition (Close By).
  14. MQL5: Der Aufzählung ENUM_SYMBOL_INFO_INTEGER wurde die Boolesche Eigenschaft SYMBOL_CUSTOM hinzugefügt. Dies erlaubt es zu erfahren, ob das Symbol benutzerdefiniert ist. Für das Erhalten der Eigenschaft verwenden Sie die Funktion SymbolInfoInteger.
  15. MQL5: Es wurde Option hinzugefügt, den Grund der Erstellung einer Order, eines Abschlusses und einer Position zu erfahren.

    Neue Eigenschaften


    Grund der Erstellung einer Order, eines Abschlusses und einer Position
    Für das Erhalten von Gründen der Erstellung von Transaktionen wurden drei Aufzählungen hinzugefügt:

    ENUM_POSITION_REASON ENUM_DEAL_REASON ENUM_ORDER_REASON Beschreibung des Grunds
    POSITION_REASON_CLIENT DEAL_REASON_CLIENT ORDER_REASON_CLIENT Die Operation wurde infolge der Auslösung einer Order ausgeführt, die einem Desktop-Terminal platziert wurde
    POSITION_REASON_MOBILE DEAL_REASON_MOBILE ORDER_REASON_MOBILE Die Operation wurde infolge der Auslösung einer Order ausgeführt, die in einer mobilen Anwendung platziert wurde
    POSITION_REASON_WEB DEAL_REASON_WEB ORDER_REASON_WEB Die Operation wurde infolge der Auslösung einer Order ausgeführt, die auf der Webplattform platziert wurde
    POSITION_REASON_EXPERT DEAL_REASON_EXPERT ORDER_REASON_EXPERT Die Operation wurde infolge der Auslösung einer Order ausgeführt, die durch ein MQL5-Programm - einen Expert Advisor oder ein Script platziert wurde
    - DEAL_REASON_SL ORDER_REASON_SL Die Operation wurde infolge der Auslösung von Stop Loss durchgeführt
    - DEAL_REASON_TP ORDER_REASON_TP Die Operation wurde infolge der Auslösung von Take Profit durchgeführt
    - DEAL_REASON_SO ORDER_REASON_SO Die Operation wurde infolge des Ereignisses Stop Out ausgeführt
    - DEAL_REASON_ROLLOVER - Der Abschluss wurde infolge der Verschiebung einer Position ausgeführt (das Ereignis ROLLOVER)
    - DEAL_REASON_VMARGIN - Der Abschluss wurde infolge der Anrechnung/Abbuchung der Variation Margin ausgeführt
    - DEAL_REASON_SPLIT - Der Abschluss wurde nach einem Split (Preissenkung) einer Aktie oder eines Vermögenswertes ausgeführt, auf welcher(m) es eine offene Position im Moment der Ankündigung des Splits gab

  16. MQL5: Die Synchronisierung und der Zugriff auf die Tickhistorie wurden optimiert.
  17. MQL5: Es wurde der Fehler der Rückgabe von Ticks ins statische Array in der CopyTicksRange Funktion korrigiert. Früher wurden in diesem Fall immer 0 Ticks zurückgegeben.
  18. MQL5: Es wurden verschiedene Verbesserungen in der Bibliothek der Fuzzy-Logik vorgenommen.
  19. Signals: Es wurde das Öffnen eines Signals auf der Webseite korrigiert, wenn kein Handelskonto verbunden ist.
  20. Tester: Die Arbeit mit der Historie von Orders und Abschlüssen optimiert und deutlich beschleunigt. Bei der Arbeit mit großen Datenmengen (Zigtausende Einträge in der Historie und mehr) wird die Geschwindigkeit um das Vielfache erhöht.
  21. Tester: Es wurde die Berechnung der Haltezeit einer Position im Testbericht korrigiert.
  22. MetaEditor: Es wurde die Anzeige statischer Arrays-Members einer Klasse im Debugger korrigiert.
  23. MetaEditor: Es wurde eine Liste aller Haltepunkte im Programm hinzugefügt, das debuggt wird. Um zur Liste zu wechseln verwenden Sie das Kontextmenü des Reiters "Debugging":



    Sie können zu jedem Haltepunkt durch einen Doppelklick gelangen.

  24. Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.