Was ist neu im MetaTrader 5

Die Aktualisierungen der Plattformen für den Desktop, Mobile und Web

16 September 2016
MetaTrader 5 build 1430: Aktualisierung des Exposure-Tabs

Terminal

  1. Es wurde ein neuer Algorithmus für die Zusammensetzung des Reiters "Aktiva" für den Wertpapiermarkt implementiert. Nun passt das Terminal die Anzeige der Aktiva an, je nach dem welches Risikomanagementsystem genutzt wird: Retail Forex, Futures oder Börsenmodell.

    Denjenigen, die Devisen oder Futures an einer Börse handeln, hilft der Reiter "Belastung" ihre aktuelle Lage auf dem Markt zu erfassen. Eine und dieselbe Währung kann in verschiedenen Symbolen vorkommen: als eine Währung in einem Paar, als Basiswährung usw. Sie können zum Beispiel entgegengesetzte Positionen auf GBPUSD, USDJPY und GBPJY haben. Sie können z.B. entgegengesetzte Positionen auf GBPUSD, USDJPY und GBPJY haben. In diesem Fall kann es problematisch sein zu verstehen, wie viel Devisen Sie haben und wie viel Sie schulden. Noch komplizierter ist es, wenn Sie nicht drei solche Positionen haben, sondern viel mehr. In diesem Fall können Sie den Kontostand im Reiter "Belastung" ansehen.
    Schauen wir uns ein Beispiel mit den gleichen drei Positionen an:

    Buy GBPJPY 1 lot at 134.027 — 100 000 GBP bekommen, 134 027 000 JPY gegeben
    Sell USDJPY 1 lot at 102.320 — 100 000 USD gegeben, 102 320 000 JPY bekommen
    Sell GBPUSD 1 lot at 1.30923 — 100 000 GBP gegeben, 103 920 USD bekommen

    Wir haben 100.000 GPB gleichzeitig gekauft und verkauft. Insgesamt haben wir 0 GBP, und diese Währung wird im Tab "Belastung" nicht angezeigt. US-Dollar: bei einer Transaktion gegeben, bei der anderen - bekommen. Der Reiter "Aktiva" berechnet den Endbetrag und addiert ihn zum aktuellen Kontostand, denn die Währung der Anlage ist auch USD. JPY kam in zwei Transaktionen vor, der Reiter zeigt den Endwert an.




    Diejenigen, die nach dem Börsenmodell handeln, können diesem Tab entnehmen, wie das Geld genutzt wird. Im Gegensatz zum vorherigen Modell wird das Geld bei der Ausführung von Trades direkt abgezogen/gutgeschrieben. Beim Kauf EURRUB bekommen Sie Euro, und abgezogen vom Konto wird der entsprechende Betrag in Rubel. Während des Handels kann der Kontostand sogar einen negativen Wert annehmen, und zwar wenn Sie mit geliehenen Mitteln handeln und erworbene Aktiva als Sicherung dienen. In dieser Situation hilft Ihnen der Reiter "Aktiva" den Kontostand zu verstehen.

    Darüber hinaus wird hier der Liquidationswert angezeigt — die Summe der Geldmittel auf dem Konto und der Wert (das Ergebnis) der Schließung aktueller Positionen zum Marktpreis.





  2. Es wurde ein Fehler bei der Anzeige des Transaktionstyps in der Historie behoben.
  3. Eine wiederholte Anzeige des Fensters mit Informationen über Risiken wurde bei einer erneuten Verbindung mit dem Handelskonto korrigiert.
  4. Das Arbeiten mit dem Dialog der Auswahl von Handelsinstrumenten bei einer großen Anzahl der Symbolen (ein tausend und mehr) wurde optimiert und korrigiert.
  5. Die Anzeige von Levels der eingebauten Indikatoren wurde korrigiert, die anhand von Moving Average berechnet werden (Bollinger Bands, Adaptive Moving Average usw.). Das Problem trat beim Zeichnen der Indikatoren in einem separaten Unterfenster auf.
  6. Es wurde ein Fehler behoben, der dazu geführt hatte, dass das Platzieren einer Futures-Order nicht möglich war. Der Fehler trat auf, wenn ein Preis in der Order mit der im Kontrakt festgelegten oberen oder unteren Preisgrenze übereinstimmte.

MQL5

  1. Die Kompilierung von MQL5-Programmen wurde optimiert und beschleunigt.
  2. Für Klassen, Strukturen und Funktionen wurde die Unterstützung der Modifier final und override hinzugefügt.

    Modifier final für Klassen und Strukturen
    Das Vorhandensein des final Modifiers bei der Deklaration der Struktur verbietet eine weitere Vererbung. Wenn es nicht notwendig ist, die Klasse (Struktur) weiter zu modifizieren oder wenn keine Änderungen aus Sicherheitsgründen zulässig sind, deklarieren Sie diese mit dem final Modifier. Dabei werden alle Glieder der Struktur implizit auch als final gelten.
    class CFoo final
      {
      //--- Body der Klasse
      };
     
    class CBar : public CFoo
      {
      //--- Body der Klasse
      };
    Bei einem Versuch der Vererbung von einer Struktur mit dem final Modifier, wie im Beispiel oben, gibt der Compiler einen Fehler aus:
    cannot inherit from 'CFoo' as it has been declared as 'final'
    see declaration of 'CFoo'

    Modifier override für Funktionen
    Der override Modifier bedeutet, dass die zu deklarierende Funktion die Methode der Basisklasse unbedingt überschreiben muss. Dank diesem Modifier kann man Fehler beim Überschreiben vermeiden, wie z.B. zufällige Änderung der Methodensignatur. In der Basisklasse ist zum Beispiel die Methode func definiert, die die Variable vom Typ int als Argument hat:
    class CFoo
      {
       void virtual func(int x) const { }
      };
    Weiter wird die Methode in der abgeleiteten Klasse neu definiert:
    class CBar : public CFoo
      {
       void func(short x) { }
      };
    Aber durch einen Fehler ändert sich der Typ des Arguments von int zu short. In diesem Fall wird die Methode nicht mehr überschrieben, sondern überladen. In einigen Situationen kann der Compiler entsprechend dem Algorithmus der überladenen Funktion eine in der Basisklasse definierte Methode statt einer überschriebenen auswählen.

    Um solche Fehler zu vermeiden, sollte man der Methode den override Modifier hinzufügen.
    class CBar : public CFoo
      {
       void func(short x) override { }
      };
    Wenn die Signatur beim Überschreiben geändert wird, kann der Compiler keine Methode mit der gleichen Signatur in der Basisklasse finden und gibt einen Kompilierungsfehler aus:
    'CBar::func' method is declared with 'override' specifier but does not override any base class method

    Modifier final für Funktionen

    Der Modifier final funktioniert umgekehrt: er verbietet, Methoden in abgeleiteten Klassen zu überschreiben. Wenn die Implementierung der Methode abgeschlossen ist, deklarieren Sie diese mit dem final Modifier, damit sie später garantiert nicht verändert wird.
    class CFoo
      {
       void virtual func(int x) final { }
      };
     
    class CBar : public CFoo
      {
       void func(int) { }
      };
     
    Bei einem Versuch der Vererbung von einer Struktur mit dem final Modifier, wie im Beispiel oben, gibt der Compiler einen Fehler aus:
    'CFoo::func' method declared as 'final' cannot be overridden by 'CBar::func'
    see declaration of 'CFoo::func'
  3. Die Kompilierung von Template-Funktionen mit Standardparametern wurde korrigiert.

Market

  1. Es wurde eine Reihe von Fehlern beim Sortieren von Produkten im Market behoben.

Tester

  1. Die Aktualisierung aktueller Marktpreise offener Orders und Positionen wurde im visuellen Modus des Strategietesters korrigiert.
  2. Slippage bei der Ausführung von Buy Limit und Sell Limit Orders beim Testen anhand Börseninstrumenten beseitigt.
  3. Es wurde ein Fehler behoben, der in einigen Fällen zur Generierung falscher Preise im Testmodus "Nur Eröffnungspreise" führte.
  4. Die Generierung der OnTradeTransaction Events beim Testen korrigiert.
  5. Beim Testen anhand realer Ticks wird die Information über die Nichtübereinstimmung der Tick-Preise (Bid oder Last, je nach dem anhand welchen Preises der Balken gebildet wird) mit Low oder High des aktullen Minutenbalkens im Journal des Strategietesters angezeigt.

MetaEditor

  1. Es wurden Fehler der Anzeige von Daten des Profilings in Quellcode-Dateien behoben.
  2. Die Dokumentation wurde aktualisiert.
19 August 2016
MetaTrader 5 Build 1395: Schnellere Handeslausführungen und Verbesserungen bei der visuellen Ausführung des Strategietesters

Terminal

  1. Das Client-Terminal bietet nun eine schnellere Orderausführung.
  2. Es wurde ein Fehler behoben, der dazu geführt hatte, dass das Ausführen von MQL5-Anwendungen in Terminals, die in 32 Bit Umgebungen von Windows 10 mit der Buildnummer 1607 liefen, nicht möglich war.
  3. Der Navigator zeigt jetzt an, ob ein Konto im Hedging- oder im Netting-Modus handelt.
  4. Dem Navigator wurde ein neuer Befehl innerhalb des Kontextmenüs hinzugefügt. Dieser erlaubt es dem Anwender, sich über den ausgewählten Account direkt mit dem Web-Terminal zu verbinden.
  5. Die Hilfe-Sektion des Menüs wurde aktualisiert. Sie beinhaltet jetzt auch Links zu den Video-Anleitungen.
  6. Es wurde eine Reihe von Fehlern bei der Arbeit auf Bildschirmen mit hoher Auflösung (4K) behoben.
  7. Die Übersetzung der Benutzeroberfläche ins Persische wurde aktualisiert.

MQL5

  1. Es wurden neue 'void *' Pointers hinzugefügt, um es den Anwendern zu ermöglichen, abstrakte Sammlungen von Objekten zu erzeugen. In der Variablen von diesem Typ kann der Pointer zu einem Objekt von einer beliebigen Klasse gespeichert werden.
    Es wird empfohlen, den Operator dynamic_cast<Name der Klasse *>(Pointer void *) für eine Rückwärts-Konvertierung zu verwenden. Wenn eine Konvertierung nicht möglich ist, ist das Ergebnis NULL.
    class CFoo { };
    class CBar { };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       void *vptr[2];
       vptr[0]=new CFoo();
       vptr[1]=new CBar();
    //---
       for(int i=0;i<ArraySize(vptr);i++)
         {
          if(dynamic_cast<CFoo *>(vptr[i])!=NULL)
             Print("CFoo * object at index ",i);
          if(dynamic_cast<CBar *>(vptr[i])!=NULL)
             Print("CBar * object at index ",i);
         }
       CFoo *fptr=vptr[1];  // Führt zu einem Fehler bei der Umwandlung der Pointer, vptr[1] ist kein Objekt von CFoo
      }
    //+------------------------------------------------------------------+
  2. Für Strings wurde die Unterstützung des Operators [ ] hinzugefügt.Dieser Operator ermöglicht es dem Anwender, ein Symbol aus einem String über den Index zu bekommen. Falls sich der angegebene Index außerhalb des Strings befindet, dann ist das Ergebnis 0.
    string text="Hello";
    ushort symb=text[0];  // Gibt den Code des Symbols 'H' zurück
    
  3. Es wurde eine zweite Version des TesterInit Eventhandlers mit der int OnTesterInit(void) Signatur hinzugefügt. Dieser kann INIT_SUCCEEDED (0) oder INIT_FAILED (oder jeden anderen Wert ungleich Null) zurückgeben. Falls OnTesterInit einen Wert ungleich Null zurückgibt, dann wird die Optimierung nicht gestartet.
  4. Es wurde ein Fehler behoben, der dazu geführt hat, dass bei den verschiedenen überladenen Methoden von ChartGetString unterschiedliche Ergebnisse zurückgegeben worden sind.

Tester

  1. Es wurden weitere Kommandos und Hotkeys für das visuelle Testen hinzugefügt. Es ist jetzt möglich, in dem visuellen Tester die Charts genauso zu konfigurieren, wie es auch im Terminal möglich ist: Änderungen von Farben, die Sichtbarkeit von verschiedenen Control-Elementen, das Anwenden von Vorlagen, etc.




  2.  Es wurde ein Fehler im Zusammenhang mit der sleep-Funktion im Testmodus "Nur Eröffnungspreise" behoben.
  3.  Es wurde ein Fehler behoben, der dazu geführt hat, dass bei den Timeframes W1 und MN1, die Bars entsprechend ihrem Status falsch gebildet worden sind.

MetaEditor

  1. Es wurde eine Übersetzung in die traditionelle chinesische Sprache hinzugefügt.

Die Dokumentation wurde aktualisiert.

8 August 2016
MetaTrader 5 iOS Build 1371
  • Der neue MetaTrader 5 für iPhone/iPad verfügt über ein komplett neues Design von Nachrichten. Nun werden Konversationen auf MQL5.community und Push-Benachrichtigungen von der Desktop-Plattform als Chats ähnlich wie in populären mobilen Messenger angezeigt.
  • Außerdem können Sie ab jetzt eine der 23 Sprachen direkt auf der Plattform auswählen. Wählen Sie Ihre bevorzugte Sprache im Bereich "Über", ohne die Sprache des Geräts ändern zu müssen.
5 August 2016
MetaTrader 5 Android Build 1338
  • Es wurde ein MQL5.community Chat hinzugefügt.
  • Darüber hinaus zeichnet sich die neue Version von MetaTrader 5 Android durch eine einfache Übertragung von SSL-Zertifikaten aus Desktop-Plattformen aus.
  • Es wurde eine Übersetzung ins Ungarische und Rumänische hinzugefügt. 
15 Juli 2016
MetaTrader 5 Build 1375: Time & Sales und Zugang zu Ticks beim Testen

