Was ist neu im MetaTrader 5

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

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.


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

3 Juni 2015
MetaTrader 5 Build 622: Nun ist es einfacher, Handelsroboter im Market zu kaufen!

Nun kann man jede Anwendung im Market in einem Schritt ohne Registrierung direkt im MetaTrader 4/5 kaufen. Dafür klicken Sie einfach auf "Kaufen" und wählen Sie das gewünschte Zahlungssystem aus.


Sie werden auf die Seite des Zahlungssystems weitergeleitet, wo Sie den Kauf abschließen können. PayPal, WebMoney, Neteller oder Kreditkarte - bezahlen Sie Ihre Käufe im Market für Handelsroboter und Indikatoren, wie es Ihnen am besten passt.


Nach dem Kauf empfehlen wir Ihnen, ein Benutzerkonto in MQL5.community anzulegen. Ihr Kauf wird automatisch an den Account gebunden. Auf diese Weise bekommen Sie die Möglichkeit, das Produkt zu aktualisieren und es auf anderen PCs zu installieren. Darüber hinaus bietet ein MQL5.community Account Ihnen Zugang zu einer Vielzahl von Services für die MetaTrader Plattformen, dazu gehören Signale für das Kopieren von Trades erfolgreicher Händler, virtuelles Hosting für eine ununterbrochene Arbeit Ihrer Anwendungen und der Freelance-Service für das Bestellen von Handelsroboter bei Entwicklern.

Nun kennen Sie die einfachste und schnellste Weise, einen Handelsroboter zu bekommen. Über 5 000 verschiedene Anwendungen für MetaTrader warten auf Sie im Market - einfach auswählen und kaufen!


22 Mai 2015
MetaTrader 5 Build 1150: Einfache Käufe im Market, Debugging anhand Historie und TimeSales

Market

  1. Wir stellen den neuen Mechanismus der "direkten" Käufe vor. Nun ist es noch einfacher, einen Handelroboter oder Indikator im Market zu erwerben, dafür braucht man nicht einmal einen MQL5.community Account zu haben.

    Kauf in einem Schritt
    Um einen Kauf zu tätigen, ist es nicht erforderlich, sich in MQL5.community einzuloggen und Geld in Account einzuzahlen. Nun können Sie ein Produkt über ein Zahlungssystem direkt auf der Plattform bezahlen. Damit Sie immer einen transparenten Kaufverlauf haben und nicht in verschiedenen Zahlungssystemen danach suchen sollten, wird der benötigte Betrag zuerst Ihrem Account in MQL5.community gutgeschrieben, anschließend wird das Produkt von Ihrem Account bezahlt.

    Auf diese Weise können Sie sich immer Ihre Zahlungen im MQL5.community Profil anschauen.




    Kauf ohne Registrierung
    Nun können Sie ein Produkt im Market kaufen, auch ohne einen Account in MQL5.community zu haben. Klicken Sie einfach auf "Kaufen" und bezahlen Sie das Produkt über ein Zahlungssystem.



    Sie werden auf die Seite des Zahlungssystems weitergeleitet, wo Sie den Kauf abschließen können.



    Nach dem Kauf empfehlen wir Ihnen dringend, einen Account in MQL5.community anzulegen, und Ihr Kauf wird automatisch an den Account gebunden. Auf diese Weise bekommen Sie die Möglichkeit, das Produkt zu aktualisieren und es auf anderen PCs zu installieren.

MetaEditor

  1. Es wurde die Möglichkeit hinzugefügt, Expert Advisors und Indikatoren anhand historischer Daten zu debuggen. Früher konnte man nur die Charts debuggen, die in Echtzeit aktualisiert werden.

    Nun kann man Programme anhand der gewünschten historischen Daten testen. Das Debugging erfolgt im Modus des visuellen Testens im Strategietester. Ein Programm wird auf dem Chart gestartet, der nach der im Tester modellierten Sequenz von Ticks erstellt wird.

    Geben Sie folgende Parameter für das Debugging in den Einstellungen des MetaEditors an: Symbol, Zeitrahmen, Intervall, Modus der Ausführung und der Generierung von Ticks sowie Ersteinzahlung und Hebel. Diese Parameter werden für visuelles Testen verwendet.



    Platzieren Sie Haltepunkte im Code des Programms und starten Sie das Debugging anhand historischer Daten.



    Danach werden visuelles Testen und Debugging gestartet.




Virtuelles Hosting

  1. Der Service "Virtuelles Hosting" wurde verbessert.

    Der größte Teil der Änderungen betrifft die Arbeit in Wine auf PCs mit den Betriebssystemen Linux und Mac OS. Nun kann ein virtueller Server erfolgreich registriert werden, und man kann Migration durchführen, Performance überwachen und sich Log-Datein anschauen.


    Das Arbeiten mit dem Journal wurde auch geändert. Wenn eine zu große Anzahl von Einträgen abgefragt wird, wird nur ein Teil der Einträge für die angegebene Periode heruntergeladen. Dies verhindert die Reduzierung der Performance bei zu großen Log-Dateien. Um ältere Einträge aus dem Journal herunterzuladen, braucht man den abgefragten Zeitraum nicht zu ändern. Wählen Sie einfach die letzte Zeile im Log-Fenster aus und drücken Sie die PgDn-Taste.




Handelsterminal

  1. Nun wird ein spezieller Typ von Instrumenten unterstützt, die nicht gehandelt werden und die man als Aktiva verwenden kann, um die erforderliche Margin für offene Positionen anderer Instrumenten bereitzustellen. Der Trader kann zum Beispiel Gold in physischer Form auf dem Konto haben und es als Margin für offene Positionen verwenden.

    Solche Vermögenswerte werden als offene Positionen angezeigt, der Wert wird nach der folgenden Formel berechnet: Contract size * Lots * Market Price * Liquidity Rate, wobei:

    • Contract size - Kontraktgröße
    • Lots - Lotgröße
    • Market Price - aktueller Marktpreis des Instruments
    • Liquidity Rate - Koeffizient der Liquidität - Anteil eines Vermögenswertes, den der Broker als Margin zu verwenden erlaubt.


    Assets werden zu Equity addiert und erhöhen die freie Margin, was es erlaubt, das Volumen von Transaktionen auf dem Konto zu erhöhen.

    Auf diese Weise gibt es die Möglichkeit, Konten mit verschiedenen Typen der Margin-Berechnung zu eröffnen.


    Im angeführten Beispiel hat der Trader eine Unze Gold, die einen Marktwert von 1.210,56 USD hat. Dieser Wert wird zu Equity und der freien Margin addiert. Auf diese Weise kann der Trader den Handel fortsetzen, auch wenn sein Kontostand gleich Null ist.

  2. Neue Markttiefe mit Tickcharts und Anzeige von Time&Sales im Chart.

    Für Börseninstrumente, für welche reale Preise übermittelt werden, wird nun ein Tick-Chart in der Markttiefe angezeigt. Auf diesem Chart werden alle an der Börse ausgeführten Trades angezeigt:

    • Rote Kreise - Sell-Trades
    • Blaue Kreise - Buy-Trades
    • Grüne Kreise - die Richtung des Trades unbestimmt. Dies wird verwendet, wenn die Börse die Richtung der Trades nicht übermittelt. In diesem Fall wird die Richtung basierend auf dem genutzten Preis der Transaktion (Ask- und Bid-Preis) bestimmt. Eine Buy-Transaktion wird zum Ask-Preis oder darüber ausgeführt, eine Sell-Transaktion zum Buy-Preis oder darunter. Die Richtung gilt als unbestimmt, wenn der Preis der Transaktion zwischen dem Bid- und Ask-Preis liegt.

    Je größer der Kreis ist, desto größer ist das Volumen der ausgeführten Transaktion. Das Volumen der Trades wird als Histogramm unter dem Tickchart angezeigt.



    Am oberen und unteren Ende des Histogramms, wird das Gesamtvolumen der aktuellen Buy-/Sell-Angebote angezeigt.

  3. Dem Dialog der Auswahl von Finanzinstrumenten wurde eine Spalte hinzugefügt, die das Ablaufdatum eines Symbols anzeigt, sowie die Option, abgelaufene Symbole auszublenden. Darüber hinaus wurde ein automatisches Ersetzen abgelaufener Kontrakte durch aktuelle hinzugefügt.



    Für eine kompakte Anzeige werden alle abgelaufenen Instrumente in der Liste ausgeblendet. Das ist bei der Arbeit auf dem Terminmarkt besonders praktisch. Als nicht mehr aktuell gilt ein abgelaufenes Instrument, was nach dem Parameter "Last Trade" festgelegt wird. Dieses Datum wird in der Symbolliste in der Spalte "Expiration" angegeben. Damit alle Symbole angezeigt werden, aktivieren Sie die Option "Abgelaufene Kontrakte anzeigen".

    Der Einfachheit halber wird die Liste der Symbole automatisch sortiert:

    • zuerst Symbole ohne Ablaufdatum
    • danach die Symbole mit dem nächstgelegenen Ablaufdatum
    • anschließend die nächsten Symbole mit dem weiter entfernt liegenden Ablaufdatum
    • danach in alphabetischer Reihenfolge

    Für das automatische Ersetzen abgelaufener Symbole durch aktive wird die Option "Abgelaufene Symbole automatisch entfernen" im Kontextmenü im Marktübersicht-Fenster.



    Nach dem Neustart des Terminals werden abgelaufene Symbole ausgeblendet und durch aktive ersetzt. Z.B. der abgelaufene Future LKOH 3.15 wird durch den nächsten Future LKOH 6.15. ersetzt.

    Symbole mit offenen Charts werden auch ersetzt, aber nur wenn auf diesen Charts kein Expert Advisor läuft.

  4. Die Aktualisierung des Status der Handelsbuttons in der Markttiefe (je nach dem, ob es eine Position gibt, und ob nur das Eröffnen von Long-Positionen erlaubt ist) wurde korrigiert. Wenn es keine Positionen gibt, ist der Close-Button inaktiv. Wenn das Eröffnen von Short-Positionen deaktiviert wurde, ist der Button Sell inaktiv.

  5. Die Arbeit an der Anpassung der Benutzeroberfläche an Bildschirme mit hoher Auflösung (4K) wurde fortgesetzt.
  6. Es wurden Fehler bei der Prüfung des Volumens einer zu schließenden Position im Modus Request Execution behoben, wenn das Volumen des Trades kleiner als das minimal zulässige Volumen ist.
  7. Es wurde ein Fehler korrigiert, der in einigen Fällen dazu führte, dass mehrere Instanzen des Terminals von einem Verzeichnis aus gestartet werden konnten.
  8. Nun wird der Wirtschaftskalender in verschiedenen Sprachen unterstützt und automatisch sortiert. Die Sortierung erfolgt nach der Sprache des Interfaces im Terminal.
  9. Dem Log-Viewer wurde die Möglichkeit hinzugefügt, in den angezeigten Einträgen des Journals zu suchen.



    Die Suche nach einem Wort/Phrase erfolgt in der angezeigten Log-Liste.
  10. Es wurde eine Übersetzung des Kundenterminals in die thailändische Sprache hinzugefügt.
  11. Die Übersetzung des Kundenterminals in Hindi wurde aktualisiert.

MQL5

  1. Es wurde die Funktion GetMicrosecondCount hinzugefügt. Sie gibt die Anzahl den an Mikrosekunden zurück, die seit dem Beginn der Arbeit eines MQL5-Programms verlaufen sind:
    ulong  GetMicrosecondCount();
    Diese Funktion kann für ein zusätzliches Profiling der Ausführung eines Programms und das Identifizieren von "Engpässen" verwendet werden.

  2. Der Aufzählung ENUM_OPENCL_PROPERTY_INTEGER wurde die Eigenschaft CL_BUFFER_SIZE hinzugefügt, die die Größe des OpenCL Puffers in Byte zurückgibt. Diese Eigenschaft kann mithilfe der Funktion CLGetInfoInteger abgefragt werden.
  3. Fehlermeldungen in der Funktion WebRequest wurden geändert. Wenn ein Fehler bei der Verwendung der Funktion auftritt, wird das result-Array eine Fehlerbeschreibung enthalten.
  4. Es wurde eine Reihe von Fehlern bei der Kompilierung von Makros behoben.
  5. Die Funktionen ArraySort, ArrayBsearch, ArrayMinimum und ArrayMaximum arbeiten nun auch mit mehrdimensionalen Arrays. Die Sortierung und Suche erfolgen nur nach dem ersten (Null) Index des Arrays. Vorher arbeiteten diese Funktionen nur mit eindimensionalen Arrays.