Terminal

  1. Der Markttiefe wurde die Funktion Time & Sales hinzugefügt.




    Was ist Time & Sales?
    Die Funktion Time & Sales zeigt eine Liste aller Trades in der Echtzeit an, die an der Börse ausgeführt werden. Zu jedem Trade werden Zeit der Ausführung, Richtung (Kauf oder Verkauf), Preis und Volumen angegeben. Für eine bessere visuelle Analyse ist jede Traderichtung mit einer bestimmten Farbe markiert: blau - Kauf, pink - Verkauf, grün - unbestimmte Richtung. Das Tradevolumen wird zusätzlich als Histogramm dargestellt.

    Wie Time & Sales hilft, den Markt zu verstehen
    Time & Sales ermöglicht es Ihnen, Märkte genauer zu analysieren. Nach der Traderichtung kann der Trader erfahren, wer die Ausführung des Trades initiiert hat: Käufer oder Verkäufer. Das Volumen von Trades hilft das Verhalten von Marktteilnehmern zu verstehen: ob es um große oder kleine Player geht, wie aktiv sie sind usw. Die Geschwindigkeit der Ausführung und das Volumen von Trades an bestimmten Preis Levels erlauben es Ihnen, die Bedeutung dieser Levels einzuschätzen.

    Wie die Daten von Time & Sales verwendet werden
    Neben der Möglichkeit, die Tabelle visuell zu analysieren, können Sie Daten von Trades in eine CSV-Datei exportieren. Dann können Sie diese mithilfe von jedem anderen Programm weiter studieren, z.B. MS Excel. Alle Daten werden durch ein Komma voneinander getrennt:
    Time,Bid,Ask,Last,Volume,Type
    2016.07.06 16:05:04.305,89360,89370,89370,4,Buy
    2016.07.06 16:05:04.422,89360,89370,89370,2,Buy
    2016.07.06 16:05:04.422,89360,89370,89370,10,Buy
    2016.07.06 16:05:04.669,89360,89370,89370,1,Buy
    2016.07.06 16:05:05.968,89360,89370,89360,7,Sell
    Um die Daten in eine Datei zu speichern, rufen Sie das Kontextmenü auf:



    Um die Richtung von Trades genau feststellen zu können, muss die Plattform des Brokers auf die Version 1375 aktualisiert werden.
  2. Die Zeit zwischen dem Eingehen eines eines Ticks/einer Veränderung der Markttiefe und dem Aufruf von OnTick und OnCalculate wurde wesentlich reduziert. Das Gleiche gilt für die Zeit zwischen dem Eingehen eines Ereignisses über die Änderung des Handelsstatus und dem Aufruf von OnTrade und OnTradeTransaction. Auf diese Weise werden nun MQL5-Programme schneller auf Marktereignisse reagieren.
  3.  Handelsanfragen werden nun unter Verwendung von einer erweiterten Authentifizierung mithilfe von SSL-Zertifikaten schneller gesendet.
  4.  Die Übersetzung der Benutzeroberfläche in Persisch aktualisiert.
  5. Die Anzeige von Befehlen für das Setzen von SL/TP im Kontextmenü des Charts im Hedge-Modus wurde korrigiert.

Tester

  1. Jetzt kann die Tickhistorie beim Testen mithilfe der CopyTicks Funktion abgerufen werden. Bisher war die Funktion nicht im Strategietster verfügbar.

    • Im Modus "Jeder Tick" liefert die Funktion die Historie der generierten Ticks. Man kann bis zu 128.000 letzte Ticks abrufen.
    • Im Modus "Jeder Tick anhand realer Ticks" liefert die Funktion die Historie realer Ticks. Die Tiefe der angeforderten Daten hängt nur von der Verfügbarkeit dieser Daten ab. Es ist aber zu beachten, dass die letzten 128.000 Ticks im Strategietester zwischengespeichert werden, und relativ schnell abgerufen werden können. Eine tiefere Historie wird unmittelbar von der Festplatte abgerufen, aus diesem Grund wird die Ausführung mehr Zeit in Anspruch nehmen.
    • In den Modi "Nur Eröffnungspreise" und "1 Minute OHLC" funktioniert die Funktion nach wie vor nicht, denn die Tick-Historie wird in diesen Modi nicht generiert.

  2. Unterstützung für Millisekunden hinzugefügt. In den früheren Versionen diente eine Sekunde als Zeitquantum.

    • Nun sind die Funktionen EventSetMillisecondTimer und Sleep im Strategietester noch genauer geworden.
    • Die Genauigkeit beim Senden von Ticks während des Testens von Mehrwährungsexperten wurde verbessert. Wenn eine Sekunde mehrere Ticks enthielt (z.B. das Tickvolumen eines Minutenbalken war größer als 60), wurde bisher für alle Ticks eine und dieselbe Zeit gesetzt. Beim Testen von Experten, die mit einer Währung arbeiten, spielt dies keine Rolle, denn die Ticks werden dem Expert Advisor sequentiell übergeben. Aber beim Testen auf mehreren Währungspaaren ist es wichtig zu wissen, das Tick von welchem Paar zuerst eingegangen ist. Früher wurden die Ticks von jedem Symbol dem Expert Advisor sequentiell übergeben: zuerst alle Ticks pro Sekunde von einem Symbol, danach - von dem anderen. Nun werden sie unter Berücksichtigung von Millisekunden gesendet.

      Beim Testen unter Verwendung von realen Ticks werden Millisekunden den ursprünglichen Tickdaten entnommen. Bei der Generierung von Ticks werden Millisekunden entsprechend dem Tickvolumen gesetzt. Enthält zum Beispiel eine Sekunde drei Ticks, dann wird ihre Zeit in Millisekunden 000, 333 und 666 sein.

  3. Pending Orders und SL/TP Orders werden in den Modi "Nur Eröffnungspreise" und "1 Minute OHLC" zu einem angegebenen und nicht zum aktuellen Preis im Moment der Ausführung ausgeführt. Der Algorithmus der Ausführung zum Marktpreis, der in den präzisen Modi (alle Ticks und reale Ticks) verwendet wird, passt für die groben Modi nicht. In den letzteren Modi werden keine Zwischenticks generiert, und der angegebene Preis kann sich stark vom Marktpreis im Moment der Ausführung (Open oder OHLC) unterscheiden. Die Ausführung von Trades zu einem angegebenen Preis in den Modi "Nur Eröffnungspreise" und "1 Minute OHLC" liefert genauere Testergebnisse.

  4. Unterstützung für Forward-Tests im visuellen Modus hinzugefügt. Für Backtest und Forward-Test werden nun zwei separate Fenster des visuellen Testens geöffnet. Dies erlaubt es, die Ergebnisse des Expert Advisors in verschiedenen Perioden miteinander zu vergleichen.




    Das Fenster des Forward-Testens erscheint nur nach dem Abschluss des Testens in der Hauptperiode.

  5. Auf dem Chart des Testens wird nun statt des Margin Levels die Belastung der Einlage angezeigt, die als die Relation zwischen der Margin und dem Kapital (margin/equity) berechnet wird.


  6. Tester: Berechnung der Kommission als Zinssatz per annum beim Testen korrigiert.

  7. Tester: Neuberechnung und Anzeige des Kontostandes auf dem Chart korrigiert, der im Laufe des Testens erstellt wird.

MQL5

  1. Das Verhalten der Funktion OrderSend wurde beim Platzieren, Modifizieren und Löschen von Orders geändert. Die Änderungen betreffen nur die Orders, die an externe Handelssysteme gesendet werden. In den früheren Versionen wurde die Funktionssteuerung von OrderSend zurückgegeben, nachdem die Order auf dem Server des Brokers erfolgreich platziert (bearbeitet wurde). Nun wird die Steuerung nur dann zurückgegeben, wenn der Server des Brokers eine Benachrichtigung vom externen Handelssystem bekommt, dass die Order erfolgreich platziert wurde.

    Nun wird die Steuerung nur dann zurückgegeben, wenn der Server des Brokers eine Benachrichtigung vom externen Handelssystem bekommt, dass die Order erfolgreich platziert wurde.




  2. Der Struktur des Handelsergebnisses MqlTradeResult wurde das Feld retcode_external hinzugefügt - der Code eines Fehlers im externen Handelssystem. Das Hinzufügen und die Typen dieser Fehler hängen vom Broker und dem externen Handelssystem ab, an welches Transaktionen gesendet werden. Zum Beispiel werden sich die retcode_external Werte, die von der Moskauer Börse ausgefüllt wurden, von denen der DGCX unterscheiden.

  3. Der Aufzählung ENUM_CHART_PROPERTY_STRING wurden die Eigenschaften CHART_EXPERT_NAME und CHART_SCRIPT_NAME hinzugefügt. Nun kann man mithilfe der Funktion ChartGetString den Namen eines Expert Advisors bzw. eines Skripts feststellen, der einem durch den chart_id Parameter definierten Chart angefügt wurde.

Signals

  1. Es wurde ein Fehler behoben, wegen dessen die Close By Transaktionen in einigen Fällen nicht kopiert wurden.
  2. Die automatische Anpassung der Währungspaare, die RUB und RUR enthalten, wurde verbessert.

Market

  1. Die Sortierung nach der Produktkategorie wurde korrigiert.

MetaEditor

  1. Das Setzen des Fokusses auf Textfeld beim Öffnen des Dialogs der Ersetzung wurde korrigiert.
  2. Das Massenersetzen von Text wurde bei der Suche nach oben von der aktuellen Position korrigiert.


Die Dokumentation wurde aktualisiert.
5 Juli 2016
MetaTrader 5 Webplattform: Offizielles Release

Nach zwei Monaten nach dem öffentlichen Testen wurde die Webversion der Multi-Asset-Plattform MetaTrader 5 offiziell herausgegeben. Mit der Webplattform MetaTrader 4 können Sie von jedem Browser aus in jedem Betriebssystem handeln. Die Plattform soll nicht auf Ihren PC installiert werden, Sie brauchen nur einen Internetanschluss und einen Browser.

Die Benutzerfreundlichkeit und die Cross-Plattform-Eigenschaft des Webterminals wird durch die Vorteile der MetaTrader 5 Desktopversion ergänzt. Dazu gehören die Schnelligkeit, die Multi-Asset-Feature und erweiterte Handelsfunktionen. Das Hauptmerkmal dieser Version stellt die Markttiefe dar, die es erlaubt Markt- und Pending Orders mit einem Klick zu platzieren.

Darüber hinaus erlaubt es die Webplattform, technische Analyse durchzuführen und Handelsoperationen genauso wie in der Desktop-Version auszuführen. Die Anwendung bietet:

  • Netting und Hedging-Systeme für die Positionsberechnung,
  • 31 technische Indikatoren,
  • 23 analytische Objekte,
  • Ein-Klick-Handel und der ganze Set von Handelsorders,
  • die Benutzeroberfläche des Programms ist in 41 Sprachen verfügbar.
19 Mai 2016
MetaTrader 5 iOS Build 1335

Nun ist es einfach, SSL-Zertifikate aus der Desktop-Plattform in die mobile zu übertragen. iTunes wird nicht mehr benötigt.

Konten in MetaTrader 5 kann man zusätzlich durch ein Zertifikat geschützt werden, ohne dessen man sich nicht in das Konto einloggen kann. Wenn das Zertifikat in der Desktop-Plattform erstellt wurde, muss es für den Zugriff auf das Konto in der mobilen Plattform übertragen werden.

Um ein Zertifikat zu übertragen, öffnen Sie die Desktop-Version von MetaTrader 5, klicken Sie mit der rechten Maustaste auf dem Konto im Navigator-Fenster und wählen Sie "Übertragen" aus. Geben Sie ein Passwort für den Schutz des Zertifikats ein, öffnen Sie das mobile Terminal und loggen Sie sich ein. Es wird Ihnen angeboten, das Zertifikat zu importieren.

Darüber hinaus gibt es einen Migrations-Dialog für die Konten, die aus dem MetaTrader 4 übertragen wurden. Wenn Ihr Konto auf die Plattform der fünften Generation übertragen wurde, werden Sie herzlichst begrüßt und über Features der Plattform informiert. Anschließend wird es Ihnen angeboten, Ihr Passwort zu ändern.

13 Mai 2016
MetaTrader 5 Build 1340: Verschieben von Zertifikaten und Verbesserungen im Tester

Terminal

  1. Nun kann man Zertifikate für eine Verbindung mit erhöhter Sicherheit ganz einfach aus dem Desktop-Terminal in mobile Terminals übertragen.

    Auf der Handelsplattform ist nun eine erweiterte Autorisierung verfügbar: neben dem Passwort wird das Konto zusätzlich durch ein spezielles SSL-Zertifikat gesichert. Das Zertifikat stellt eine Datei dar, die für das Konto auf einem Handelsserver generiert wurde. Die Datei ist einmalig und ohne diese Datei ist es unmöglich, sich in das Konto einzuloggen.

    Früher wenn ein Zertifikat über die Desktopversion des Terminals angefordert und generiert wurde, musste man die Datei manuell auf ein Gerät übertragen und anschließend installieren, um das Konto im MetaTrader 5 für iPhone/iPad oder Android zu nutzen. Nun ist es einfacher geworden, ein Zertifikat zu verschieben.

    Der Prozess der Übertragung
    Zertifikate werden über einen Handelsserver verschoben:

    • Das Zertifikat wird zuerst im Desktop-Terminals verschlüsselt: der Kontoinhaber gibt ein Passwort ein, mit dem das Zertifikat unter Verwendung eines sicheren Algorithmus AES-256 verschlüsselt wird. Nur der Nutzer kennt das Passwort, es wird nicht an den Server gesendet.
    • Weiter wird das verschlüsselte Zertifikat an einen Handelsserver gesendet, wo es aufbewahrt wird, bis das mobile Terminal das Passwort erhält, aber nicht länger als eine Stunde.
    • Um das Zertifikat zu erhalten, muss sich der Nutzer in sein Konto über das mobile Terminal einloggen. Anschließend wird der Nutzer gefragt, ob er das Zertifikat importieren will. Dafür muss er das Passwort eingeben, mit dem das Zertifikat im Desktop-Terminal verschlüsselt wurde.

    Das Verschieben des Zertifikats ist sicher: der Handelsserver wird nur als ein Zwischenlager für das Aufbewahren verwendet, das Passwort wird beim Kunden verschlüsselt und weder an den Server gesendet noch dort gespeichert.

    So verschieben Sie ein Zertifikat
    Loggen Sie sich in Ihr Handelskonto über das Desktop-Terminal ein und wählen Sie "Zertifikat verschieben" im Kontextmenü aus:



    Geben Sie das Hauptpasswort vom Konto ein, um zu bestätigen, dass das Konto tatsächlich Ihnen gehört. Als nächstes geben Sie ein Passwort ein, mit dem das Zertifikat vor dem Senden an den Handelsserver verschlüsselt wird. Das Passwort muss aus mindestens 8 Ziffern bestehen.

    Nachdem das Zertifikat an den Server erfolgreich gesendet worden ist, öffnen Sie das mobile Terminal und loggen Sie sich ein. Es wird Ihnen angeboten, das Zertifikat zu importieren. Bestätigen Sie und geben Sie das Passwort ein, das Sie im Desktop-Terminal eingegeben haben.



    Sie können sich das importierte Zertifikat im Bereich "Über — Zertifikate" anschauen.
    Die aktualisierten mobilen Terminals MetaTrader 5 für iPhone/iPad und Android mit der Verschiebung von Zertifikaten werden in Kürze veröffentlicht.

Tester

  1.  Der Algorithmus der Ausführung von Pending Orders und SL/TP Orders wurde für ein präziseres Testen geändert. Die Möglichkeiten des visuellen Testens wurden erweitert.

    Was für Börseninstrumete geändert wurde
    Auf dem realen Markt erfolgt die Bildung von Charts und Auslösung von Stop Orders für börsengehandelte Instrumente zu Kursen des letzten Trades (Last). Limit Orders werden zu Bid/Ask-Kursen ausgelöst. Dabei werden alle Ordertypen zu laufenden Bid/Ask Marktkursen ausgeführt. Im Strategietester wurden Änderungen vorgenommen, damit die Testbedingungen näher an der Realität sind:
      Früher
    Jetzt
    Auslösung Alle Arten von Pending Orders und SL/TP Orders zu Bid/Ask
    Limit Orders zu Bid/Ask Stop, Stop Limit und SL/TP Orders zu Last
    Ausführung Alle Arten von Pending Orders und SL/TP Orders zum Preis, der in der Order angegeben wurde
    Alle Arten von Pending Orders und SL/TP Orders zu Bid/Ask Marktkursen zum Zeitpunkt der Auslösung

    Schauen wir uns das Symbol Si-6.16 als Beispiel an. Bei aktuellen Kursen Bid=72570, Ask=72572, Last=72552 wurde eine Buy Stop Order mit der Auslösung zum Preis 72580 platziert. Im Price Stream haben wir neue aktuelle Kurse bekommen:

    • Bid=72588
    • Ask=72590
    • Last=72580


    Als Auslöser von Stop Orders dient für Börseninstrumente der Last-Kurs. Aus diesem Grund aktiviert Last=72580 im Stream die Buy Stop Order. Früher hätte man den Kurs 72580 für die Ausführung dieser Order verwendet. Das war aber falsch, denn es gibt keinen Ask=72580 für die Ausführung des Buy-Trades auf dem Markt.


    In dem aktualisierten Tester wird der aktuelle Kaufpreis Ask=72590 verwendet, und die Buy Stop Order wird zu diesem Preis ausgeführt. Auf diese Weise ist der neue Algorithmus der Ausführung von Trades im Testers näher am realen Markt. Beim alten Algorithmus wäre die Transaktion nicht zum Marktpreis ausgeführt, was zu fehlerhaften Testergebnissen geführt hätte.

    Was für andere Instrumente geändert wurde
    Für andere Instrumente blieb der Algorithmus gleich: für alle Arten von Pending Orders und SL/TP Orders werden Bid und Ask Kurse verwendet. Ausführungsmodus geändert: früher wurden Order zum in der Order angegebenen Preis ausgeführt, nun werden Bid und Ask Marktkurse zum Zeitpunkt der Auslösung verwendet.

    Neues im visuellen Testen
    Jetzt werden beim visuellen Testen Linien des maximalen Ask-Kurses und minimalen Bid-Kurses des Balkens angezeigt. Auf so einem Chart ist es einfacher, Expert Advisors basierend auf börsengehandelten Finanzinstrumenten zu testen, denn die Bildung von Balken und Auslösung von Orders zu Last-Kursen und Ausführung von Marktoperationen zu Bid und Ask-Kursen erfolgen.



    Auf dem Chart des visuellen Testens kann man nun zu einem angegebenen Datum navigieren. Klicken Sie zweimal auf dem Chart und geben Sie das gewünschte Datum und Zeit an. Darüber hinaus kann der Chart jeder Order oder jedem Trade hinzugefügt werden: klicken Sie zweimal auf der gewünschten Transaktion auf dem Tab "Handel", "Historie" oder "Transaktionen".
  2. Erweitertes Logging der vor dem Teststart geladener Preis- und Tickhistorie. Jetzt werden im Journal die folgenden Daten angezeigt: Beenden der Ladung der Historie, das Volumen heruntergeladener Daten und die Downloaddauer:2016.05.10 12:47:53    Core 1    5.10 Mb of history processed in 0:00.842
    2016.05.10 12:47:53    Core 1    GBPUSD: history synchronization completed [5225 Kb]

MQL5

  1. Es wurde ein Fehler behoben, der in einigen Fällen dazu führte, dass die CopyTicks Funktion weniger Ticks als abgefragt lieferte.
  2. Es wurden Fehler der Generierung von Template-Funktionen behoben.
  3. Die Dokumentation wurde aktualisiert.

Verbesserungen anhand Crash-Logs.



12 Mai 2016
MetaTrader 5 Webplattform: Beta-Version steht zum Testen bereit

Auf vielfachen Wunsch von Tradern wurde ein Webversion der Handelsplattform MetaTrader 5 entwickelt. Die Benutzerfreundlichkeit und die Cross-Plattform-Eigenschaft des Webterminals wird durch die Vorteile der MetaTrader 5 Desktopversion ergänzt. Dazu gehören die Schnelligkeit, die Multi-Asset-Feature und erweiterte Handelsfunktionen.

Die Webplattform MetaTrader 5 ist nun auf der Webseite der MQL5.community verfügbar können Sie aus jedem Browser in jedem Betriebssystem handeln. Dafür brauchen sie nur einen Internetanschluss.

Die Betaversion bietet den Tradern:

  • Hedging-System für die Positionsberechnung,
  • 30 technische Indikatoren,
  • 23 analytische Objekte,
  • kompletter Set von Handelsorders in MetaTrader 5,
  • Benutzerschnittstelle in 41 Sprachen.
Das Release der Betaversion garantiert ein öffentliches Testen uns erlaubt es den Tradern, neue Möglichkeiten zu entdecken.
22 April 2016
MetaTrader 5 Build 1325: Handel mit Hedging und Testen anhand realer Ticks

Terminal

  1. Für die Erweiterung der Möglichkeiten von Retail-Devisenhändlern, wurde der Plattform das zweite System der Positionsberechnung — Hedging — hinzugefügt. Nun kann man eine Vielzahl von Positionen pro Symbol haben, darunter auch gegenläufigen Positionen. Dank Hedging kann man Handelsstrategien mit dem sogenannten "Locking" umsetzen: wenn sich der Preis gegen den Trader entwickelt, kann der Trader eine Position in eine entgegengesetzten Richtung eröffnen.

    Das neue System ist dem von MetaTrader 4 ähnlich, Trader sind also mit diesem System vertraut. Dabei können sie von allen Vorteilen der fünften Version der Plattform profitieren, zu welchen Ausführung von Orders durch mehrere Trades (darunter auch Teilausführung), Mehrwährungs- und Multithread-Tester mit MQL5 Cloud Network Netz und vieles mehr gehören.

    Nun kann man mit einem Konto an der Börse traden, wo man nur eine Position pro Symbol haben darf und wo Netting verwendet wird. Gleichzeitig kann man direkt auf derselben Plattform, aber auf einem anderen Konto am Devisenmarkt handeln und Hedging verwenden.

    Wie man ein Konto mit Hedging eröffnen und wo man den Kontotyp prüfen kann
    Der Typ der Berechnung von Positionen wird auf Konto-Ebene gesetzt, er wird in der Überschrift des Fensters im Terminal sowie im Journal angezeigt:



    Um ein Demokonto mit Hedging zu eröffnen, aktivieren Sie die entsprechende Option:




    Netting
    In diesem System kann zur gleichen Zeit nur eine Position pro Symbol vorhanden sein:

    • Wenn es auf dem Symbol bereits eine Position gibt, erhöht die Ausführung eines Trades in der gleichen Richtung das Volumen dieser Position.
    • Die Ausführung eines Trades in einer entgegengesetzten Richtung führt zur Reduzierung des Volumens der vorhandenen Position, ihrer Schließung (wenn das Volumen des Trades dem Volumen der laufenden Position gleich ist) oder Umkehrung (wenn das Volumen des entgegengesetzten Trades größer als das der laufenden Position ist).


    Dabei ist es irrelevant, was den Trade in der entgegengesetzte Richtung hervorgerufen hat — die Ausführung einer Marktorder oder Auslösung einer Pending-Order.

    Das Beispiel unten zeigt die Ausführung von zwei Buy-Trades EURUSD mit dem Volumen in Höhe von 0.5 Lots:


    Aus der Ausführung dieser Trades ergab sich eine gemeinsame Position mit einem Volumen in Höhe von einem Lot.

    Hedging-System
    Beim Hedging kann man eine Vielzahl von Positionen auf einem und demselben Symbol haben, darunter auch von entgegengesetzte Positionen.

    Wenn eine offene Position für das Symbol vorhanden ist, und der Händler einen neuen Trade ausführt (bzw. eine Pending-Order ausgelöst wird), wird eine neue Position eröffnet. Die vorhandene Position ändert sich nicht.

    Das Beispiel unten zeigt die Ausführung von zwei Buy-Trades EURUSD mit dem Volumen in Höhe von 0.5 Lots:


    Die Ausführung dieser Trades führte zur Eröffnung zwei separater Positionen.

    Neuer Typ von Handelstransaktionen Close By
    Für Konten mit Hedging wurde ein neuer Typ von Transaktionen hinzugefügt — Schließung einer Position zur Gegenposition. Diese Operation ermöglicht es, zwei gegensätzliche Positionen auf einem Instrument gleichzeitig zu schließen. Wenn die Gegenpositionen unterschiedliche Zahl von Lots haben, bleibt nur eine der Orders offen. Ihr Volumen ist der Differenz der Lots dieser zwei geschlossener Positionen gleich, und die Richtung der Position sowie der Eröffnungspreis stimmen mit der größeren (nach Volumen) Position überein.

    Im Gegensatz zur einzelnen Schließung von zwei Positionen, lässt die Schließung zur Gegenposition einen Spread sparen:

    • Bei einzelner Schließung muss der Trader den Spread zweimal zahlen: er schließt den Kauf zum niedrigeren Preis (Bid), und den Verkauf — zum höheren Preis (Ask).
    • Bei der Schließung zur Gegenposition werden die erste Position zum Eröffnungspreis der zweiten Position und die zweite Position zum Eröffnungspreis der ersten Position geschlossen.


    Beim Schließen einer Position zur Gegenposition wird eine Order vom Typ "close by" platziert. Im Kommentar zur Order sind die Tickets der Positionen angegeben, die geschlossen werden. Die Schließung eines Paares gegenläufiger Positionen erfolgt durch zwei Trades vom Typ "out by". Der Gesamtgewinn/-verlust nach der Schließung der beiden Positionen wird nur in einem Trade angegeben.


  2. Neben dem Hedging wurden die Möglichkeiten zur Übertragung von Konten aus dem MetaTrader 4 erweitert. Nun können Broker Konten mit allen Transaktionen in den MetaTrader 5 im automatischen Modus übertragen: mit offenen Orders und Pending Orders sowie mit der ganzen Handelshistorie.

    Wenn Sie sich in das aus dem MetaTrader 4 übertragene Konto zum ersten Mal einloggen, erscheint ein Willkommensfenster. Die Übertragung ist sicher. Geben Sie Ihr Passwort ein, der früher im MetaTrader 4 verwendet wurde, und setzen Sie anschließend ein neues Passwort.



    Danach können Sie wie gewohnt arbeiten, als ob das Konto im MetaTrader 5 eröffnet wurde, dabei wird die ganze Historie aus dem MetaTrader 4 auf dem neuen Konto automatisch gespeichert.

    Beim Import werden Tickets von Orders und Positionen (Orders der Historie eingeschlossen) nicht gespeichert, denn einem Satz in der Historie des MetaTrader 4 können bis zu vier Sätze in der Historie des MetaTrader 5 entsprechen. Allen Eintragungen werden neue Tickets zugewiesen.

    Kontonummern können erhalten bleiben oder durch neue ersetzt werden, je nach dem, wie Ihr Broker den Import durchgeführt hat.


  3. Chat hinzugefügt. Nun können Sie mit Ihren Freunden und Kollegen auf MQL5.community direkt in der Plattform kommunizieren. Im Chat werden alle persönlichen Nachrichten eines MQL5-Benutzerkontos angezeigt. Um einen neuen Chat zu starten, loggen Sie sich ins Ihr Benutzerkonto direkt im Chat-Fenster oder über die Einstellungen der Plattform ein: Extras -> Optionen -> Community.




  4. Der Dialog der Eröffnung eines Demokontos wurde wesentlich vereinfacht; es wurden Demokonten mit Hedging hinzugefügt. Nun brauchen Sie keine lange Form mehr auszufüllen, geben Sie nur die wichtigsten Daten an und wählen Sie die Handelsparameter aus: Kontotyp, Anlage, Hebel und Hedging.



  5. Für einen schnellen Start wurde eine automatische Eröffnung eines Demokontos hinzugefügt. Wenn es noch kein einziges Konto in der Plattform gibt, wird beim Starten ein Demokonto auf einem verfügbaren Handelsserver eingerichtet. Nach einer erfolgreichen Eröffnung wird das Konto direkt mit dem Server verbunden.

  6. Nun hat jede Position ein Ticket - eine individuelle Nummer. In der Regel entspricht sie dem Ticket der Order, mit der die Position eröffnet wurde, außer den Fällen, wenn das Ticket infolge Operationen auf dem Server geändert wurde. Z.B. Anrechnung von Swaps durch eine erneute Eröffnung einer Position. Allen früher eröffneten Positionen werden Tickets nach der Aktualisierung der Terminalversion automatisch zugewiesen.




  7. Es wurden Fehler beim Setzens von Stop Loss und Take Profit Levels behoben, wenn eine Marktorder platziert wird, die zum Richtungswechsel der Position führt. Früher konnten solche Grenzen für eine neue Position nicht gesetzt werden.
  8. Die Darstellung von Preisen mit vier und mehr Zeichen nach dem Komma wurde auf den Steuerelementen des Ein-Klick-Handel-Panels verbessert.
  9. Die Anzeige von Nachrichten wurde im Vorschaufenster vor dem Ausdrucken korrigiert.
  10. Es wurden Fehler der Anzeige von Tickcharts behoben.
  11. Es wurde ein Fehler beim Öffnen der Markttiefe nach dem Absturz des Terminals behoben.
  12. Es wurden Prüfungen hinzugefügt, ob Marktorders bei Anzeige von Steuerelementen des Ein-Klick-Handel-Panels erlaubt sind.
  13. Die Berechnung des Profits und der Margin wurde bei einer großen Anzahl offener Orders und Positionen optimiert.
  14. Es wurde eine Übersetzung der Benutzeroberfläche ins Malaiische hinzugefügt.
  15. Das Benutzerhandbuch wurde komplett aktualisiert. Neues Design, interaktive Screenshots und integrierte Videos — alles, damit man den Handel mithilfe vom MetaTrader 5 möglichst einfach erlernen könnte:




  16. Die Anzeige grafischer Objekte wurde im Modus "Chart im Vordergrund" korrigiert.