Tester

  1. Fehlerbehebungen und Verbesserungen im visuellen Testen. Nun erfolgt die Regulierung der Test-Geschwindigkeit über die Werkzeugleiste "sanfter".

Verbesserungen anhand Crash-Logs.

Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

20 März 2015
MetaTrader 5 Build 1100: Beschleunigung des Testens und der Optimierung von Expert Advisors

Tester

  1. Im Agenten-Manager wird nun der Status der Verbindung mit MQL5 Cloud Network angezeigt. Nachdem man Agenten installiert, können die Benutzer ganz einfach prüfen, ob sie Aufgaben vom Cloud-Netzwerk erhalten können.


    Nun wird der Status der Verbindung mit MQL5 Cloud Network angezeigt


  2. Fehlerbehebungen und Verbesserungen im Strategietester. Die Zeitverlust bei vorbereitenden Operationen und Netzwerklatenz wurden erheblich reduziert. Das Testen und die Optimierung wurden in allen Modi beschleunigt: bei der Arbeit mit lokalen Testagenten, mit Agenten in einem lokalen Netz und bei der Verwendung des MQL5 Cloud Netzwerkes.

Handelsterminal

  1. Nun wird die Anzahl ungelesener E-Mails im Reiter "E-Mails" im Werkzeuge-Fenster angezeigt.


    Nun werden ungelesene E-Mails angezeigt


  2. Nun wird die Liste laufender Expert Advisors für das verbundene Handelskonto im Navigator-Fenster angezeigt. Für jeden Expert Advisor wird der Chart angegeben, auf welchem er läuft. Ein Icon zeigt, ob Autotrading für den Expert Advisor aktiviert ist.


    Nun wird die Liste der laufenden Expert Advisors angezeigt


    Über die Befehle des Kontexmenüs kann man für einen Expert Advisor Autotrading aktivieren/deaktivieren, ihn vom Chart löschen oder sich seine Eigenschaften anschauen.
  3. Die Genauigkeit des Algorithmus, der verfügbare Zugangspunkte für die Verbindung zu einem Handelsserver bestimmt, wurde erhöht.
  4. Es wurde ein Fehler behoben, der in einigen Fällen zum Löschen der Datenbank von Konten beim Neuinstallieren eines Terminals führte.
  5. Die Arbeit an der Anpassung der Benutzeroberfläche an Bildschirme mit hoher Auflösung (4K) wurde fortgesetzt.

Market

  1. Es wurden Fehler bei der Aktualisierung des Kontostandes eines MQL5-Benutzerkontos nach dem Kauf oder Miete eines Produktes behoben.

Virtual Hosting

  1. Es wurden Fehler bei der Migration benutzerdefinierter Signale auf einen virtuellen Server behoben.
  2. Es wurde ein Fehler bei der Aktualisierung des Status des virtuellen Hostings im Navigator-Fenster behoben.

MQL5

  1. Es wurden Fehler behoben, die in einigen Fällen dazu führten, dass die Optimierung von Expert Advisors in MQL5 Cloud Network unmöglich war.
  2. Der Aufruf von OnDeinit wurde beim Löschen eines Expert Advisors mithilfe der Funktion ExpertRemove während des Testens korrigiert. Früher wurde das Ereignis OnDeinit unter den beschriebenen Bedingungen nicht aufgerufen.
  3. Es wurden Fehler bei der Arbeit mit Ressourcen in EX5-Bibliotheken behoben.
  4. Es wurden Fehler bei der Analyse von Makros behoben.

Verbesserungen anhand Crash-Logs.

Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