Tester

  1. Es wurde die Option hinzugefügt, Handelsroboter und technische Indikatoren anhand realer Tick-Historie zu testen.

    Das Testen und die Optimierung anhand realer Ticks sind möglichst nah an realen Bedingungen. Statt den anhand Minutendaten generierten werden reale Ticks verwendet, die vom Broker nach Finanzinstrumenten gespeichert wurden. Das sind Ticks von Börsen und Liquiditätsanbietern.

    Wählen Sie den entsprechenden Modus im Strategietester aus, um das Testen oder die Optimierung anhand realer Ticks zu starten:



    Tickdaten haben ein erheblich größeres Volumen, als Minutendaten. Beim ersten Testerstart kann die Ladung der Daten eine lange Zeit in Anspruch nehmen. Die heruntergeladenen Tickdaten werden nach Monaten in TKC-Dateien im Ordner \bases\[Name des Handelsservers]\ticks\[Symbolname]\ gespeichert.

    Besonderheiten des Testens anhand realer Ticks
    Beim Testen anhand realer Ticks kann sich der Spread innerhalb des Minutenbalkens ändern, während bei der Generierung von Ticks innerhalb des Minutenbalkens der Spread genutzt wird, der im entsprechenden Balken festgelegt wurde.

    Wenn die Markttiefe für das Symbol angezeigt wird, werden die Balken strikt nach den Preisen der Ausführung des letzten Trades — Last — gebildet. Im anderen Fall versucht der Tester die Balken zuerst anhand Last-Preise zu bilden und erst wenn diese nicht vorhanden sind anhand Bid-Preise. Das Ereignis des eingehenden Ticks OnTick wird auf allen Ticks ausgelöst, unabhängig davon, ob der Last-Preis vorliegt oder nicht.

    Beachten Sie bitte, dass Transaktionen immer nach Bid- und Ask-Preisen ausgeführt werden, auch wenn der Chart auf Last-Preisen beruht. Der Expert Advisor, der für den Handel nur Eröffnungspreise verwendet (unter Anderem, den integrierten Moving Average), erhält z.B. ein Signal mit einem Preis (Last), wird aber den Trade zu einem anderen Preis ausführen (Bid oder Ask je nach der Richtung). Wenn man den Alle-Ticks-Modus verwendet werden die Balken nach Bid-Preisen gebildet, und Trades werden nach Bid und Ask ausgeführt. Dabei wird Ask als Bid plus festgelegter Spread des entsprechenden Minutenbalkens berechnet.

    Wenn der Minutenbalken in der Historie des Symbols vorhanden ist und es aber keine Tickdaten für diese Minute gibt, generiert der Tester Ticks im Alle-Ticks-Modus. So kann man den Expert Advisor anhand einer bestimmten Periode testen, wenn der Broker unvollständige Tickdaten hat. Wenn die Historie des Symbols über keinen Minutenbalken verfügt, Tickdaten für diese Minute aber vorhanden sind, werden diese Ticks ignoriert. Minutendaten gelten als zuverlässiger.

    Testen anhand realer Ticks im Cloud Computing Netz MQL5 Cloud Network
    Das Testen anhand realer Ticks ist nicht nur auf lokalen und Remote-Agenten sondern auch über MQL5 Cloud Network verfügbar. Die Optimierung einer Strategie hätte Monate in Anspruch genommen, wenn man aber die Rechenleistung von Tausenden Computern nutzt, kann die Optimierung innerhalb weniger Stunden durchgeführt werden.

    Für das Testen über das Netz aktivieren Sie Cloud Agenten:



    Beim Testen anhand realer Ticks kann viel Internet-Traffic über MQL5 Cloud Network übertragen werden. Dies kann sich auf den Endpreis für die Nutzung des Rechnernetzes auswirken.

  2. Es wurde ein Fehler behoben, bei dem für einige Symboltypen Komission nicht berechnet wurde.
  3. Die Ausfüllung des Expert-Feldes wurde bei den Orders, die bei der Auslösung von SL/TP entstanden sind, in Übereinstimmung mit dem Wert des Expert-Feldes der entsprechenden Position korrigiert. Früher wurde das Feld nicht ausgefüllt.
  4. Das Umschalten auf die Tabs von Ergebnissen der normalen und Forward-Optimierung wurde korrigiert.
  5. Die Berechnung und Anzeige des Envelopes-Indikators wurden korrigiert.
  6. Die Ausführung des visuellen Testens wurde optimiert.
  7. Die Berechnung des Profits und der Margin wurde bei einer großen Anzahl offener Orders und Positionen optimiert.
  8. Die Ausführung von Handelsoperationen im Hochfrequenzhandel wurde optimiert.
  9. Ab jetzt wird die Historie nicht beim Abruf der Eigenschaften eines Nebensymbols (der aktuelle Kurse nicht verlangt) synchronisiert. Zum Beispiel, SYMBOL_SELECT, SYMBOL_DIGITS, SYMBOL_SPREAD_FLOAT, SYMBOL_TRADE_CALC_MODE, SYMBOL_TRADE_MODE, SYMBOL_TRADE_STOPS_LEVEL, SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_EXEMODE usw. Früher wurde die Historie des Nebensymbols bei jedem Abruf seiner Eigenschaften synchronisiert.
  10. Die Berechnung von SWAPs in Prozent pro Jahr wurde korrigiert.

MQL5

  1. Da der Programmiersprache MQL5 neue Möglichkeiten hinzugefügt wurden und im Hinblick auf Hedging in der MetaTrader 5 Plattform, hat sich das Format ausführbarer EX5-Dateien geändert. Alle alten EX5-Programme, die im MetaEditor vorheriger Versionen kompiliert wurden, werden nach der Aktualisierung richtig funktionieren. Auf diese Weise bleibt die Aufwärtskompatibilität erhalten.

    Gleichzeitig funktionieren die EX5-Programme, die in der Version 1325 und höher kompiliert wurden, in den Terminals alter Versionen nicht — es gibt keine Abwärtskompatibilität.

  2. Nun werden abstrakte Klassen und rein virtuelle Funktionen unterstützt.

    Die abstrakten Klassen sind für die Erstellung generalisierter Entitäten bestimmt, aufgrund deren später konkretere abgeleitete Klassen erstellt werden. Als abstrakte wird die Klasse bezeichnet, die nur als Basisklasse für eine andere Klasse genutzt werden kann. Aus diesem Grund ist es unmöglich, ein Objekt vom Typ abstrakter Klasse zu erstellen.

    Eine Klasse, die mindestens eine rein virtuelle Funktion enthält, gilt als abstrakt. Deswegen müssen Klassen, die von einer abstrakten Klasse abgeleitet wurden, alle ihre rein virtuellen Funktionen umsetzen, sonst werden sie auch zu abstrakten Klassen.

    Eine virtuelle Funktion wird als "rein" mit der Syntax des Reinheit-Spezifikators deklariert. Schauen wir uns die CAnimal-Klasse an, die nur für die Gewährleistung allgemeiner Funktionen erstellt wird - Objekte vom Typ CAnimal sind für eine praktische Anwendung zu allgemein. Auf diese Weise ist die CAnimal-Klasse ein guter Kandidat für eine abstrakte Klasse:
    class CAnimal
      {
    public:
                          CAnimal();     // Konstruktor
       virtual void       Sound() = 0;   // rein virtuelle Funktion
    private:
       double             m_legs_count;  // Pfotenzahl
      };
    Die Sound() Funktion ist hier rein virtuell, weil diese mit dem Spezifikator der rein virtuellen PURE-Funktion (=0) deklariert wurde.

    Als rein virtuell werden nur die virtuellen Funktionen bezeichnet, für welche der PURE-Spezifikator angegeben wurde, und zwar: (=NULL) oder (=0). Beispiel der Deklaration und Anwendung einer abstrakter Klassen:
    class CAnimal
      {
    public:
       virtual void       Sound()=NULL;   // PURE method, muss in der abgeleiteten Klasse neu definiert werden; die CAnimal Klasse selbst ist abstrakt geworden und kann nicht erstellt werden
      };
    //--- abgeleitet von der abstrakten Klasse
    class CCat : public CAnimal
     {
    public:
      virtual void        Sound() { Print("Myau"); } // PURE wurde neu definiert, die Klasse Ccar ist nicht abstrakt und kann erstellt werden
     };
    
    //--- Beispiele für die falsche Anwendung
    new CAnimal;         // Fehler 'CAnimal' - der Compiler zeigt die Fehlermeldung "cannot instantiate abstract class" an
    CAnimal some_animal; // Fehler 'CAnimal' - der Compiler zeigt die Fehlermeldung "cannot instantiate abstract class" an
    
    //--- Beispiele für die richtige Anwendung
    new CCat;  // kein Fehler - die CCat Klasse ist nicht abstrakt;  // kein Fehler - die Klasse CCat ist nicht abstrakt
    Begrenzungen bei der Anwendung abstrakter Klassen
    Wenn der Konstruktor einer abstrakten Klasse eine rein virtuelle Funktion (direkt oder indirekt) aufruft, wird das Ergebnis undefiniert sein.
    //+------------------------------------------------------------------+
    //| Abstrakte Basisklasse                                        |
    //+------------------------------------------------------------------+
    class CAnimal
      {
    public:
       //--- rein virtuelle Funktion
       virtual void      Sound(void)=NULL;
       //--- Funktion
       void              CallSound(void) { Sound(); }
       //--- Konstruktor
       CAnimal()
        {
         //--- expliziter Aufruf der virtuellen Methode
         Sound();
         //--- impliziter Aufruf (über eine dritte Funktion)
         CallSound();
         //--- Konstruktor bzw. Destruktor ruft immer eigene Funktionen auf,
         //--- trotz der Virtualität und Neudefinierung der aufgerufenen Funktion in einer abgeleiteten Klasse
         //--- wenn die Funktion rein virtuell ist,
         //--- führt der Aufruf zum kritischen Ausführungsfehler: "pure virtual function call"
        }
      };
    Jedoch können Konstruktoren und Destruktoren abstrakter Klassen andere Memberfunktionen aufrufen.

  3. Für eine Vereinfachung der Gestaltung von Ereignis-Modellen wurde eine Unterstützung für Pointer auf Funktionen hinzugefügt.

    Um den Pointer auf Funktion zu deklarieren, definieren Sie den Typ "Pointer auf Funktion", zum Beispiel:
    typedef int (*TFunc)(int,int);
    Jetzt ist TFunc ein Typ, man kann die Pointer-Variable auf Funktion deklarieren:
    TFunc func_ptr;
    In der Variablen func_ptr kann man die Funktionsadresse speichern, um diese später aufzurufen:
    int sub(int x,int y) { return(x-y); }
    int add(int x,int y) { return(x+y); }
    int neg(int x)       { return(~x);  }
    
    func_ptr=sub;
    Print(func_ptr(10,5));
    
    func_ptr=add;
    Print(func_ptr(10,5));
    
    func_ptr=neg;           // Fehler: neg hat nicht den Typ int (int,int)
    Print(func_ptr(10));    // Fehler: zwei Parameter müssen vorhanden sein
    Pointers auf Funktionen können als Parameter gespeichert und übergeben werden. Man kann keinen Pointer auf eine nicht statische Methode der Klasse erhalten.

  4. Der Struktur von MqlTradeRequest wurden zwei neue Felder hinzugefügt:

    • position — Ticket der Position. Das Feld ist im Hedging-System bei der Änderung und Schließung einer Position für ihre eindeutige Identifikation auszufüllen. Beim Trading mit Netting ist die Ausfüllung des Feldes irrelevant, denn die Identifikation einer Position erfolgt nach Symbolnamen.
    • position_by — das Ticket der Gegenposition Das Ticket wird beim Schließen einer Position zur Gegenposition verwendet, die auf demselben Symbol, aber in einer entgegengesetzten Richtung eröffnet wurde. Das Ticket wird nur beim Hedging verwendet.

  5. Der Aufzählen von Typen der Handelsoperationen ENUM_TRADE_REQUEST_ACTIONS wurde der Wert TRADE_ACTION_CLOSE_BY hinzugefügt — das Schließen einer Position zur Gegenposition. Das Ticket wird nur beim Hedging verwendet.

  6. Den Aufzählungen der Eigenschaften von Orders, Trades und Positionen wurden Tickets der entsprechenden Handelsoperationen hinzugefügt:

    • Dem ENUM_ORDER_PROPERTY_INTEGER wurde die Eigenschaft ORDER_TICKET — Ticket der Order hinzugefügt. Das ist eine einmalige Nummer, die jeder Order zugewiesen wird.
    • Dem ENUM_DEAL_PROPERTY_INTEGER wurde die Eigenschaft DEAL_TICKET — Ticket des Trades hinzugefügt. Das ist eine einmalige Nummer, die jedem Trade zugewiesen wird.
    • Dem ENUM_POSITION_PROPERTY_INTEGER wurde die Eigenschaft POSITION_TICKET — Ticket der Position hinzugefügt. Das ist eine einmalige Nummer, die jeder neu eröffneten Position zugewiesen wird. In der Regel entspricht sie dem Ticket der Order, mit der die Position eröffnet wurde, außer den Fällen, wenn das Ticket infolge Operationen auf dem Server geändert wurde. Z.B. Anrechnung von Swaps durch eine erneute Eröffnung einer Position. Um die Order zu finden, mit der die Position eröffnet wurde, ist die Eigenschaft POSITION_IDENTIFIER zu verwenden. Der Wert von POSITION_TICKET entspricht MqlTradeRequest::position.

  7. Der Aufzählung von Ordertypen ENUM_ORDER_TYPE wurde ORDER_TYPE_CLOSE_BY hinzugefügt — Schließen einer Position zur Gegenposition.
  8. Der Aufzählung ENUM_ORDER_PROPERTY_INTEGER wurde ORDER_POSITION_BY_ID hinzugefügt — ID der Gegenposition für die Orders vom Typ ORDER_TYPE_CLOSE_BY.
  9. Der Aufzählung der Richtungen des Trades ENUM_DEAL_ENTRY wurde der Wert DEAL_ENTRY_OUT_BY hinzugefügt — der Trade ist infolge des Schließens einer Position zur Gegenposition ausgeführt.
  10. Der Struktur MqlTradeTransaction wurden zwei ähnliche Felder hinzugefügt:

    • position — Ticket der Position, auf die sich die Transaktion ausgewirkt hat. Das Feld wird für die Transaktionen ausgefüllt, die mit Marktorders (TRADE_TRANSACTION_ORDER_* außer TRADE_TRANSACTION_ORDER_ADD, in der das Ticket der Position noch nicht zugewiesen wurde) und der Historie der Orders (TRADE_TRANSACTION_HISTORY_*) verbunden sind.
    • position_by — das Ticket der Gegenposition Das Ticket wird beim Schließen einer Position zur Gegenposition verwendet, die auf demselben Symbol, aber in einer entgegengesetzten Richtung eröffnet wurde. Das Feld wird nur für die Orders ausgefüllt, die eine Position zur Gegenposition (close by) schließen, sowie für die Trades, die eine Position zur Gegenposition (out by) schließen.

  11. Es wurde die Funktion PositionGetTicket hinzugefügt, die das Ticket der Position nach dem Index in der Liste der offenen Positionen liefert und diese Position automatisch für die weitere Arbeit mithilfe der Funktionen PositionGetDouble, PositionGetInteger und PositionGetString auswählt.
    ulong  PositionGetTicket(
       int  index      // Nummer in der Liste der Positionen
       );

  12. Es wurde die Funktion PositionSelectByTicket hinzugefügt, die eine offene Position für die weitere Arbeit nach diesem Ticket auswählt.
    bool  PositionSelectByTicket(
       ulong   ticket     // das Ticket der Position
       );

  13. Der Aufzählung der Eigenschaften von Symbolen ENUM_SYMBOL_INFO_DOUBLE wurde der Wert SYMBOL_MARGIN_HEDGED hinzugefügt — die Größe des Kontrakts oder der Margin für einen Lot gehedgter Positionen (gegenläufige Positionen auf einem Symbol).

    • Wenn die AnfangsMargin (SYMBOL_MARGIN_INITIAL) für das Symbol festgelegt ist, wird die abgesicherte Margin als absoluter Wert (in Geld) angegeben.
    • Wenn die AnfangsMargin nicht festgelegt wurde (= 0), dann wird in SYMBOL_MARGIN_HEDGED die Größe des Kontrakts angegeben, die bei der Berechnung der Margin nach einer Formel je nach Symbol (SYMBOL_TRADE_CALC_MODE) verwendet wird.

    Die Besonderheiten der Berechnung der Margin für gehedgte Positionen sind im Benutzerhandbuch für die MetaTrader 5 Handelsplattform beschrieben.

  14. Der Aufzählung von Kontoeigenschaften ENUM_ACCOUNT_INFO_INTEGER wurde der Wert ACCOUNT_MARGIN_MODE hinzugefügt — Berechnungsmodus der Margin für das aktuelle Handelskonto:

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING wird für den außerbörslichen Handel mit Netting-System zur Positionsberechnung verwendet (eine Position pro Symbol). Die Margin wird anhand des Symboltyps (SYMBOL_TRADE_CALC_MODE) berechnet.
    • ACCOUNT_MARGIN_MODE_EXCHANGE wird für den Börsenmarkt verwendet. Die Margin wird anhand Diskonte berechnet, die in den Einstellungen des Symbols angegeben werden. Die Diskonte werden vom Broker gesetzt, können aber nicht niedriger als die von der Börse gesetzten Werte sein.
    • ACCOUNT_MARGIN_MODE_RETAIL_HEDGING wird für den außerbörslichen Markt bei einer unabhängigen Positionsberechnung ("Hedging", mehrere Positionen können pro Symbol vorhanden sein) verwendet. Die Berechnung der Margin wird anhand des Symboltyps (SYMBOL_TRADE_CALC_MODE) und unter Berücksichtigung des Wertes der abgesicherten Margin (SYMBOL_MARGIN_HEDGED) durchgeführt.

  15. Der Aufzählung der Eigenschaften des Kundenterminals ENUM_TERMINAL_INFO_INTEGER wurde der Wert TERMINAL_SCREEN_DPI hinzugefügt — die Auflösung der Informationsanzeige auf dem Bildschirm wird in Punkten pro Zoll (DPI) angegeben. Wenn der Wert dieses Parameters bekannt ist, kann man die Größe grafischer Objekte so einstellen, dass diese auf Bildschirmen mit unterschiedlicher Auflösung gleich aussehen.

  16. Der Aufzählung von Eigenschaften des Kundenterminals ENUM_TERMINAL_INFO_INTEGER wurde der TERMINAL_PING_LAST hinzugefügt — der letzte bekannte Wert der Ping-Zeit bis zum Handelsserver in Mikrosekunden. Eine Sekunde besteht aus einer Million Mikrosekunden.

  17. Das Ergebnis des Ausrufs der SendFTP Funktion wird nun richtig ausgegeben. Früher wurde statt TRUE FALSE ausgegeben.
  18. Es wurde ein Fehler in der StringConcatenate Funktion behoben, der in einigen Fällen zum Ausführungsfehler "Access violation" führte.
  19. Es wurde eine Reihe von Fehlern bei der Verwendung von Template-Funktionen behoben.
  20. Jetzt können die Funktionen Print, Alert und Comment Zeilen ausgeben, die länger als 4000 Zeichen sind.
  21. Es wurde ein Fehler in der ArrayCompare Funktion behoben, der beim Vergleichen eines Arrays mit sich selbst, aber mit verschiedener Verschiebung der Ausgangsposition vom Beginn auftrat.
  22. Der Standardbibliothek wurde die Unterstützung für Hedging hinzugefügt:

    CPosition
    Es wurden folgende Methoden hinzugefügt:

    • SelectByMagic — wählt eine Position nach ihrer magischen Nummer für eine weitere Arbeit aus.
    • SelectByTicket — wählt eine Position nach ihrer Ticketnummer für eine weitere Arbeit aus.

    CTrade
    Es wurden folgende Methoden hinzugefügt:

    • RequestPosition — erhält das Ticket der Position.
    • RequestPositionBy — erhält das Ticket der Gegenposition.
    • PositionCloseBy — schließt die Position mit dem angegebenen Ticket zur Gegenposition.
    • SetMarginMode — setzt den Berechnungsmodus der Margin in Übereinstimmung mit den Einstellungen des laufenden Kontos.

    Es wurde das Überladen von Methoden hinzugefügt:

    • PositionClose — schließt Position nach Ticket.
    • PositionModify — modifiziert Position nach Ticket.

    CAccountInfo
    Es wurden folgende Methoden geändert:

    • MarginMode — erhält jetzt den Berechnungsmodus der Margin. Hat früher ähnlich wie die neue Methode StopoutMode funktioniert.
    • MarginDescription — erhält jetzt den Berechnungsmodus der Margin als Zeile. Hat früher wie die neue Methode StopoutModeDescription funktioniert.

    Es wurden folgende Methoden hinzugefügt:

    • StopoutMode — Modus der Setzung der minimalen Margin.
    • StopoutModeDescription — erhält die minimale Margin als Zeile.

    CExpert
    Es wurden folgende Methoden hinzugefügt:

    • SelectPosition — wählt eine Position für die weitere Arbeit aus.

  23. Fehlerbehebungen in der MQL5 Standardbibliothek.
  24. Unload von DLL-Bibliotheken verbessert.
  25. Unterstützung für Vorlagen für Konstruktoren der Klassen hinzugefügt.

Signale

  1. Es wurde eine Reihe von Fehlern bei der Anzeige des Schaufensters von Handelssignalen behoben.

MetaEditor

  1. Die Suche nach einem Wort in Dateien wurde im Modus "Nur das ganze Wort" korrigiert.
  2. Es wurde die Option hinzugefügt, eine Datei mit einem Doppelklick auf der Zeile, die das Ergebnis der Kompilierung für die entsprechende Datei beinhaltet, zu öffnen.
  3. Die Anzeige einiger Steuerelemente in Windows XP wurde verbessert.
  4. Die Dokumentation wurde aktualisiert.
1 April 2016
MetaTrader 5 Build 1295

Terminal

  1. Für die Erweiterung der Möglichkeiten von Retail-Devisenhändlern wurde der Plattform das Hedging-System hinzugefügt. Nun kann man eine Vielzahl von Positionen pro Symbol haben, darunter auch gegenläufigen Positionen. Dank Hedging kann man Handelsstrategien mit dem sogenannten "Locking" umsetzen: wenn sich der Preis gegen den Trader entwickelt, kann der Trader eine Position in eine entgegengesetzten Richtung eröffnen.

    Das neue System ist dem von MetaTrader 4 ähnlich, Trader sind also mit diesem System vertraut. Dabei können sie von allen Vorteilen der fünften Version der Plattform profitieren, zu welchen Ausführung von Orders durch mehrere Trades (darunter auch Teilausführung), Mehrwährungs- und Multithread-Tester mit MQL5 Cloud Network Netz und vieles mehr gehören.

    Nun kann man mit einem Konto an der Börse traden, wo man nur eine Position pro Symbol haben darf und wo Netting verwendet wird. Gleichzeitig kann man direkt auf derselben Plattform, aber auf einem anderen Konto am Devisenmarkt handeln und Hedging verwenden.

    Wie man ein Konto mit Hedging eröffnen und wo man den Kontotyp prüfen kann
    Der Typ der Berechnung von Positionen wird auf Konto-Ebene gesetzt, er wird in der Überschrift des Fensters im Terminal sowie im Journal angezeigt:



    Um ein Demokonto mit Hedging zu eröffnen, aktivieren Sie die entsprechende Option:




    Netting
    In diesem System kann zur gleichen Zeit nur eine Position pro Symbol vorhanden sein:

    • Wenn es auf dem Symbol bereits eine Position gibt, erhöht die Ausführung eines Trades in der gleichen Richtung das Volumen dieser Position.
    • Die Ausführung eines Trades in einer entgegengesetzten Richtung führt zur Reduzierung des Volumens der vorhandenen Position, ihrer Schließung (wenn das Volumen des Trades dem Volumen der laufenden Position gleich ist) oder Umkehrung (wenn das Volumen des entgegengesetzten Trades größer als das der laufenden Position ist).


    Dabei ist es irrelevant, was den Trade in der entgegengesetzte Richtung hervorgerufen hat — die Ausführung einer Marktorder oder Auslösung einer Pending-Order.

    Das Beispiel unten zeigt die Ausführung von zwei Buy-Trades EURUSD mit dem Volumen in Höhe von 0.5 Lots:


    Aus der Ausführung dieser Trades ergab sich eine gemeinsame Position mit einem Volumen in Höhe von einem Lot.

    Hedging-System
    Beim Hedging kann man eine Vielzahl von Positionen auf einem und demselben Symbol haben, darunter auch von entgegengesetzte Positionen.

    Wenn eine offene Position für das Symbol vorhanden ist, und der Händler einen neuen Trade ausführt (bzw. eine Pending-Order ausgelöst wird), wird eine neue Position eröffnet. Die vorhandene Position ändert sich nicht.

    Das Beispiel unten zeigt die Ausführung von zwei Buy-Trades EURUSD mit dem Volumen in Höhe von 0.5 Lots:


    Die Ausführung dieser Trades führte zur Eröffnung zwei separater Positionen.

    Neuer Typ von Handelstransaktionen Close By
    Für Konten mit Hedging wurde ein neuer Typ von Transaktionen hinzugefügt — Schließung einer Position zur Gegenposition. Diese Operation ermöglicht es, zwei gegensätzliche Positionen auf einem Instrument gleichzeitig zu schließen. Wenn die Gegenpositionen unterschiedliche Zahl von Lots haben, bleibt nur eine der Orders offen. Ihr Volumen ist der Differenz der Lots dieser zwei geschlossener Positionen gleich, und die Richtung der Position sowie der Eröffnungspreis stimmen mit der größeren (nach Volumen) Position überein.

    Im Gegensatz zur einzelnen Schließung von zwei Positionen, lässt die Schließung zur Gegenposition einen Spread sparen:

    • Bei einzelner Schließung muss der Trader den Spread zweimal zahlen: er schließt den Kauf zum niedrigeren Preis (Bid), und den Verkauf — zum höheren Preis (Ask).
    • Bei der Schließung zur Gegenposition werden die erste Position zum Eröffnungspreis der zweiten Position und die zweite Position zum Eröffnungspreis der ersten Position geschlossen.


    Beim Schließen einer Position zur Gegenposition wird eine Order vom Typ "close by" platziert. Im Kommentar zur Order sind die Tickets der Positionen angegeben, die geschlossen werden. Die Schließung eines Paares gegenläufiger Positionen erfolgt durch zwei Trades vom Typ "out by". Der Gesamtgewinn/-verlust nach der Schließung der beiden Positionen wird nur in einem Trade angegeben.



  2. Es wurde die Option hinzugefügt, Handelsroboter und technische Indikatoren anhand realer Tick-Historie zu testen.

    Das Testen und die Optimierung anhand realer Ticks sind möglichst nah an realen Bedingungen. Statt den anhand Minutendaten generierten werden reale Ticks verwendet, die vom Broker nach Finanzinstrumenten gespeichert wurden. Das sind Ticks von Börsen und Liquiditätsanbietern.

    Wählen Sie den entsprechenden Modus im Strategietester aus, um das Testen oder die Optimierung anhand realer Ticks zu starten:



    Tickdaten haben ein erheblich größeres Volumen, als Minutendaten. Beim ersten Testerstart kann die Ladung der Daten eine lange Zeit in Anspruch nehmen. Die heruntergeladenen Tickdaten werden nach Monaten in TKC-Dateien im Ordner \bases\[Name des Handelsservers]\ticks\[Symbolname]\ gespeichert.

    Besonderheiten des Testens anhand realer Ticks
    Beim Testen anhand realer Ticks kann sich der Spread innerhalb des Minutenbalkens ändern, während bei der Generierung von Ticks innerhalb des Minutenbalkens der Spread genutzt wird, der im entsprechenden Balken festgelegt wurde.

    Wenn die Markttiefe für das Symbol angezeigt wird, werden die Balken strikt nach den Preisen der Ausführung des letzten Trades — Last — gebildet. Im anderen Fall versucht der Tester die Balken zuerst anhand Last-Preise zu bilden und erst wenn diese nicht vorhanden sind anhand Bid-Preise. Das Ereignis des eingehenden Ticks OnTick wird auf allen Ticks ausgelöst, unabhängig davon, ob der Last-Preis vorliegt oder nicht.

    Beachten Sie bitte, dass Transaktionen immer nach Bid- und Ask-Preisen ausgeführt werden, auch wenn der Chart auf Last-Preisen beruht. Der Expert Advisor, der für den Handel nur Eröffnungspreise verwendet (unter Anderem, den integrierten Moving Average), erhält z.B. ein Signal mit einem Preis (Last), wird aber den Trade zu einem anderen Preis ausführen (Bid oder Ask je nach der Richtung). Wenn man den Alle-Ticks-Modus verwendet werden die Balken nach Bid-Preisen gebildet, und Trades werden nach Bid und Ask ausgeführt. Dabei wird Ask als Bid plus festgelegter Spread des entsprechenden Minutenbalkens berechnet.

    Wenn der Minutenbalken in der Historie des Symbols vorhanden ist und es aber keine Tickdaten für diese Minute gibt, generiert der Tester Ticks im Alle-Ticks-Modus. So kann man den Expert Advisor anhand einer bestimmten Periode testen, wenn der Broker unvollständige Tickdaten hat. Wenn die Historie des Symbols über keinen Minutenbalken verfügt, Tickdaten für diese Minute aber vorhanden sind, werden diese Ticks ignoriert. Minutendaten gelten als zuverlässiger.
    Wählen Sie den entsprechenden Modus im Strategietester aus, um das Testen oder die Optimierung anhand realer Ticks zu starten: Die Unterstützung für MQL5 Cloud Network wird bald hinzugefügt

  3. Chat hinzugefügt. Nun können Sie mit Ihren Freunden und Kollegen auf MQL5.community direkt in der Plattform kommunizieren. Im Chat werden alle persönlichen Nachrichten eines MQL5-Benutzerkontos angezeigt. Um einen neuen Chat zu starten, loggen Sie sich ins Ihr Benutzerkonto direkt im Chat-Fenster oder über die Einstellungen der Plattform ein: Extras -> Optionen -> Community.




  4. Der Dialog der Eröffnung eines Demokontos wurde wesentlich vereinfacht; es wurden Demokonten mit Hedging hinzugefügt. Nun brauchen Sie keine lange Form mehr auszufüllen, geben Sie nur die wichtigsten Daten an und wählen Sie die Handelsparameter aus: Kontotyp, Anlage, Hebel und Hedging.



  5. Für einen schnellen Start wurde eine automatische Eröffnung eines Demokontos hinzugefügt. Wenn es noch kein einziges Konto in der Plattform gibt, wird beim Starten ein Demokonto auf einem verfügbaren Handelsserver eingerichtet. Nach einer erfolgreichen Eröffnung wird das Konto direkt mit dem Server verbunden.

  6. Nun hat jede Position ein Ticket - eine individuelle Nummer. In der Regel entspricht sie dem Ticket der Order, mit der die Position eröffnet wurde, außer den Fällen, wenn das Ticket infolge Operationen auf dem Server geändert wurde. Z.B. Anrechnung von Swaps durch eine erneute Eröffnung einer Position. Allen früher eröffneten Positionen werden Tickets nach der Aktualisierung der Terminalversion automatisch zugewiesen.




  7. Es wurden Fehler beim Setzens von Stop Loss und Take Profit Levels behoben, wenn eine Marktorder platziert wird, die zum Richtungswechsel der Position führt. Früher konnten solche Grenzen für eine neue Position nicht gesetzt werden.
  8. Die Darstellung von Preisen mit vier und mehr Zeichen nach dem Komma wurde auf den Steuerelementen des Ein-Klick-Handel-Panels verbessert.
  9. Die Anzeige von Nachrichten wurde im Vorschaufenster vor dem Ausdrucken korrigiert.
  10. Es wurden Fehler der Anzeige von Tickcharts behoben.
  11. Es wurde ein Fehler beim Öffnen der Markttiefe nach dem Absturz des Terminals behoben.
  12. Es wurden Prüfungen hinzugefügt, ob Marktorders bei Anzeige von Steuerelementen des Ein-Klick-Handel-Panels erlaubt sind.
  13. Die Berechnung des Profits und der Margin wurde bei einer großen Anzahl offener Orders und Positionen optimiert.
  14. Es wurde eine Übersetzung der Benutzeroberfläche ins Malaiische hinzugefügt.
  15. Das Benutzerhandbuch wurde komplett aktualisiert. Neues Design, interaktive Screenshots und integrierte Videos — alles, damit man den Handel mithilfe vom MetaTrader 5 möglichst einfach erlernen könnte:




MQL5

  1. Nun werden abstrakte Klassen und rein virtuelle Funktionen unterstützt.

    Die abstrakten Klassen sind für die Erstellung generalisierter Entitäten bestimmt, aufgrund deren später konkretere abgeleitete Klassen erstellt werden. Als abstrakte wird die Klasse bezeichnet, die nur als Basisklasse für eine andere Klasse genutzt werden kann. Aus diesem Grund ist es unmöglich, ein Objekt vom Typ abstrakter Klasse zu erstellen.

    Eine Klasse, die mindestens eine rein virtuelle Funktion enthält, gilt als abstrakt. Deswegen müssen Klassen, die von einer abstrakten Klasse abgeleitet wurden, alle ihre rein virtuellen Funktionen umsetzen, sonst werden sie auch zu abstrakten Klassen.

    Eine virtuelle Funktion wird als "rein" mit der Syntax des Reinheit-Spezifikators deklariert. Schauen wir uns die CAnimal-Klasse an, die nur für die Gewährleistung allgemeiner Funktionen erstellt wird - Objekte vom Typ CAnimal sind für eine praktische Anwendung zu allgemein. Auf diese Weise ist die CAnimal-Klasse ein guter Kandidat für eine abstrakte Klasse:
    class CAnimal
      {
    public:
                          CAnimal();     // Konstruktor
       virtual void       Sound() = 0;   // rein virtuelle Funktion
    private:
       double             m_legs_count;  // Pfotenzahl
      };
    
    Die Sound() Funktion ist hier rein virtuell, weil diese mit dem Spezifikator der rein virtuellen PURE-Funktion (=0) deklariert wurde.

    Als rein virtuell werden nur die virtuellen Funktionen bezeichnet, für welche der PURE-Spezifikator angegeben wurde, und zwar: (=NULL) oder (=0). Beispiel der Deklaration und Anwendung einer abstrakter Klassen:
    class CAnimal
      {
    public:
       virtual void       Sound()=NULL;   // PURE method, muss in der abgeleiteten Klasse neu definiert werden; die CAnimal Klasse selbst ist abstrakt geworden und kann nicht erstellt werden
      };
    //--- abgeleitet von der abstrakten Klasse
    class CCat : public CAnimal
     {
    public:
      virtual void        Sound() { Print("Myau"); } // PURE wurde neu definiert, die Klasse Ccar ist nicht abstrakt und kann erstellt werden
     };
    
    //--- Beispiele für die falsche Anwendung
    new CAnimal;         // Fehler 'CAnimal' - der Compiler zeigt die Fehlermeldung "cannot instantiate abstract class" an
    CAnimal some_animal; // Fehler 'CAnimal' - der Compiler zeigt die Fehlermeldung "cannot instantiate abstract class" an
    
    //--- Beispiele für die richtige Anwendung
    new CCat;  // kein Fehler - die CCat Klasse ist nicht abstrakt;  // kein Fehler - die Klasse CCat ist nicht abstrakt
    
    Begrenzungen bei der Anwendung abstrakter Klassen
    Wenn der Konstruktor einer abstrakten Klasse eine rein virtuelle Funktion (direkt oder indirekt) aufruft, wird das Ergebnis undefiniert sein.
    //+------------------------------------------------------------------+
    //| Abstrakte Basisklasse                                        |
    //+------------------------------------------------------------------+
    class CAnimal
      {
    public:
       //--- rein virtuelle Funktion
       virtual void      Sound(void)=NULL;
       //--- Funktion
       void              CallSound(void) { Sound(); }
       //--- Konstruktor
       CAnimal()
        {
         //--- expliziter Aufruf der virtuellen Methode
         Sound();
         //--- impliziter Aufruf (über eine dritte Funktion)
         CallSound();
         //--- Konstruktor bzw. Destruktor ruft immer eigene Funktionen auf,
         //--- trotz der Virtualität und Neudefinierung der aufgerufenen Funktion in einer abgeleiteten Klasse
         //--- wenn die Funktion rein virtuell ist,
         //--- führt der Aufruf zum kritischen Ausführungsfehler: "pure virtual function call"
        }
      };
    
    Jedoch können Konstruktoren und Destruktoren abstrakter Klassen andere Memberfunktionen aufrufen.

  2. Für eine Vereinfachung der Gestaltung von Ereignis-Modellen wurde eine Unterstützung für Pointer auf Funktionen hinzugefügt.

    Um den Pointer auf Funktion zu deklarieren, definieren Sie den Typ "Pointer auf Funktion", zum Beispiel:
    typedef int (*TFunc)(int,int);
    Jetzt ist TFunc ein Typ, man kann die Pointer-Variable auf Funktion deklarieren:
    TFunc func_ptr;
    In der Variablen func_ptr kann man die Funktionsadresse speichern, um diese später aufzurufen:
    int sub(int x,int y) { return(x-y); }
    int add(int x,int y) { return(x+y); }
    int neg(int x)       { return(~x);  }
    
    func_ptr=sub;
    Print(func_ptr(10,5));
    
    func_ptr=add;
    Print(func_ptr(10,5));
    
    func_ptr=neg;           // Fehler: neg hat nicht den Typ int (int,int)
    Print(func_ptr(10));    // Fehler: zwei Parameter müssen vorhanden sein
    
    Pointers auf Funktionen können als Parameter gespeichert und übergeben werden. Man kann keinen Pointer auf eine nicht statische Methode der Klasse erhalten.

  3. Der Struktur von MqlTradeRequest wurden zwei neue Felder hinzugefügt:

    • position — Ticket der Position. Das Feld ist im Hedging-System bei der Änderung und Schließung einer Position für ihre eindeutige Identifikation auszufüllen. Beim Trading mit Netting ist die Ausfüllung des Feldes irrelevant, denn die Identifikation einer Position erfolgt nach Symbolnamen.
    • position_by — das Ticket der Gegenposition Das Ticket wird beim Schließen einer Position zur Gegenposition verwendet, die auf demselben Symbol, aber in einer entgegengesetzten Richtung eröffnet wurde. Das Ticket wird nur beim Hedging verwendet.

  4. Der Aufzählen von Typen der Handelsoperationen ENUM_TRADE_REQUEST_ACTIONS wurde der Wert TRADE_ACTION_CLOSE_BY hinzugefügt — das Schließen einer Position zur Gegenposition. Das Ticket wird nur beim Hedging verwendet.

  5. Den Aufzählungen der Eigenschaften von Orders, Trades und Positionen wurden Tickets der entsprechenden Handelsoperationen hinzugefügt:

    • Dem ENUM_ORDER_PROPERTY_INTEGER wurde die Eigenschaft ORDER_TICKET — Ticket der Order hinzugefügt. Das ist eine einmalige Nummer, die jeder Order zugewiesen wird.
    • Dem ENUM_DEAL_PROPERTY_INTEGER wurde die Eigenschaft DEAL_TICKET — Ticket des Trades hinzugefügt. Das ist eine einmalige Nummer, die jedem Trade zugewiesen wird.
    • Dem ENUM_POSITION_PROPERTY_INTEGER wurde die Eigenschaft POSITION_TICKET — Ticket der Position hinzugefügt. Das ist eine einmalige Nummer, die jeder neu eröffneten Position zugewiesen wird. In der Regel entspricht sie dem Ticket der Order, mit der die Position eröffnet wurde, außer den Fällen, wenn das Ticket infolge Operationen auf dem Server geändert wurde. Z.B. Anrechnung von Swaps durch eine erneute Eröffnung einer Position. Um die Order zu finden, mit der die Position eröffnet wurde, ist die Eigenschaft POSITION_IDENTIFIER zu verwenden. Der Wert von POSITION_TICKET entspricht MqlTradeRequest::position.

  6. Der Aufzählung von Ordertypen ENUM_ORDER_TYPE wurde ORDER_TYPE_CLOSE_BY hinzugefügt — Schließen einer Position zur Gegenposition.
  7. Der Aufzählung ENUM_ORDER_PROPERTY_INTEGER wurde ORDER_POSITION_BY_ID hinzugefügt — ID der Gegenposition für die Orders vom Typ ORDER_TYPE_CLOSE_BY.
  8. Der Aufzählung der Richtungen des Trades ENUM_DEAL_ENTRY wurde der Wert DEAL_ENTRY_OUT_BY hinzugefügt — der Trade ist infolge des Schließens einer Position zur Gegenposition ausgeführt.
  9. Der Struktur MqlTradeTransaction wurden zwei ähnliche Felder hinzugefügt:

    • position — Ticket der Position, auf die sich die Transaktion ausgewirkt hat. Das Feld wird für die Transaktionen ausgefüllt, die mit Marktorders (TRADE_TRANSACTION_ORDER_* außer TRADE_TRANSACTION_ORDER_ADD, in der das Ticket der Position noch nicht zugewiesen wurde) und der Historie der Orders (TRADE_TRANSACTION_HISTORY_*) verbunden sind.
    • position_by — das Ticket der Gegenposition Das Ticket wird beim Schließen einer Position zur Gegenposition verwendet, die auf demselben Symbol, aber in einer entgegengesetzten Richtung eröffnet wurde. Das Feld wird nur für die Orders ausgefüllt, die eine Position zur Gegenposition (close by) schließen, sowie für die Trades, die eine Position zur Gegenposition (out by) schließen.

  10. Es wurde die Funktion PositionGetTicket hinzugefügt, die das Ticket der Position nach dem Index in der Liste der offenen Positionen liefert und diese Position automatisch für die weitere Arbeit mithilfe der Funktionen PositionGetDouble, PositionGetInteger und PositionGetString auswählt.
    ulong  PositionGetTicket(
       int  index      // Nummer in der Liste der Positionen
       );
    

  11. Es wurde die Funktion PositionSelectByTicket hinzugefügt, die eine offene Position für die weitere Arbeit nach diesem Ticket auswählt.
    bool  PositionSelectByTicket(
       ulong   ticket     // Ticket der Position
       );
    

  12. Der Aufzählung der Eigenschaften von Symbolen ENUM_SYMBOL_INFO_DOUBLE wurde der Wert SYMBOL_MARGIN_HEDGED hinzugefügt — die Größe des Kontrakts oder der Margin für einen Lot gehedgter Positionen (gegenläufige Positionen auf einem Symbol).

    • Wenn die AnfangsMargin (SYMBOL_MARGIN_INITIAL) für das Symbol festgelegt ist, wird die abgesicherte Margin als absoluter Wert (in Geld) angegeben.
    • Wenn die AnfangsMargin nicht festgelegt wurde (= 0), dann wird in SYMBOL_MARGIN_HEDGED die Größe des Kontrakts angegeben, die bei der Berechnung der Margin nach einer Formel je nach Symbol (SYMBOL_TRADE_CALC_MODE) verwendet wird.

    Die Besonderheiten der Berechnung der Margin für gehedgte Positionen sind im Benutzerhandbuch für die MetaTrader 5 Handelsplattform beschrieben.

  13. Der Aufzählung von Kontoeigenschaften ENUM_ACCOUNT_INFO_INTEGER wurde der Wert ACCOUNT_MARGIN_MODE hinzugefügt — Berechnungsmodus der Margin für das aktuelle Handelskonto:

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING wird für den außerbörslichen Handel mit Netting-System zur Positionsberechnung verwendet (eine Position pro Symbol). Die Margin wird anhand des Symboltyps (SYMBOL_TRADE_CALC_MODE) berechnet.
    • ACCOUNT_MARGIN_MODE_EXCHANGE wird für den Börsenmarkt verwendet. Die Margin wird anhand Diskonte berechnet, die in den Einstellungen des Symbols angegeben werden. Die Diskonte werden vom Broker gesetzt, können aber nicht niedriger als die von der Börse gesetzten Werte sein.
    • ACCOUNT_MARGIN_MODE_RETAIL_HEDGING wird für den außerbörslichen Markt bei einer unabhängigen Positionsberechnung ("Hedging", mehrere Positionen können pro Symbol vorhanden sein) verwendet. Die Berechnung der Margin wird anhand des Symboltyps (SYMBOL_TRADE_CALC_MODE) und unter Berücksichtigung des Wertes der abgesicherten Margin (SYMBOL_MARGIN_HEDGED) durchgeführt.

  14. Der Aufzählung der Eigenschaften des Kundenterminals ENUM_TERMINAL_INFO_INTEGER wurde der Wert TERMINAL_SCREEN_DPI hinzugefügt — die Auflösung der Informationsanzeige auf dem Bildschirm wird in Punkten pro Zoll (DPI) angegeben. Wenn der Wert dieses Parameters bekannt ist, kann man die Größe grafischer Objekte so einstellen, dass diese auf Bildschirmen mit unterschiedlicher Auflösung gleich aussehen.

  15. Der Aufzählung von Eigenschaften des Kundenterminals ENUM_TERMINAL_INFO_INTEGER wurde der TERMINAL_PING_LAST hinzugefügt — der letzte bekannte Wert der Ping-Zeit bis zum Handelsserver in Mikrosekunden. Eine Sekunde besteht aus einer Million Mikrosekunden.

  16. Das Ergebnis des Ausrufs der SendFTP Funktion wird nun richtig ausgegeben. Früher wurde statt TRUE FALSE ausgegeben.
  17. Es wurde ein Fehler in der StringConcatenate Funktion behoben, der in einigen Fällen zum Ausführungsfehler "Access violation" führte.
  18. Es wurde eine Reihe von Fehlern bei der Verwendung von Template-Funktionen behoben.
  19. Jetzt können die Funktionen Print, Alert und Comment Zeilen ausgeben, die länger als 4000 Zeichen sind.
  20. Es wurde ein Fehler in der ArrayCompare Funktion behoben, der beim Vergleichen eines Arrays mit sich selbst, aber mit verschiedener Verschiebung der Ausgangsposition vom Beginn auftrat.
  21. Der Standardbibliothek wurde die Unterstützung für Hedging hinzugefügt:

    CPosition
    Es wurden folgende Methoden hinzugefügt:

    • SelectByMagic — wählt eine Position nach ihrer magischen Nummer für eine weitere Arbeit aus.
    • SelectByTicket — wählt eine Position nach ihrer Ticketnummer für eine weitere Arbeit aus.

    CTrade
    Es wurden folgende Methoden hinzugefügt:

    • RequestPosition — erhält das Ticket der Position.
    • RequestPositionBy — erhält das Ticket der Gegenposition.
    • PositionCloseBy — schließt die Position mit dem angegebenen Ticket zur Gegenposition.
    • SetMarginMode — setzt den Berechnungsmodus der Margin in Übereinstimmung mit den Einstellungen des laufenden Kontos.

    Es wurde das Überladen von Methoden hinzugefügt:

    • PositionClose — schließt Position nach Ticket.
    • PositionModify — modifiziert Position nach Ticket.

    CAccountInfo
    Es wurden folgende Methoden geändert:

    • MarginMode — erhält jetzt den Berechnungsmodus der Margin. Hat früher ähnlich wie die neue Methode StopoutMode funktioniert.
    • MarginDescription — erhält jetzt den Berechnungsmodus der Margin als Zeile. Hat früher wie die neue Methode StopoutModeDescription funktioniert.

    Es wurden folgende Methoden hinzugefügt:

    • StopoutMode — Modus der Setzung der minimalen Margin.
    • StopoutModeDescription — erhält die minimale Margin als Zeile.

    CExpert
    Es wurden folgende Methoden hinzugefügt:

    • SelectPosition — ählt eine Position für die weitere Arbeit aus.

  22. Fehlerbehebungen in der MQL5 Standardbibliothek.