16 Februar 2015
MetaTrader 5 Build 1085
  1. Terminal: Nun ist der Service Virtual Hosting verfügbar. Man kann einen virtuellen Server für sein Handelskonto direkt im Terminal mieten. Nun ist es noch einfacher, eine ununterbrochen Verbindung zum Handelsserver und Stromversorgung für laufende Expert Advisors und für das Kopieren von Signalen zu sichern.

    Das Hosting virtueller Server erfolgt durch Partnerunternehmen von MetaQuotes Software Corp.

    Registrierung eines virtuellen Servers
    Um ein Terminal auf einem virtuellen Server zu bekommen, verbinden Sie das gewünschte Handelskonto und führen Sie den Befehl "Virtuellen Server registrieren" aus.



    Es öffnet sich das Dialogfenster "Virtual Hosting Wizard", welches zeigt, wie das Netzwerk der virtuellen Servers funktioniert. Das Verfahren besteht aus drei Schritten, in denen es Ihnen erzählt wird, wie man sich auf die Migration vorbereitet. Anschließend wird Ihnen angeboten, den nächstgelegenen virtuellen Server mit der minimalen Ping-Zeit bis zum Handelsserver Ihres Brokers auszuwählen.


    Sie können virtuelles Hosting einen Tag lang kostenlos nutzen, das steht jedem registrierten Benutzer der MQL5.community zur Verfügung, oder einen der angebotenen Tarifpläne auswählen. Beim letzten Schritt muss man den Modus der Datenmigration auswählen, der vom Zweck der Migration abhängt:

    • komplette Migration wird benötigt, wenn Sie Expert Advisors/Indikatoren und das Kopieren von Trades im Terminal gleizeitig laufen lassen wollen;
    • nur Expert Advisors und Indikatoren, wenn man kein Signalabo braucht;
    • nur Kopieren von Trades - in diesem Fall werden nur die Einstellungen des Kopierens eines Signals migriert, Charts und Programme werden nicht migriert.

    Nach der Auswahl eines Migrationsmodus können Sie den virtuellen Server direkt starten, indem Sie auf den Button "Jetzt migrieren" klicken oder dies jederzeit später tun.

    Vorbereitung auf die Migration
    Bevor man ein virtuelles Terminal startet, muss man eine aktive Umgebung für ihn vorbereiten - Charts, gestartete Indikatoren und Expert Advisors, Parameter für das Kopieren von Trades und Einstellungen des Terminals.

    • Charts und Marktübersicht - blenden Sie alle unnötigen Symbole in der Marktübersicht aus, um Traffic zu reduzieren. Schließen Sie alle Charts, die Sie nicht brauchen. In den Einstellungen des Terminals geben Sie "Max. Anzahl von Balken im Chart", danach starten Sie das Terminal neu.
    • Indikatoren und Expert Advisors - ziehen Sie alle benötigten Expert Advisors und Indikatoren auf den Chart. Die im Market erworbenen Produkte, die im Chart laufen, werden bei der Migration auch verschoben. Sie sind voll funktionsfähig, dabei wird keine Aktivierung verbraucht. Alle externen Parameter der Expert Advisors und Indikatoren sind richtig anzugeben.
    • E-Mails, FTP und Signale - wenn der Expert Advisor E-Mails senden, Daten über FTP hochladen oder Signale kopieren muss, muss man alle notwendigen Einstellungen setzen. Geben Sie den richtigen Benutzernamen und Passwort von Ihrem Account in MQL5.community im Reiter Community an. Das ist für das Kopieren von Signalen nötig.
    • Erlaubnis, zu handeln und Signale zu kopieren - im virtuellen Terminal ist der automatisierte Handel immer erlaubt. Geben Sie Parameter für das Arbeiten mit Signalen im Reiter Signale an.
    • WebRequest - wenn ein Programm, das im virtuellen Terminal gestartet wird, die Funktion WebRequest für das Senden von HTTP-Anfragen verwendet, muss man die entsprechende Erlaubnis im Bereich Expert Advisors setzen und alle vertrauenswürdigen URLs auflisten.


    Migration
    Als Migration wird der Prozess der Übertragung der aktuellen Umgebung vom Handelsterminal auf ein virtuelles Terminal bezeichnet.

    Die Migration wird bei jeder Synchronisierung des Kundenterminals durchgeführt. Die Synchronisierung ist stets ein unidirektionaler Prozess: Die Umgebung des Client Terminals wird auf das virtuelle Terminal verschoben, jedoch niemals umgekehrt. Der Status des virtuellen Terminals kann über eine Abfrage der Logs des Terminals und der Expert Advisors sowie der Überwachungsdaten des virtuellen Servers überwacht werden.

    Für die Durchführung der Synchronisierung rufen Sie das Kontextmenü des Kontos auf und wählen Sie den Typ der Migration aus.



    Auf diese Weise können Sie jederzeit die Anzahl der Charts und Symbole, den Set der laufenden Programme und deren Eingabeparameter, Einstellungen des Terminals und Signalabos ändern.

    Bei der Durchführung der Migration werden die ganzen Informationen ins Journal des Handelsterminals geschrieben.

    Nach der Synchronisierung öffnen Sie das Journal des virtuellen Terminals, um die ausgeführten Aktionen zu prüfen.


    Arbeiten mit dem virtuellen Terminal
    Der Status des gemieteten virtuellen Servers lässt sich auch ganz einfach über das Client Terminal überwachen. Klicken Sie auf "Details" im Kontextmenü.

    Die Informationen sind in vier Reitern zu finden:

    • Details - Daten über den virtuellen Server und der aktiven Umgebung des Terminals auf diesem Server.
    • CPU Usage - Diagramm der CPU-Nutzung, %.
    • Memory Usage - Diagramm der Arbeitsspeichernutzung, MB.
    • Hard Disk Usage - Diagramm der Festplattennutzung, MB.
    Mehr Informationen über den Service finden Sie im Artikel "Wie man ein Handelskonto auf die Migration zu virtuellem Hosting vorbereitet" sowie in den "Regeln zur Nutzung des Virtual Hosting Services".

  2. Market: Nun kann man Produkte im MetaTrader Market für 1, 3, 6 oder 12 Monate mieten. Das ist vorteilhaft sowohl für Entwickler als auch für Käufer. Entwickler können das Vertrauen zu ihren Produkten erhöhen, indem Sie den Kunden die Möglichkeit zur Verfügung stellen, ihr Produkt für einen kleinen Preis zu mieten. So können Käufer sich über die Richtigkeit ihrer Entscheidung vergewissern. Im Unterschied zu Demoversionen, gibt es keine Beschränkungen bei der Nutzung gemieteter Produkte, außer Mietdauer.

    Jeder Entwickler im Market kann selbst die Mietoption und einen Mietpreis bestimmen.



    Der Entwickler kann seine Produkte auch nicht mieten lassen und nur volle Lizenzen verkaufen.

    Wenn ein Produkt gemietet werden kann, werden auf seiner Seite die Mietdauer und der Mietpreis angezeigt. Klicken Sie auf "Mieten" und wählen Sie eine Mietdauer aus.

    Nach dem Ablauf der Mietdauer kann die Miete verlängert werden, oder man kann eine Version des Produkts kaufen.

  3. Terminal: Beim Speichern des Screenshots eines Charts über Funktion des Terminals "Speichern als..." sowie über die MQL5-Funktion Screenshot() wird das Bild nicht mehr mit "MetaTrader 5, @ 2001-2015 MetaQuotes-Software Corp." urheberrechtlich geschützt. Dies erleichtert die Verbreitung von Screenshots.

  4. Terminal: Es wurden Fehler bei der Berechnung und Verwaltung der Einstellungen des integrierten technischen Indikators Gator Oscillator.
  5. Terminal: Das Scanning von Zugangspunkten zum Handelsserver wurde verbessert.
  6. Terminal: Es wurden Fehler bei der Arbeit von LiveUpdate behoben, die in einigen Fällen auftraten.
  7. Der Aufzählung ENUM_SIGNAL_BASE_STRING wurde die Eigenschaft SIGNAL_BASE_CURRENCY hinzugefügt - Kontowährung des Signalanbieters. Diese Eigenschaft kann mithilfe der Funktion SignalBaseGetString abgefragt werden.
  8. MQL5: Es wurden Kompilierungsfehler beim Festlegen von Zugriffsrechten auf die Members einer Basisklasse bei der Vererbung behoben.
  9. MQL5: Es wurde ein Kompilierungsfehler beim Überladen von Klassenmethoden nach der Konstanz der Parameter behoben.
  10. Tester: Die Arbeit der Agenten von MQL5 Cloud Network wurde optimiert. Nun verbrauchen die Agenten keine Zeit für das so genannte "Aufwärmen" - Verbindung zu den Servern des Cloud-Netzwerkes. Sie Agenten sind jetzt immer bereit, eine Aufgabe zu bekommen und auszuführen. Dies erlaubt es, die Optimierungszeit über MQL5 Cloud Network zu beschleunigen.
  11. Tester: Die Darstellung von lokalen, Remote- und Cloud-Agenten wurde im Strategietester verbessert.
  12. Verbesserungen anhand Crash-Logs.
  13. Die Dokumentation wurde aktualisiert.