Signale

  1. Es wurde eine Reihe von Fehlern bei der Anzeige des Schaufensters von Handelssignalen behoben.

Tester

  1. Es wurde ein Fehler behoben, bei dem für einige Symboltypen Komission nicht berechnet wurde.
  2. Die Ausfüllung des Expert-Feldes wurde bei den Orders, die bei der Auslösung von SL/TP entstanden sind, in Übereinstimmung mit dem Wert des Expert-Feldes der entsprechenden Position korrigiert. Früher wurde das Feld nicht ausgefüllt.
  3. Das Umschalten auf die Tabs von Ergebnissen der normalen und Forward-Optimierung wurde korrigiert.
  4. Die Berechnung und Anzeige des Envelopes-Indikators wurden korrigiert.
  5. Die Ausführung des visuellen Testens wurde optimiert.
  6. Die Berechnung des Profits und der Margin wurde bei einer großen Anzahl offener Orders und Positionen optimiert.
  7. Die Ausführung von Handelsoperationen im Hochfrequenzhandel wurde optimiert.
  8. Ab jetzt wird die Historie nicht beim Abruf der Eigenschaften eines Nebensymbols (der aktuelle Kurse nicht verlangt) synchronisiert. Zum Beispiel, SYMBOL_SELECT, SYMBOL_DIGITS, SYMBOL_SPREAD_FLOAT, SYMBOL_TRADE_CALC_MODE, SYMBOL_TRADE_MODE, SYMBOL_TRADE_STOPS_LEVEL, SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_EXEMODE usw. Früher wurde die Historie des Nebensymbols bei jedem Abruf seiner Eigenschaften synchronisiert.

MetaEditor

  1. Die Suche nach einem Wort in Dateien wurde im Modus "Nur das ganze Wort" korrigiert.
  2. Es wurde die Option hinzugefügt, eine Datei mit einem Doppelklick auf der Zeile, die das Ergebnis der Kompilierung für die entsprechende Datei beinhaltet, zu öffnen.
  3. Die Anzeige einiger Steuerelemente in Windows XP wurde verbessert.
Die Dokumentation wurde aktualisiert.


31 März 2016
MetaTrader 5 iOS Build 1261
  1. Der Plattform wurde das Hedging-System hinzugefügt. Das System ermöglicht es, eine Vielzahl von Positionen auf einem und demselben Symbol zu haben, darunter auch gegenläufige Positionen. Nun kann man auf einer Plattform sowohl mit einem Netting-Konto für an der Börse, als auch mit einem Netting- oder Hedgingkonto auf dem Devisenmarkt handeln.

    Neues Kontosystem — wie im MetaTrader 4. Dabei können Trader von allen Vorteilen der fünften Version der Plattform profitieren, zu welchen die Ausführung von Orders durch mehrere Trades (darunter auch Teilausführung), Stop Limit Orders und vieles mehr gehören.

    Aktualisieren Sie die Plattform und entdecken Sie die Hedging-Option. Beim Eröffnen eine Demokontos aktivieren Sie die Option "Hedging verwenden". Sie wird verfügbar sein, wenn der Server des Brokers bereits aktualisiert und eingestellt wurde.

  2. Zahlreiche Fehlerbehebungen und Verbesserungen.
31 März 2016
MetaTrader 5 Android Build 1262
  1. Der Plattform wurde das Hedging-System hinzugefügt. Das System ermöglicht es, eine Vielzahl von Positionen auf einem und demselben Symbol zu haben, darunter auch gegenläufige Positionen. Nun kann man auf einer Plattform sowohl mit einem Netting-Konto für an der Börse, als auch mit einem Netting- oder Hedgingkonto auf dem Devisenmarkt handeln.

    Neues Kontosystem — wie im MetaTrader 4. Dabei können Trader von allen Vorteilen der fünften Version der Plattform profitieren, zu welchen die Ausführung von Orders durch mehrere Trades (darunter auch Teilausführung), Stop Limit Orders und vieles mehr gehören.

    Aktualisieren Sie die Plattform und entdecken Sie die Hedging-Option. Beim Eröffnen eine Demokontos aktivieren Sie die Option "Hedging verwenden". Sie wird verfügbar sein, wenn der Server des Brokers bereits aktualisiert und eingestellt wurde.

  2. Zahlreiche Fehlerbehebungen und Verbesserungen.
12 Februar 2016
MetaTrader 5 Android Build 1224
  • Der Tablet-Version wurde ein Fester mit detaillierten Informationen über Handelsoperationen hinzugefügt. Klicken Sie auf eine Order oder einen Trade, um sich die Eröffnungs- und Schlusszeitpunkt genau bis auf Sekunden, Kommentar und Kommission des Brokers anzuschauen.
  • Nachrichten-Service verbessert. Sie können nun Kategorien von Nachrichten auswählen und nur das lesen, was Sie interessiert. Fügen Sie interessante Nachrichten zu Favoriten, um jederzeit auf sie zugreifen zu können.
  • Es wurden Trennlinien für Perioden für die Ansicht der Grenzen der älteren Zeitrahmen im Chart hinzugefügt.
  • Es wurde die Option hinzugefügt, die Ask-Linie auf dem Chart anzuzeigen.
  • Es wurde eine Übersetzung ins Vietnamesische und Koreanische hinzugefügt.
  • Die maximale Anzahl an Objekten im Chart wurde erhöht.
  • Zahlreiche Fehlerbehebungen und Verbesserungen.


3 Februar 2016
MetaTrader 5 iOS Build 1225
  • Was ist neu: Ab jetzt ist das Hochformat für iPad verfügbar. Nun ist es bequemer, sich lange Listen von Trades anzusehen sowie E-Mails und Finanznachrichten zu lesen.
  • Native Unterstützung für iPad Pro.
  • Die App ist nun auch auf Koreanisch verfügbar.
17 Dezember 2015
MetaTrader 5 Build 1240: Beschleunigung der Arbeit und integrierte Videos

Virtueller Server

  1. Dem Dialog der Registrierung eines virtuellen Servers wurde ein Link zum Video Tutorial "Wie man eine virtuelle Plattform abonniert" hinzugefügt. Schauen Sie sich das zweiminütiges Video an und erfahren Sie, wie man einen Handelsroboter einfach starten oder Signale rund um die Uhr kopieren kann.


    Dieses und weitere Videos finden Sie auf dem offiziellen Kanal der MetaQuotes Software Corp. auf YouTube.
  2. Es wurde der Fehler der Migration auf Hosting beim Aufruf eines benutzerdefinierten Indikators oder einer EX5-Bibliothek im benutzerdefinierten Indikator, der aus dem Expert Advisor aufgerufen wird, behoben.

Handelsterminal

  1. Die Aktualisierung der Liste offener Orders und Positionen wird bei der Ausführung von Trades mit Hochfrequenz (50 und mehr Trades pro Sekunde) wurde beschleunigt.
  2. Die anfängliche Synchronisierung des Terminals mit einem Handelsserver bei einer Vielzahl von Symbolen (Zehntausende) wurde optimiert und erheblich beschleunigt. Nach der Herstellung der Verbindung können Sie anfangen schneller zu arbeiten.
  3. Der Speicherverbrauch des Terminals wurde optimiert und wesentlich reduziert.
  4. Die Einstellungen der Markttiefe können jetzt bei beim Schließen/Öffnen des Terminals gespeichert/wiederhergestellt werden.
  5. Artefakte, die im Windows 10 beim Verschieben von Terminal-Fenstern auftraten, wurden korrigiert.
  6. Terminal: Kontextsensitive Hilfe für eine Reihe von Befehlen und Dialogen korrigiert. Führen Sie den Mauszeiger auf ein konkretes Element und drücken Sie F1, um die Hilfe aufzurufen.
  7. Die Arbeit an der Anpassung der Benutzeroberfläche an Bildschirme mit hoher Auflösung (4K) wurde fortgesetzt.

MQL5

  1. Für die Funktionen OrderGetString, HistoryOrderGetString und HistoryDealGetString, die für das Erhalten von Informationen über Orders und Trades verantwortlich sind, wurden neue Eigenschaften hinzugefügt:

    • ORDER_EXTERNAL_ID - Identifikator der Order in einem externen Handelssystem (an einer Börse).
    • DEAL_EXTERNAL_ID - Identifikator eines Trades in einem externen System.

  2. Die Funktion ZeroMemory wurde bei der Arbeit mit Strukturen und Klassen korrigiert. In einigen Fällen wurde der Speicher nicht entleert.
  3. Es wurden Fehlercodes bei der Arbeit der SendFTP Funktion hinzugefügt. Die Funktion sendet die Datei an die Adresse, die in den Einstellungen im Tab "FTP" angegeben ist.

    • ERR_FTP_NOSERVER - Ftp-Server wurde nicht in den Einstellungen definiert
    • ERR_FTP_NOLOGIN - Ftp-Benutzername wurde nicht in den Einstellungen definiert
    • ERR_FTP_FILE_ERROR - Datei existiert nicht
    • ERR_FTP_CONNECT_FAILED - Verbindung mit dem Ftp-Server fehlgeschlagen
    • ERR_FTP_CHANGEDIR - Upload-Verzeichnis auf dem Ftp-Server nicht gefunden
    • ERR_FTP_CLOSED - Verbindung mit einem Ftp-Serer geschlossen

  4. Der Zugriff auf die Typumwandlung von Objekten nach Vererbung von einer abgeleiteten Klasse zur Basisklasse wurde korrigiert.
  5. Es wurden Fehler in Klassentemplates behoben.
  6. Es wurde ein Fehler beim Abfragen von Ticks durch die CopyTicks Funktion behoben. Bei der Angabe des COPY_TICKS_TRADE Parameters (nur Handelsticks kopieren) für die gleichen aufeinanderfolgenden Ticks (mit demselben Volumen und Last Preis) wurde nur der erste Tick weitergegeben.
  7. Es wurde ein Fehler beim Definieren der Größe einer Variablen vom custom-Typ behoben.
  8. Es wurde ein Fehler der Anwendung von ZLib in der Funktion CryptDecode behoben, der früher zu einer Endlosschleife beim Entpacken führte.

Tester

  1. Die Synchronisierung der Preishistorie nach einem Symbol, der sich vom Symbol des Testens unterscheidet, wurde korrigiert.
  2. Die Verdoppelung der Transaktion TRADE_TRANSACTION_DEAL_ADD (Hinzufügen eines Trades der Historie) wurde im OnTradeTransaction Event-Handler korrigiert.
  3. Das Verhalten des Forward-Testens wurde bei einer genetischen Optimierung geändert. Alle einmaligen Ergebnisse, die bei der genetischen Optimierung erhalten wurden, werden jetzt bei den Forward-Pass berücksichtigt. Früher wurden nur 1/4 der Ergebnisse verwendet.

MetaEditor

  1. MetaEditor: Dem MQL5 Wizard wurde ein neuer Link zum Video Tutorial "Wie man einen Handelsroboter im MQL5 Wizard erstellt" hinzugefügt. Schauen Sie sich das dreiminütige Video an und erstellen Sie einen Handelsroboter, ohne eine einzige Codezeile zu schreiben.


    Dieses und weitere Videos finden Sie auf dem offiziellen Kanal der MetaQuotes Software Corp. auf YouTube.
  2. Das Anordnen offener Fenster, wenn eines der Fenster maximiert wurde, wurde korrigiert. Geöffnete Dateien können über das Menü "Fenster" nebeneinander, vertikal, horizontal und gestapelt angeordnet werden.
  3. Die Arbeit an der Anpassung der Benutzeroberfläche an Bildschirme mit hoher Auflösung (4K) wurde fortgesetzt.
Die Dokumentation wurde aktualisiert.
11 November 2015
MetaTrader 5 iPhone Build 1171
Fehlerbehebungen und Verbesserungen.
3 November 2015
MetaTrader 5 Android Build 1172
  1. Es ist noch einfacher geworden, Charts von Währungspaaren zu skalieren: die Zahl der Skalierungsstufen und die Anzeigequalität wurden erhöht.

    MetaTrader 5 Android Build 1172: eine bequeme Skalierungsfunktion für Charts und aufgelaufene Zinsen in den Eigenschaften der Bonds

  2. Alle Änderungen im Set von Symbolen und der Reihenfolge der Symbole im MarketWatch sowie in den Charteinstellungen (Skalierung, Farbschema, Liste der Objekte und Indikatoren), werden jetzt gespeichert, unabhängig davon, wie die App geschlossen wurde.
  3. In den Eigenschaften der Bonds werden jetzt Nennwert und aufgelaufene Zinsen angezeigt.
30 Oktober 2015
MetaTrader 5 build 1210: Aktualisierung der Markttiefe und allgemeine Verbesserungen

Handelsterminal

  1. Es wurde die Möglichkeit hinzugefügt, Limit Orders zu einem Preis, der schlechter als Marktpreis ist, in der Markttiefe zu platzieren. Dies garantiert, dass die Order zum angegebenen Preis ausgeführt wird.

    Wenn man eine Limit Order über die Bid/Ask-Grenze zieht, wird sie zu einer Stop Order (Buy Limit wird durch Buy Stop und Sell Limit durch Sell Stop ersetzt). Drücken und halten Sie Strg beim Ziehen, damit die Limit Order nicht durch eine Stop Order ersetzt wird.




  2. Den Chart-Einstellungen wurde die Option "Buttons des schnellen Handels anzeigen" hinzugefügt. Mithilfe dieser Option kann man die Buttons des Ein-Klick-Handel-Panels und der Markttiefe ausblenden.




  3. Es wurde ein Fehler behoben, der in einigen Fällen zu Konflikten zwischen Tooltips und anderen Apps führte.

MQL5

  1. Die Arbeit der Funktionen für das Kopieren historischer Daten Copy* mit dynamischen Arrays mit dem Flag AS_SERIES wurde korrigiert. Das Flag wird von der Funktion ArraySetAsSeries gesetzt. Es gibt an, dass die Elemente des Arrays wie in Zeitreihen indiziert werden.
  2. Die Eigenschaft CHART_SHOW_ONE_CLICK wurde geändert. Für die Arbeit mit der Eigenschaft werden ChartSetInteger und ChartGetInteger verwendet. Früher erlaubte die Eigenschaft, das Ein-Klick-Handel-Panel anzuzeigen/auszublenden. Diese Eigenschaft kann nun Buttons für den Aufruf des Ein-Klick-Handel-Panels und der Marktübersicht im Chart anzeigen/ausblenden (ähnlich der Option "Show quick trading buttons" in den Chart-Einstellungen).
  3. Es wurde eine Reihe von Fehlern bei der Arbeit von Templates behoben.