16 Januar 2015
MetaTrader 5 Trading Terminal Build 1045: Neuer WebRequest

Handelsterminal

  1. Vorbereitende Aktionen für die Unterstützung des virtuellen Hostings im MetaTrader 5. Der Service Virtual Hosting bietet die Möglichkeit, ein Terminal zu mieten, das rund um die Uhr ununterbrochen läuft. Eine der wichtigsten Features ist die Auswahl eines Servers, der am nächsten zum Server des Brokers gelegen ist, was die Netzwerkverzögerungen reduziert.




  2. Testagenten arbeiten nun in nur 64-Bit-Systemen. Diese Entscheidung geht mit der Notwendigkeit einher, mit der Entwicklung der IT-Branche Schritt zu halten. Der Verzicht auf alte Technologien erlaubt es, die Performance der Berechnungen zu erhöhen und MQL5 Cloud Network weiterzuentwickeln.


    Änderungen in den Komponenten der Plattform:

    • In 32-Bit-Version der Terminals wird die Verwendung von Remote-Agenten des MQL5 Cloud Netzwerkes nicht mehr verfügbar sein. Statt der Liste dieser Agenten wird die Meldung "Nur in 64-Bit-Versionen verfügbar" angezeigt.
    • MetaTester 5 Agents Manager wird nur in 64-Bit-Versionen verfügbar sein. Dementsprechend können Agenten nur in 64-Bit-Systemen installiert werden.


  3. Die Sortierung von Nachrichten nach Sprache wurde korrigiert, wenn die Sprachenliste in den Einstellungen des Terminals manuell angegeben wurde.
  4. Das Arbeiten mit einer großen Anzahl offener Orders wurde optimiert.
  5. Das Senden von Handelsanfragen wurde beschleunigt.
  6. Die Benutzerschnittstelle wurde für Bildschirme mit hoher Auslösung zusätzlich angepasst - Full HD und höher.

MQL5-Sprache

  1. Es wurde eine neue Form der Funktion WebRequest hinzugefügt:
    int WebRequest (string method, string url,string headers,int timeout, const char &data[], int data_size,char &result[], string &result_headers)

    Diese Funktion erlaubt es, den Inhalt des Headers einer HTTP-Anfrage explizit zu bilden, indem sie einen flexiblen Mechanismus für die Interaktion mit verschiedenen Web-Services bietet. Beispiel - Automatische Veröffentlichung mit WebRequest()

  2. Es wurden neue Eigenschaften eines Handelskontos hinzugefügt. Auf diese Eigenschaften kann man mithilfe der Funktion AccountInfoDouble zugreifen.

    • ACCOUNT_MARGIN_INITIAL - aktuelle Anfangsmargin auf dem Konto.
    • ACCOUNT_MARGIN_MAINTENANCE - aktuelle Maintenance-Margin auf dem Konto.
    • ACCOUNT_ASSETS - aktuelle Assets auf dem Konto.
    • ACCOUNT_LIABILITIES - aktuelle Verbindlichkeiten.
    • ACCOUNT_COMMISSION_BLOCKED - aktuelle eingefrorene Kommission.

  3. Es wurden neue Eigenschaften eines Finanzinstruments hinzugefügt:

    • SYMBOL_OPTION_STRIKE - Ausübungspreis einer Option. Die Eigenschaft wird durch die Funktion SymbolInfoDouble abgefragt.
    • SYMBOL_BASIS - Name des Basissymbols eines Finanzinstruments. Die Eigenschaft wird durch die Funktion SymbolInfoString abgefragt.
    • SYMBOL_OPTION_MODE - Typ der Option, der Wert wird mithilfe der Aufzählung ENUM_SYMBOL_OPTION_MODE gesetzt. 
    • SYMBOL_OPTION_RIGHT - Recht der Option, der Wert wird mithilfe der Aufzählung ENUM_SYMBOL_OPTION_RIGHT gesetzt. Die Eigenschaft wird durch die Funktion SymbolInfoInteger abgefragt.

  4. Es wurde die Funktion SymbolInfoMarginRate hinzugefügt - Abfragen des Wertes des Koeffizienten der Anfangs- und der Maintenance-Margin je nach Typ und Richtung einer Order.
  5. Die Arbeit der Funktion ChartIndicatorName wurde im Strategietester korrigiert.
  6. Es wurde ein Fehler bei der Kompilierung von Makros behoben, die das Einsetzen von Namen mithilfe von ## beinhalten.
  7. Es wurde ein Fehler beim Zurücksetzen des End-of-File Indikators behoben, wenn eine neue Datei geöffnet wird.

Verbesserungen anhand Crash-Logs.

Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

12 Dezember 2014
MetaTrader 5 Trading Terminal Build 1035: Option Strategy Builder und Zugriff auf Ticks

Handelsterminal:

  1. Die Arbeit an der Einführung des Handels mit Optionen wird fortgesetzt. Es wurde der Option Strategy Builder hinzugefügt. Er erlaubt es, verschiedene Optionen in einem Investitionsportfolio zu kombinieren, das Potenzial und die Risiken einzuschätzen.



    Der Builder ist sehr benutzerfreundlich: der Trader wählt eine Option nach dem Ablaufdatum und Basisvermögenswert aus und danach eine der 30 verfügbarer Strategien. Der Builder zeigt die entsprechende Kombination der Optionen an und berechnet ihre Kennzahlen- die so genannten "Griechen". Im unteren Teil des Fensters kann man sich Gewinn/Verlust-Charts sowie Charts zu Griechen anschauen.

    In Ergänzung zu den integrierten Strategien kann der Trader eigene Strategien entwickeln und speichern.

  2. Nun wird die Anzahl an Nachrichten angezeigt, die innerhalb der letzten 24 Stunden erhalten wurden.




  3. Die Synchronisierung großer Volumina der Historie von Orders und Trades wurde optimiert und beschleunigt.
  4. Es wurde das Hinzufügen mehrerer benutzerdefinierter Indikatoren zu einem Unterfenster des Charts korrigiert.
  5. Die Berechnung des Indikators "Bill Williams Market Facilitation Index" wurde bei der Änderung der Chartperiode korrigiert.
  6. Die Minimierung des Werkzeuge-Fensters wurde korrigiert.
  7. Die Erzeugung eines Berichts über den Status des Handelskontos, der über FTP veröffentlicht wird, wurde korrigiert.
  8. Die Übersetzung der Benutzerschnittstelle ins Deutsche wurde aktualisiert.
  9. Die Benutzerschnittstelle wurde ins Griechische und Usbekische übersetzt.

MQL5-Sprache

  1. Es wurde die Funktion CopyTicks hinzugefügt. Die Funktion erlaubt es, ein Array von Ticks zu erhalten, die das Terminal während der aktuellen Sitzung gespeichert hat. Die Tiefe der erhaltenen Ticks beschränkt sich auf die letzten 2000.

    Die neue Funktion erweitert die Möglichkeiten beim Schreiben von Scalping-Robotern. Die Funktion OnTick verarbeitet nicht jeden Tick, sie benachrichtigt den Expert Advisor über Änderungen auf dem Markt. Es kann auch um eine Reihe von Änderungen gehen: es können gleichzeitig mehrere Ticks eingehen, aber die Funktion OnTick wird nur einmal aufgerufen, um den Expert Advisor über den letzten Status des Marktes zu informieren. Die Funktion CopyTicks erlaubt es, alle eingehenden Ticks zu erhalten und zu analysieren.
    int  CopyTicks(
       const string      symbol_name,           // Symbolname
       MqlTick           &ticks_array[],        // Array, in welchem die Ticks gespeichert werden
       uint              flags=COPY_TICKS_ALL,  // Flag, das den Typ der Ticks festlegt
       ulong             from=0,                // Datum, von welchem die Ticks erhalten werden; in Millisekunden vom 01.01.1970
       uint              count=0                // Anzahl der letzten Ticks, die erhalten werden müssen
       );
    Die Ticks können nach Datum abgefragt werden, indem man den Wert from angibt oder nach Anzahl, indem man count angibt. Wenn keiner der Parameter angegeben wurde, werden alle verfügbaren Ticks übergeben, aber höchstens 2000. Ticks können auch nach Typ über den Parameter flags abgefragt werden. Verfügbare Werte:

    • COPY_TICKS_ALL - alle Ticks.
    • COPY_TICKS_INFO - nur Info-Ticks (Bid und Ask).
    • COPY_TICKS_TRADE - nur Handelsticks (Last und Volume).

  2. Es wurde die Möglichkeit hinzugefügt, Template-Funktionen mit Arrays-Parameter zu überladen.
  3. Es wurde die Möglichkeit hinzugefügt, eine Methode nach ihrer Konstanz zu überladen.
  4. Es wurde die Erzeugung des Ereignisses CHARTEVENT_MOUSE_MOVE (in OnChartEvent) hinzugefügt. Das Event wird erzeugt, indem man mit der rechten Maustaste auf dem Chart klickt.
  5. Die Arbeit des Operators Switch wurde bei Vorhandensein eines negativen Wertes in der case-Bedingung korrigiert.
  6. Die Genauigkeit der Berechnungen wurde in den Funktionen ObjectGetValueByTime() und ObjectGetTimeByValue() erhöht, die es erlauben, einen Preis für die angegebene Zeit eines Objektes und umgekehrt - einen Zeitwert für den angegebenen Preis - zu erhalten.

Strategietester

  1. Es wurde die Möglichkeit hinzugefügt, die im MetaTrader Market erworbenen MQL5-Programme mithilfe von Agenten des MQL5 Cloud Netzwerkes und von Remote-Agenten zu testen und zu optimieren.
  2. Für Positionen mit einem Volumen kleiner als 1 Lot wurde die Berechnung von SWAPs in Punkten korrigiert.
  3. Das Überprüfen und Normalisieren von SL-TP Levels wurde beim Eröffnen einer Position für ein Symbol mit dem Ausführungstyp "Market Execution" korrigiert.
  4. Das Verhalten der Funktion ObjectGetValueByTime wurde korrigiert. In einigen Fällen unterschied sich das Verhalten der Funktion im Tester vom Verhalten im Terminal.

MetaEditor

  1. Das "Hängen" des MetaEditors wurde beim Debugging und Profiling von den in einer Schleife ausgeführten Programmen korrigiert.
  2. Die Benutzerschnittstelle wurde ins Griechische und Usbekische übersetzt.

Verbesserungen anhand Crash-Logs.

Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

31 Oktober 2014
MetaTrader 5 Trading Terminal Build 1010: Neue Signale, Market und Optionen

Handelssignale

  1. Das Schaufenster von Signalen wurde komplett umgestaltet. Es wurden neue Signale hinzugefügt, das Design wurde verbessert, die Arbeit mit Signalen ist nun einfacher geworden.


    Neue Funktionen der Signalliste:

    • In der Liste der Signale sind nun Wachstum-Charts verfügbar, die ähnlich den auf der MQL5.community Webseite angezeigten sind. Ein grünes Icon in der linken unteren Ecke des Charts bedeutet, dass das Signal auf einem Realkonto basiert.
    • Nun kann man ein Abonnement von der Liste aus abschließen. Um ein Signal zu abonnieren, klicken Sie auf den Button mit dem Preis (oder mit der Beschriftung "Free", wenn es um ein kostenloses Signal geht). Anschließend wird ein Dialog für die Bestätigung des Abonnements angezeigt.
    • Nun kann man Signale zu Favoriten hinzufügen. Klicken Sie auf den Stern am Ende der Zeile des Signals. Danach kann man dieses Signal ganz einfach im Reiter "Favoriten" finden.
    • Das Kontextmenü wurde entfernt. Um ein abonniertes Signal zu finden, gehen Sie zu einem Signal. Auf dem oberen Panel werden das von Ihnen abonnierte Signal und ein Link zu diesem Signal angezeigt.

    Die Seite von Signalen wurde aktualisiert. Es wurde die Möglichkeit hinzugefügt, Signale zu Favoriten hinzuzufügen. Der Status des Signalkontos wird angezeigt, wenn man die Maus über die Kennzahl "Wachstum" führt.

    Die Statistik über Signale wurde erweitert:

    • Gesamtkapital von Abonnenten.
    • Die Lebensdauer des Handelskontos seit dem ersten Trade.
    • Durchschnittliche Haltezeit der Position.



    Darüber hinaus wurden neue Reiter hinzugefügt:

    • Risiken - Informationen über die besten und die schlechtesten Handelsoperationen und Folgen von Handelsoperationen sowie über Rückgänge.
    • Bewertungen - Bewertungen von Signalabonnenten.
    • Nachrichten - über diesen Reiter kann der Signalanbieter seine Abonnenten über Änderungen in der Arbeit des Signals informieren und andere wichtige Details veröffentlichen.