Die Dokumentation wurde aktualisiert.

23 Oktober 2015
MetaTrader 5 Build 1200: Tick-Historie und direkte Bezahlung von Services

Handelsterminal

  1. Der Marktübersicht wurde das Arbeiten mit der Tick-Historie hinzugefügt. Früher zeigte ein Tickchart nur die Historie, die sich während der Arbeit im Terminal angesammelt hat. Nun können Sie auf die ganze Tickhistorie auf dem Handelsserver zugreifen. Deaktivieren Sie Autoscroll und beginnen Sie den Tick-Chart mit der Maustaste in die Vergangenheit zu scrollen, um die fehlende Historie vom Server zu laden, wie dies für Preischarts implementiert ist. Die neue Funktionalität wird für Trader hilfreich sein, die möglichst detaillierte Preischarts brauchen.


    Um eine tiefe Tick-Historie automatisch zu erhalten, verwenden Sie die Funktion CopyTicks(). Die Funktion wurde so geändert, dass sie die fehlende Historie abruft und lädt, wenn diese auf dem Handelsserver vorhanden ist.

  2. Es wurde ein Icon für ein schnelles Öffnen/Schließen der Markttiefe neben dem Ein-Klick-Handel-Panel hinzugefügt. Sie können auch den neuen Hotkey Alt+B nutzen, nicht nur im Chart, sondern auch im MarketWatch-Fenster. Die Markttiefe wird für das Symbol geöffnet, das in der Marktübersicht ausgewählt wurde.



  3. Die Informationen über die Charakteristiken des PCs und des Betriebssystems werden nun beim Start des Kundenterminals ins Journal eingetragen. Beispiel:
    2015.10.14 14:48:18.486	Data Folder: C:\Program Files\MetaTrader 5
    2015.10.14 14:48:18.486	Windows 7 Professional (x64 based PC), IE 11.00, UAC, 8 x Intel Core i7  920 @ 2.67GHz, RAM: 8116 / 12277 Mb, HDD: 534262 / 753865 Mb, GMT+03:00
    2015.10.14 14:48:18.486	MetaTrader 5 build 1190 started (MetaQuotes Software Corp.)
  4. Die Arbeit mit Symbolen wurde in der "Marktübersicht" (Market Watch) verbessert:

    • Nun werden die Anzahl an Symbolen in der Marktübersicht und die Gesamtzahl der Symbole auf dem Handelsserver angezeigt.
    • Es wurde eine Zeile für das Hinzufügen eines neuen Symbols mit einer Liste von Varianten hinzugefügt.
    • Die Suche in der Zeile erfolgt nicht nur nach Symbolnamen, sondern auch nach seiner Beschreibung und internationaler Bezeichnung.


  5. Es wurde Unterstützung für den Wirtschaftskalender in mehreren Sprachen hinzugefügt.
  6. Zum Wirtschaftskalender wurden fehlende Länder-Icons hinzugefügt.
  7. Es wurden Hotkeys für den Aufruf des Fensters der Verwaltung von Symbolen in der Marktübersicht hinzugefügt - Strg+U.
  8. Das Einordnen offener Fenster durch Anweisungen im Menü "Window" wurde korrigiert.
  9. Es wurde ein Fehler behoben, wenn das Terminal in einigen Fällen die Datei des Zertifikats unter Verwendung einer erweiterten Authentifizierung nicht finden konnte.
  10. Es wurde ein Fehler behoben, der in einigen Fällen zu einer Schleife der Synchronisierung der Preischistorie führte.
  11. Es wurde ein Fehler behoben, der dazu führte, dass die StopLoss/TakeProfit Levels einer früher eröffneten Position beim Erhöhen deren Volumen auf Null gesetzt wurden, wenn das Symbol im Request Execution Modus gehandelt wurde.
  12. Es wurde das Überprüfen der Möglichkeit korrigiert, eine Sell-Order zu platzieren, wenn es eine Long-Position für Symbole mit dem Handelsmodus "Long only" gibt.
  13. Die Arbeit der Funktion Trailing-Stop wurde korrigiert. In einigen seltenen Fällen konnte Stop Loss für eine offene Position falsch nachgezogen werden.
  14. Die Arbeit an der Anpassung der Benutzeroberfläche an Bildschirme mit hoher Auflösung (4K) wurde fortgesetzt.
  15. Es wurde ein Fehler korrigiert, der dazu führte, dass historische Daten als "ungenutzt" gelöscht wurden trotz einem regulären Abfragen der Daten aus MQL5-Programmen.
  16. Die Anzeige einiger Elemente der Benutzerschnittstelle im Windows 10 wurde verbessert.
  17. Übersetzungen der Benutzerschnittstelle wurden aktualisiert.

Market

  1. Die Arbeit mit dem MQL5 Market wurde umgestaltet und optimiert.
  2. Käufe ohne einen MQL5.community Account wurden für Terminals verboten, die auf einem VPS laufen. Nun muss man seinen MQL5.community Account in den Einstellungen eingeben, um ein Produkt zu kaufen: Werkzeuge - Optionen - Community.
  3. Nun kann man Produkte über das Zahlungssystem UnionPay erwerben.
  4. Erweitertes Logging beim Kaufen von Produkten im MQL5 Market.

Virtuelles Hosting und Signale

  1. Nun kann man virtuelles Hosting und Abonnements für Signale direkt über Zahlungssysteme bezahlen.
    Um einen virtuellen Server zu bezahlen ist es nicht notwendig, sich in MQL5.community einzuloggen und Geld in einen Account einzuzahlen. Nun können Sie den Service über ein Zahlungssystem direkt auf der Plattform bezahlen.


    Wählen Sie das gewünschte System und führen Sie die Zahlung aus:


    Direkt vom Terminal aus können Sie ein kostenpflichtiges Abonnement für ein Signal abschließen, wählen Sie einfach die gewünschte Zahlungsmethode aus.


    Der Betrag wird zuerst Ihrem MQL5.community Account gutgeschrieben, danach erfolgt die Zahlung vom Account. Auf diese Weise verfügen Sie immer über einen transparenten und klaren Verlauf gemieteter Server und abonnierter Signale und können sich alle Zahlungen für MQL5.community Services anschauen.
  2. Nun kann das virtuelle Hosting bei der Arbeit in einer 32-Bit-Version des Kundenterminals verwaltet werden (außer der Migration).
  3. Die Migration von Einstellungen eines FTP-Exports auf einen virtuellen Server wurde korrigiert, unabhängig von der Erlaubnis der Publikation über FTP.

MQL5

  1. Es wurde ein neuer optimierender Compiler hinzugefügt. Die Ausführung von Programmen wurde auf 64-Bit-Plattformen bis auf das Fünffache beschleunigt. MQL5-Programme sind in der letzten Version des MetaEditor neu zu kompilieren.
  2. Das Format der MqlTick Struktur wurde erweitert. Nun werden die Zeit des Eintreffens eines Ticks in Millisekunden sowie die Flags in der Struktur übergeben, die es erlauben festzustellen, welcher Tick-Parameter sich geändert hat.
    struct MqlTick
      {
       datetime     time;          // Zeit der letzten Preisaktualisierung
       double       bid;           // Aktueller Bid-Preis
       double       ask;           // Aktueller Ask-Preis
       double       last;          // Aktueller Preis des letzten Trades (Last)
       ulong        volume;        // Volumen für den aktuellen Last-Preis
       long         time_msc;      // Zeit der letzten Aktualisierung der Preise in Millisekunden
       uint         flags;         // Tick-Flags
      };
    Für jeden Tick werden alle Parameter ausgefüllt, unabhängig davon, ob sich die Daten im Vergleich zum vorherigen Tick geändert haben oder nicht. Dies erlaubt es, immer aktuelle Kurse zu jedem Zeitpunkt zu haben, ohne nach vorherigen Werten der Tickhistorie suchen zu müssen. Mit dem Eintreffen eines Ticks könnte sich z.B. nur der Bid-Preis ändern, aber die anderen Parameter werden neben dem neuen Preis auch in der Struktur angegeben: vorheriger Ask-Preis, Positionsgröße usw. Um festzustellen, welche Daten sich mit dem aktuellen Tick geändert haben, analysieren Sie seine Flags:

    • TICK_FLAG_BID - der Tick hat den Bid-Preis geändert
    • TICK_FLAG_ASK  - der Tick hat den Ask-Preis geändert
    • TICK_FLAG_LAST - der Tick hat den Last-Preis geändert
    • TICK_FLAG_VOLUME - der Tick hat die Positionsgröße geändert
    • TICK_FLAG_BUY - der Tick ist das Ergebnis eines Buy-Trades
    • TICK_FLAG_SELL - der Tick ist das Ergebnis eines Sell-Trades

    Die Struktur MqlTick wird in zwei Methoden verwendet:

    • CopyTicks - die Methode unterstützt das alte Format der Struktur nicht. Die vorher kompilierten EX5-Dateien, die das alte Format von Ticks verwenden, geben beim Aufruf der CopyTicks Funktion den Fehler 4006 (ERR_MQL_INVALID_ARRAY) zurück.
    • SymbolInfoTick - die Methode unterstützt sowohl das alte als auch das neue Format der Struktur.

  3. Es wurden Klassen-Templates hinzugefügt. Dies erlaubt es parametrisierte Klassen wie in C++ zu erstellen. So können Sie einen höheren Abstraktionsgrad erreichen und einen und denselben Code für die Arbeit mit den Objekten verschiedener Klassen gleich verwenden. Ein Anwendungsbeispiel:
    //+------------------------------------------------------------------+
    //|                                                    TemplTest.mq5 |
    //|                        Copyright 2015, MetaQuotes Software Corp. |
    //|                                             https://www.mql5.com |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2015, MetaQuotes Software Corp."
    #property link      "https://www.mql5.com"
    #property version   "1.00"
    //+------------------------------------------------------------------+
    //| Deklarieren einer Template-Klasse                                        |
    //+------------------------------------------------------------------+
    template<typename T>
    class TArray
      {
    protected:
       T                 m_data[];
    
    public:
    
       bool              Append(T item)
         {
          int new_size=ArraySize(m_data)+1;
          int reserve =(new_size/2+15)&~15;
          //---
          if(ArrayResize(m_data,new_size,reserve)!=new_size)
             return(false);
          //---
          m_data[new_size-1]=item;
          return(true);
         }
       T                 operator[](int index)
         {
          static T invalid_index;
          //---
          if(index<0 || index>=ArraySize(m_data))
             return(invalid_index);
          //---
          return(m_data[index]);
         }   
      };
    //+---------------------------------------------------------------------+
    //| Template-Klasse eines Arrays von Pointers, im Destruktor löscht er  |
    //| Objekte, deren Pointers in diesem Array gespeichert wurden.         |
    //|                                                                     |
    //| Beachten Sie die Vererbung von der Template-Klasse TArray           |
    //+---------------------------------------------------------------------+
    template<typename T>
    class TArrayPtr : public TArray<T *>
      {
    public:
       void             ~TArrayPtr()
         {
          for(int n=0,count=ArraySize(m_data);n<count;n++)
             if(CheckPointer(m_data[n])==POINTER_DYNAMIC)
                delete m_data[n];
         }
      };
    //+---------------------------------------------------------------------------------------+
    //| Deklarieren wir die Klasse, die Pointers auf ihre Objekte werden im Array gespeichert |
    //+---------------------------------------------------------------------------------------+
    class CFoo
      {
       int               m_x;
    public:
                         CFoo(int x):m_x(x) { }
       int               X(void) const { return(m_x); }
      };
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    TArray<int>     ExtIntArray;   // das Template TArray instanziieren (das Template TArray durch den Typ int spezialisieren)
    TArray<double>  ExtDblArray;   // das Template TArray instanziieren (das Template TArray durch den Typ double spezialisieren)
    TArrayPtr<CFoo> ExtPtrArray;   // das Template TArrayPtr instanziieren (das Template TArrayPtr durch den Typ CFoo spezialisieren)
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- die Arrays mit Daten füllen
       for(int i=0;i<10;i++)
         {
          int integer=i+10;
          ExtIntArray.Append(integer);
          
          double dbl=i+20.0;
          ExtDblArray.Append(dbl);
          
          CFoo *ptr=new CFoo(i+30);
          ExtPtrArray.Append(ptr);
         }
    //--- den Inhalt der Arrays ausgeben
       string str="Int:";
       for(int i=0;i<10;i++)
          str+=" "+(string)ExtIntArray[i];      
       Print(str);   
       str="Dbl:";
       for(int i=0;i<10;i++)
          str+=" "+DoubleToString(ExtDblArray[i],1);
       Print(str);   
       str="Ptr:";
       for(int i=0;i<10;i++)
          str+=" "+(string)ExtPtrArray[i].X();      
       Print(str);
    //--- die über new erstellten CFoo-Objekte müssen nicht gelöscht werden, sie werden im Destruktor des Objekts TArrayPtr<CFoo> gelöscht  
      }
    Das Ergebnis der Ausführung:
    TemplTest (EURUSD,H1)    Int: 10 11 12 13 14 15 16 17 18 19
    TemplTest (EURUSD,H1)    Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0
    TemplTest (EURUSD,H1)    Ptr: 30 31 32 33 34 35 36 37 38 39

  4. Es wurden die neuen Operationen * und & hinzugefügt: Erhalten einer Variablen nach dem Verweis und Erhalten des Verweises zu einer Variablen.
  5. Es wurde eine überladene Form der Funktion ObjectsDeleteAll hinzugefügt - Löschen aller Objekte nach dem Präfix des Namen im Unterfenster des Charts.
    int  ObjectsDeleteAll(
       long           chart_id,   // Chart-ID
       const string     prefix,   // Präfix des Objektnamens
       int       sub_window=-1,   // Index des Fensters
       int      object_type=-1    // Typ des zu löschenden Objekts
       );
  6. Die Arbeit der Funktion ObjectGetValueByTime wurde korrigiert. In einigen Fällen (z.B. für die horizontale Trendlinie) wurde der Preiswert nach Zeit im Chart falsch zurückgegeben.
  7. Die Arbeit der Copy* Funktion wurde in den Fällen korrigiert, wenn es keine historischen Daten auf dem Server gibt. Das Fehlen dieser Daten auf dem Server führte früher beim Aufruf dieser Funktionen zu einer Verzögerung von 30-50 Sekunden.
  8. Fehlerbehebungen in der MQL5 Standardbibliothek.
  9. Die Dokumentation zur Standardbibliothek wurde ins Deutsche, Französische, Chinesische, Türkische, Spanische und Portugiesische übersetzt.
  10. Es wurde die MQL5-Dokumentation in der japanischen Sprache hinzugefügt.

Tester

  1. Nun ist es viel einfacher, Programme für den Start im Strategietester auszuwählen. Die Liste wird als ein Baum entsprechend den Verzeichnissen angezeigt, in welchen Expert Advisors und Indikatoren abgelegt sind.


  2. Die Anzeige einiger Indikatoren beim visuellen Testen entspricht nun der Anzeige im Kundenterminal.
  3. Es wurde der Fehler des Setzens des Hebels und der Timeframe eines Charts beim Debuggen von MQL5-Programmen im Strategietester behoben.
  4. Das Debugging von Indikatoren wurde beim Testen anhand historischer Daten korrigiert.

Verbesserungen anhand Crash-Logs.

Die Dokumentation wurde aktualisiert.

123456