Market

  1. Die Darstellung von Produkten im MetaTrader Market wurde umgestaltet. Neues Design für Programme, Magazine und Bücher. Es wurde die Möglichkeit hinzugefügt, Produkte zu Favoriten hinzuzufügen. Klicken Sie auf den Stern am Ende bei der Übersicht eines Produkts. Danach finden Sie es im Reiter "Favoriten".




Handelsterminal

  1. Es wurden Options Board und Volatilitätschart hinzugefügt. Die Arbeit an der Einführung von Tools für den Handel mit Optionen wird fortgesetzt. Es ist geplant, der nächsten Version Analysewerkzeuge für Optionsstrategien.




    Options Board
    Auf dem Options Board wird eine Serie von Optionen angezeigt, die auf dem Verfallsdatum per Basiswert (Optionsklasse) beruht, ausgewählt im Feld "Underlying". Für Optionen werden folgende Parameter angezeigt:

    • Bid CALL - Verkaufspreis einer Call-Option.
    • Ask CALL - Kaufpreis einer Call-Option.
    • Theo CALL - theoretischer (fairer) Preis einer Call-Option, der für den angegebenen Strike-Preis anhand historischer Daten berechnet wird.
    • Strike - Ausübungspreis einer Option (Strike-Preis).
    • Volatility -  implizite (implied) Volatilität. Sie wird in Prozent angezeigt und charakterisiert die Erwartungen von Marktteilnehmern hinsichtlich des Preises des Basiswertes einer Option.
    • Theo PUT - theoretischer (fairer) Preis einer Put-Option, der für den angegebenen Strike-Preis basierend auf historischen Daten berechnet wird.
    • Bid PUT - Verkaufspreis einer Put-Option.
    • Ask PUT - Kaufpreis einer Put-Option.

    Volatilitätschart
    Auf der horizontalen Achses dieses Charts werden Strike-Preise einer Option angezeigt, und auf der vertikalen Achse - die implizite Volatilität.




  2. In der Liste der Zugangspunkte wird nun der Ping-Wert angezeigt.




  3. Die Benutzerschnittstelle des Terminals wurde an Bildschirme mit hoher Auflösung, Full HD und höher, angepasst. Menü, Werkzeugleisten, Header von Fenstern und die Statuszeile haben nur eine bequeme Größe für die Arbeit auf Sensorbildschirmen von Windows-Tablets.

  4. Dem Menü "Ansicht" und der Werkzeugleiste wurde die Verwaltung von Symbolen hinzugefügt. Nun sind die Einstellungen von Symbolen immer in Griffweite:




MQL5 Language

  1. Es wurde die Umwandlung eines Makroparameters in eine Zeile und die Konkatenation eines Makroparameters hinzugefügt. Unten ist ein Beispiel angeführt, in welchem die Konkatenation von Makroparamtern das automatische Löschen von Klasseninstanzen erlaubt.
    //+------------------------------------------------------------------+
    //|                                                     MacroExample |
    //|                        Copyright 2014, MetaQuotes Software Corp. |
    //|                                       https://www.metaquotes.net  |
    //+------------------------------------------------------------------+
    #property script_show_inputs
    input bool InpSecond=true;
    
    #define DEFCLASS(class_name) class class_name:public CBase{public:class_name(string name):CBase(name){}};
    #define TOSTR(x) #x
    #define AUTODEL(obj) CAutoDelete auto_##obj(obj)
    #define NEWOBJ(type,ptr) do { ptr=new type(TOSTR(ptr)); \
                             Print("Create object '",TOSTR(type)," ",TOSTR(ptr),"' by macro NEWOBJ"); } \
                             while(0)
    //+------------------------------------------------------------------+
    //| Basisklasse, die für das automatische Löschen von Objekten benötigt wird               |
    //+------------------------------------------------------------------+
    class CBase
      {
    protected:
       string            m_name;
    
    public:
                         CBase(string name):m_name(name) { }
       string            Name(void) const{ return(m_name); }
    
      };
    //+------------------------------------------------------------------+
    //| Die Klasse für das automatische Löschen von Objekten erlaubt es, die erstellten Objekte nicht zu   |
    //| überwachen. Sie löscht diese in ihrem Destruktor                     |
    //+------------------------------------------------------------------+
    class CAutoDelete
      {
       CBase            *m_obj;
    
    public:
                         CAutoDelete(CBase *obj):m_obj(obj) { }
                        ~CAutoDelete()
         {
          if(CheckPointer(m_obj)==POINTER_DYNAMIC)
            {
             Print("Delete object '",m_obj.Name(),"' by CAutoDelete class");
             delete m_obj;
            }
         }
      };
    //+------------------------------------------------------------------+
    //| Deklariere zwei neue Klassen - CFoo und CBar                             |
    //+------------------------------------------------------------------+
    DEFCLASS(CFoo);
    DEFCLASS(CBar);
    //+------------------------------------------------------------------+
    //| Hauptfunktion des Skriptes                                          |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       CFoo *foo;
    //--- erstelle ein Objekt der Klasse CFoo
       NEWOBJ(CFoo,foo);
    //--- erstelle eine Instanz der Klasse für das automatische Löschen des Objektes CFoo foo
       AUTODEL(foo);
    //---
       if(InpSecond)
         {
          CBar *bar;
          //---
          NEWOBJ(CBar,bar);
          AUTODEL(bar);
         }
    //--- foo muss man nicht löschen, es wird automatisch gelöscht
      }
    //+------------------------------------------------------------------+
    
  2. Es wurde die Eigenschaft OBJPROP_ANCHOR für die grafischen Objekte "Bitmap" und "Bitmap Label" hinzugefügt. Die Eigenschaft bestimmt den Bindepunkt des grafischen Objektes auf dem Chart: die linke obere Ecke, im Zentrum links, die linke untere Ecke, im Zentrum unten usw.
  3. Der Funktion ChartGetInteger wurde das Lesen der Eigenschaft CHART_BRING_TO_TOP (der Chart wird im Vordergrund angezeigt) hinzugefügt.
  4. Es wurden Fehler der Kompilierung und Generierung des ternären Operators "?" behoben.
  5. Es wurde der Fehler der Übergabe eines statischen Arrays - eines Klassenmembers behoben
  6. Die Anwendung eines Templates auf die Liste der Initialisierung von Klassenmembers eines Template-Konstruktors wurde korrigiert.

Handelssignale

  1. Die Einschränkungen beim Abonnieren eines Symbols sind gelockert:

    Wenn es Symbole in der Handelshistorie gibt, die der Abonnent nicht hat, wird das Abonnieren erlaubt (früher wurde es verboten). Die Aktionen mit Positionen, für welche der Abonnent keine Symbole hat, werden ignoriert. Dabei wird die folgende Meldung ins Journal ausgegeben:
    2014.08.26 16:44:29.036    '2620818': Signal - symbol GBPNZD not found
    Wenn der Abonnent Positionen und/oder Pending Orders hat, dann wird ein Warnungsdialog angezeigt, diese zu schließen/löschen (wie früher). Aber nun ist es keine obligatorische Voraussetzung für die Fortsetzung der Arbeit mit Signalen.



    Es wird die Synchronisierung mit dem Signalanbieter durchgeführt. Positionen und Orders, die nicht nach dem abonnierten Signal eröffnet wurden, bleiben ohne Veränderungen. Der Benutzer kann beliebige Operationen mit ihnen durchführen.

    Nun können Benutzer alle Handelsoperationen manuell (oder durch den Expert Advisor) ausführen, wenn Sie ein Signal abonnieren. Der Signal-Service wird Positionen und Orders ignorieren, die vom Trader eröffnet wurden.
    Man sollte beachten, dass das manuelle Platzieren von Orders das Volumen der verfügbaren Margin auf dem Handelskonto beeinflusst. Bei manuellen Eröffnen einer Position wird die Gesamtbelastung des Kontos im Vergleich zum Konto des Signalanbieters erhöht.
  2. Nun wird ein Prozentwert für das Kopieren von Volumen mit Gleitkomma unterstützt. Das minimale Prozent des kopierten Volumens wurde bei Signalen von 1% auf 0.001% reduziert.

Strategietester

  1. Das "Hängenbleiben" eines Testagenten wurde beim Arbeiten mit MQL5 Cloud Network korrigiert.
  2. Die Berechnung von SWAPs in Punkten wurde bei minimalen Positionsgrößen korrigiert.

MetaEditor

  1. Es wurde die Arbeit von Hotkeys für die Anweisungen "Navigate Forward" und "Navigate Backward" korrigiert.

MetaViewer

  1. Die Navigation auf der Werkzeugleiste wurde korrigiert.
  2. Die Textsuche unter Berücksichtigung der aktuellen Sprache der Benutzerschnittstelle wurde korrigiert.

Verbesserungen anhand Crash-Logs.

Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.


1 August 2014
MetaTrader 5 Trading Terminal build 975: Anzeige der Expert-ID

Handelsterminal

  1. Nun wird die Transaktions-ID (Magic Number), die vom Expert Advisor gesetzt wird, angezeigt. Die Magic Number wird als Tooltip in der Liste offener Positionen und Orders sowie in der Handelshistorie angezeigt.


    Anzeige der Expert-ID


  2. Die Arbeit des Terminals mit einer großen Anzahl von Finanzinstrumenten (Tausende und Zehntausende) wurde optimiert.
  3. Die Anzeige von Alerts wurde im Preischart korrigiert. In einigen Fällen wurde der Preislevel des Alert im Unterfenster des Indikators angezeigt.
  4. Die Übersetzungen der Benutzerschnittstelle ins Chinesische, Türkische und Japanische wurden aktualisiert.
  5. Die Anzeige der Liste von Chart-Vorlagen im Hauptmenü der Anwendung wurde korrigiert.
  6. Die Anzeige der Liste von Sets von Symbolen wurde im Kontextmenü des Marktübersicht-Fensters korrigiert.

MQL5-Sprache

  1. Es wurden Fehler bei der Arbeit mit integrierten Strukturen behoben, die die Arbeit der Methoden IndicatorParameters und MarketBookGet störten.
  2. Es wurde ein Fehler beim Typumwandlung von bool in string behoben.
  3. Es wurde Fehler bei der Arbeit mit virtuellen Funktionen behoben.
  4. Es wurde ein Fehler bei der Arbeit der Funktionen FileReadStruct und FileWriteStruct innerhalb der EX5 Bibliotheken behoben.
  5. Es wurde ein Fehler des Compilers behoben, der beim Vorhandensein eines Key-Wortes im Kommentar auftrat.

Strategietester

  1. Die Berechnung von SWAPs in Punkten wurde beim Testen korrigiert.
  2. Es wurde die Übergabe der Datei korrigiert, die in #property tester_file definiert wurde. Der Fehler trat auf, wenn die beschriebene Datei im gemeinsamen Ordner für alle Terminal gespeichert wurde.
  3. Es wurde die Auswahl des nächsten Cloud-Servers bei Test-Agenten verbessert, die im MQL5 Cloud Network arbeiten, was ihre Arbeit um Vieles beschleunigt.

MetaEditor

  1. Das Ersetzen des Textes beim Minimieren der Liste MetaAssist wurde korrigiert.

Verbesserungen anhand Crash-Logs.

Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

12345Weiter