Liste der Änderungen in den Builds der MetaTrader 5 Plattform

 

Die neue Version der Handelsplattform MetaTrader 5 build 1240: Beschleunigung der Arbeit und integrierte Videos

Am Donnerstag, 17. Dezember 2015 wird eine Aktualisierung für die MetaTrader 5 Handelsplattform veröffentlicht. Die Aktualisierung enthält folgende Verbesserungen:

  1. Hosting: Dem Dialog bei der Miete eines virtuellen Servers wurde ein Link auf das Lehrvideo "Wie mietet man eine virtuelle Plattform" 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. Terminal: Die Liste offener Orders und Positionen wird bei der Ausführung von Trades mit Hochfrequenz (50 und mehr Trades pro Sekunde) nun schneller aktualisiert.
  3. Terminal: Die anfängliche Synchronisierung des Terminals mit einem Handelsserver bei einer Vielzahl von Symbolen (tausende) wurde optimiert und erfolgt nun viel schneller. Nach der Herstellung der Verbindung können Sie jetzt viel schneller anfangen zu arbeiten.
  4. Terminal: Speicherverbrauch optimiert und erheblich verringert.
  5. Terminal: Einstellungen für das Orderbuch können jetzt bei der Schließung/Öffnung des Terminals gespeichert/wiederhergestellt werden.
  6. Terminal: Artefakte, die im Windows 10 beim Verschieben von Fenstern entstanden, wurden korrigiert.
  7. 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
  8. Terminal: Die Arbeit an der Anpassung der Benutzeroberfläche an Bildschirme mit hoher Auflösung (4K) wurde fortgesetzt.
  9. MQL5: Den Funktionen OrderGetString, HistoryOrderGetString und HistoryDealGetString, die für das Erhalten von Informationen über Orders und Trades zuständig sind, wurden neue Eigenschaften hinzugefügt:

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

  10. MQL5: die Funktion ZeroMemory bei der Arbeit mit Strukturen und Klassen korrigiert. In einigen Fällen wurde der Speicher nicht entleert.
  11. MQL5: Codes von Fehlern 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

  12. MQL5: Die Verfügbarkeitsprüfung der Typumwandlung von Objekten nach Vererbung vom Vorgänger zu Vorläufern korrigiert.
  13. MQL5: Fehler in Vorlagen von Klassen korrigiert.
  14. MQL5: Fehler bei der Anforderung von Ticks durch die CopyTicks Funktion korrigiert. 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.
  15. MQL5: Fehler bei der Definition der benutzerdefinierten Variablengröße wurde korrigiert.
  16. MQL5: Fehler der Anwendung von ZLib in CryptDecode, der früher zur Endlosschleife des Entpackens führte, wurde korrigiert.
  17. Tester: die Synchronisierung der Preishistorie nach einem Symbol, der sich vom Symbol des Testens unterscheidet, wurde korrigiert.
  18. Tester: Verdoppelung der Transaktion TRADE_TRANSACTION_DEAL_ADD (Hinzufügen eines Trades der Historie) im OnTradeTransaction Event-Handler korrigiert.
  19. MetaEditor: neuer Link auf das Lehrvideo "Wie stellt man einen Handelsroboter im MQL5 Wizard zusammen" im MQL5 Wizard. Schauen Sie sich das dreiminütiges 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.
  20. Tester: Das Forward-Testen bei der 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.
  21. MetaEditor: Anordnen geöffneter 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.
  22. MetaEditor: Die Arbeit an der Anpassung des Interface an Bildschirme mit hoher Auflösung (4K) wurde fortgesetzt.
  23. Hosting: Der Fehler der Migration auf Hosting beim Aufruf eines Kundenindikators oder einer EX5-Bibliothek im Kundenindikator (der aus dem Experten aufgerufen wird) wurde korrigiert.
  24. Die Dokumentation wurde aktualisiert.


Die Aktualisierung wird über das System LiveUpdate verfügbar sein.

 

Neue Version der Plattform MetaTrader 5 build 1325: Handel mit Hedging und Testen anhand realer Ticks

Am Freitag, 22. April 2016, wird eine Aktualisierung der MetaTrader 5 Plattform veröffentlicht. Die Aktualisierung enthält folgende Verbesserungen:

  1. Terminal: Für die Erweiterung der Möglichkeiten von Retail-Devisenhändlern, wurde der Plattform das zweite System der Verrechnung von Position — 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 Typ der Verrechnung von Positionen prüfen kann
    Der Verrechnungstyp 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 Gegentrade 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 dem Volumen in Höhe von einem Lot.

    Hedging
    Beim Hedging kann man eine Vielzahl von Positionen auf einem und demselben Symbol haben, darunter auch von gegensätzlichen 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. Tester: Testen von Handelsrobotern und technischer Indikatoren anhand realer Tick-Historie hinzugefügt.

    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. Dies 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 verfügbar, sondern auch über MQL5 Cloud Network. 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.


  3. Terminal: 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 vom MetaTrader 4 ein 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 Einträge 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.


  4. Terminal: 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 vom MQL5-Benutzerkonto 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.




  5. Terminal: Dialog der Eröffnung eines Demokontos wesentlich vereinfacht; 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.



  6. Terminal: Für einen schnellen Start wurde eine automatische Erstellung des 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.

  7. Terminal: Jede Position hat jetzt ein Ticket - eine einmalige 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.




  8. Terminal: Fehler bei der Setzung von Stop Loss und Take Profit Grenzen bei der Platzierung einer Marktorder, die zum Richtungswechsel der Position führt, behoben. Früher konnten solche Grenzen für eine neue Position nicht gesetzt werden.
  9. Terminal: Die Darstellung von Preisen mit vier und mehr Zeichen nach dem Komma auf den Steuerelementen des Ein-Klick-Handel-Panels verbessert.
  10. Terminal: Die Anzeige des Vorschaufensters vor dem Ausdrucken von Nachrichten wurde korrigiert.
  11. Terminal: Fehler der Anzeige von Tickcharts behoben.
  12. Terminal: Fehler beim Öffnen der Markttiefe nach dem Absturz des Terminals behoben.
  13. Terminal: Prüfungen hinzugefügt, ob Marktorders bei Anzeige von Steuerelementen des-Ein-Klick-Handel-Panels erlaubt sind.
  14. Terminal: Die Berechnung des Profits und der Marge bei einer großen Zahl offener Orders und Positionen wurde optimiert.
  15. Terminal: Die Benutzerschnittstelle ist nun auch auf Malaiisch verfügbar.
  16. Terminal: Benutzeranweisung (Hilfe) komplett aktualisiert. Neues Design, interaktive Screenshots und integrierte Videos — alles, damit man den Handel mithilfe vom MetaTrader 5 möglichst einfach erlernen könnte:




  17. Terminal: Anzeige grafischer Objekte im Modus "Chart im Vordergrund" verbessert.

  18. MQL5: 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.
  19. MQL5: Abstrakte Klassen und rein virtuelle Funktionen hinzugefügt.

    Die abstrakten Klassen sind für die Erstellung generalisierter Entitäten bestimmt, aufgrund deren später konkretere abgeleitete Klassen erstellt werden. Als eine abstrakte Klasse 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. So 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 virtuelle werden nur die virtuellen Funktionen bezeichnet, für welche der PURE-Spezifikator angegeben wurde, und zwar: (=NULL) oder (=0). Beispiel der Deklaration und Anwendung 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 neu definiert, die CCat Klasse ist nicht abstrakt und kann erstellt werden
     };
    
    //--- Beispiele für 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 richtige Anwendung
    new CCat;  // kein Fehler - die CCat Klasse ist nicht abstrakt
    CCat cat;  // kein Fehler - die CCat Klasse ist nicht abstrakt
    
    Begrenzungen für Anwendung abstrakter Klasse
    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()
        {
         //--- impliziter Aufruf einer virtuellen Methode
         Sound();
         //--- expliziter 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.

  20. MQL5: Für Vereinfachung von Ereignis-Modellen 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;
    Die Adresse der Funktion kann man in die func_ptr Variable 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 kann man speichern und als Parameter übergeben. Man kann keinen Pointer auf eine nicht statische Methode der Klasse erhalten.

  21. MQL5: 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 — Ticket der Gegenposition, wird bei der Schließung einer Position zur Gegenposition verwendet, die auf demselben Symbol, aber in einer entgegengesetzten Richtung eröffnet wurde. Das Ticket wird nur beim Hedging verwendet.

  22. MQL5: Der Typenaufzählung von Handelsoperationen ENUM_TRADE_REQUEST_ACTIONS wurde TRADE_ACTION_CLOSE_BY — Schließung zur Gegenposition hinzugefügt. Das Ticket wird nur beim Hedging verwendet.

  23. MQL5: Den Aufzählungen der Eigenschaften von Orders, Trades und Positionen wurden Tickets entsprechender 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.

  24. MQL5: Der Typenaufzählung von Orders ENUM_ORDER_TYPE wurde ORDER_TYPE_CLOSE_BY hinzugefügt — Order zur Schließung der Position zur Gegenposition.
  25. MQL5: Der Aufzählung ENUM_ORDER_PROPERTY_INTEGER wurde ORDER_POSITION_BY_ID hinzugefügt — Bezeichner der Gegenposition für die Orders vom Typ ORDER_TYPE_CLOSE_BY.
  26. MQL5: Der Aufzählung der Richtungen des Trades ENUM_DEAL_ENTRY wurde DEAL_ENTRY_OUT_BY hinzugefügt — der Trade ist infolge der Schließung der Position zur Gegenposition ausgeführt.
  27. MQL5: Der Struktur der MqlTradeTransaction Transaktion 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 — Ticket der Gegenposition, wird bei der Schließung 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.

  28. MQL5: Funktion PositionGetTicket hinzugefügt, die das Ticket der Position nach dem Index in der Liste offener 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
       );
    

  29. MQL5: 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
       );
    

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

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

    Die Besonderheiten der Berechnung der Marge für gehedgte Positionen sind in der Benutzeranweisung für die MetaTrader 5 Handelsplattform beschrieben.

  31. MQL5: Der Aufzählung von Kontoeigenschaften ENUM_ACCOUNT_INFO_INTEGER wurde ACCOUNT_MARGIN_MODE hinzugefügt — Berechnungsmodus der Marge für das laufende Handelskonto:

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING wird für den außerbörslichen Handel mit Netting-System der Verrechnung von Positionen verwendet (eine Position pro Symbol). Die Marge wird anhand des Symboltyps (SYMBOL_TRADE_CALC_MODE) berechnet.
    • ACCOUNT_MARGIN_MODE_EXCHANGE wird für den Börsenmarkt verwendet. Die Marge 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 Handel bei einer unabhängigen Verrechnung von Positionen ("Hedging", mehrere Positionen können pro Symbol vorhanden sein) verwendet. Die Berechnung der Marge wird anhand des Symboltyps (SYMBOL_TRADE_CALC_MODE) und unter Berücksichtigung des Wertes der abgesicherten Marge (SYMBOL_MARGIN_HEDGED) durchgeführt.

  32. MQL5: Der Aufzählung der Eigenschaften des Kundenterminals ENUM_TERMINAL_INFO_INTEGER wurde 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.

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

  34. MQL5: das Ergebnis des Ausrufs der SendFTP Funktion wird nun richtig angezeigt. Früher wurde statt TRUE FALSE ausgegeben.
  35. MQL5: Fehler in der StringConcatenate Funktion behoben, der in einigen Fällen zum Ausführungsfehler "Access violation" führte.
  36. MQL5: Eine Reihe von Fehlern bei der Verwendung von Vorlagen wurde behoben.
  37. MQL5: Jetzt können die Funktionen Print, Alert und Comment Zeilen ausgeben, die länger als 4000 Zeichen sind.
  38. MQL5: Fehler in der ArrayCompare Funktion behoben, der beim Vergleich eines Arrays mit dem Array selbst, aber bei verschiedener Verschiebung der Ausgangsposition vom Beginn entstand.
  39. MQL5: Handel mit Hedging der Standardbibliothek hinzugefügt:

    CPosition
    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
    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 Marge in Übereinstimmung mit den Einstellungen des laufenden Kontos.

    Überladen von Methoden hinzugefügt:

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

    CAccountInfo
    Methoden geändert:

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

    Methoden hinzugefügt:

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

    CExpert
    Methoden hinzugefügt:

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

  40. MQL5: Fehlerbehebungen in der Standardbibliothek.
  41. MQL5: Unload von DLL-Bibliotheken verbessert.
  42. MQL5: Vorlagen für Konstruktoren von Klassen hinzugefügt.
  43. Signale: Eine Reihe von Anzeigefehlern des Schaufensters von Handelssignalen behoben.
  44. Tester: Fehler behoben, bei dem für einige Symboltypen Komission nicht berechnet wurde.
  45. Tester: Die Ausfüllung des Expert-Feldes bei den Orders, die bei der Auslösung von SL/TP entstanden sind, entsprechend dem Wert des Expert-Feldes bei der entsprechenden Position korrigiert. Früher wurde das Feld nicht ausgefüllt.
  46. Tester: Umschalten auf die Tabs von Ergebnissen der normalen und Forward-Optimierung korrigiert.
  47. Tester: Die Berechnung und Anzeige des Envelopes-Indikators wurden korrigiert.
  48. Tester: Die Ausführung des visuellen Testens wurde optimiert.
  49. Tester: Die Berechnung des Profits und der Marge bei einer große Zahl eröffneter Orders und Positionen wurde optimiert.
  50. Tester: Die Ausführung von Handelsoperationen im Hochfrequenzhandel wurde optimiert.
  51. Tester: Ab jetzt wird die Historie nicht beim Abruf der Eigenschaften eines Nebensymbols (der die laufenden Notierungen 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.
  52. Tester: Berechnung von SWAPs in Prozent pro Jahr korrigiert.
  53. MetaEditor: Die Wortsuche in den Dateien im Modus "Nur das ganze Wort" korrigiert.
  54. MetaEditor: Öffnen einer Datei mit einem Doppelklick auf die Zeile, die das Ergebnis der Kompilation für die entsprechende Datei enthält.
  55. MetaEditor: Anzeige einiger Steuerelemente in Windows XP verbessert.
  56. Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

 

Die neue Version der Plattform MetaTrader 5 build 1340: Verschieben von Zertifikaten und Verbesserungen im Tester

Am Freitag, 13. Mai 2016 wird eine Aktualisierung der MetaTrader 5 Plattform veröffentlicht. Die Aktualisierung enthält folgende Verbesserungen:

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

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

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

    Der Prozess der Übertragung
    Ein Zertifikat wird über einen Handelsserver verschoben:

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

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

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



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

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



    Sie können sich das importierte Zertifikat im Bereich "Über — Zertifikate" anschauen.
    Die aktualisierten mobilen Terminals MetaTrader 5 für iPhone/iPad und Android mit der Verschiebung von Zertifikaten werden in Kürze veröffentlicht.
  2. Tester: der Algorithmus der Ausführung von Pending Orders und SL/TP Orders wurde für ein präzises Testen geändert. Die Möglichkeiten des visuellen Testens wurden erweitert.

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

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

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


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


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

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

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



    Auf dem Chart des visuellen Testens kann man nun zu einem angegebenen Datum navigieren. Klicken Sie zweimal auf dem Chart und geben Sie das gewünschte Datum und Zeit an. Darüber hinaus kann der Chart jeder Order oder jedem Trade hinzugefügt werden: klicken Sie zweimal auf der gewünschten Transaktion auf dem Tab "Handel", "Historie" oder "Transaktionen".

  3. MQL5: Fehler behoben, bei dem die CopyTicks Funktion in einigen Fällen weniger Ticks als angefordert lieferte.
  4. MQL5: Fehler der Generierung von Vorlagefunktionen behoben.
  5. Tester: erweitertes Logging der vor dem Teststart geladener Preis- und Tickhistorie. Jetzt werden im Journal die folgenden Daten angezeigt: -Beendigung der Ladung der Historie, das Volumen heruntergeladener Daten und die Downloaddauer:
    2016.05.10 12:47:53    Core 1    5.10 Mb of history processed in 0:00.842
    2016.05.10 12:47:53    Core 1    GBPUSD: history synchronization completed [5225 Kb]
  6. Die Dokumentation wurde aktualisiert.
  7. Verbesserungen von Crash-Logs.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

 

Die neue Version der Plattform MetaTrader 5 build 1375: Time & Sales und Zugang zu Ticks beim Testen

Am Freitag, 15. Juli 2016, wird eine Aktualisierung der MetaTrader 5 Plattform veröffentlicht. Die Aktualisierung enthält folgende Verbesserungen:

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




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

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

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



    Um die Richtung von Trades genau feststellen zu können, muss die Plattform des Brokers auf die Version 1375 aktualisiert werden.

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

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

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

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

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

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

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




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

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




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

    Unten ist das Verhalten der Funktion früher (roter Pfeil) und jetzt dargestellt:




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

  9. MQL5: Der Aufzählung ENUM_CHART_PROPERTY_STRING wurden die Eigenschaften CHART_EXPERT_NAME und CHART_SCRIPT_NAME hinzugefügt. Nun kann man mithilfe der Funktion ChartGetString den Namen eines Expert Advisors bzw. eines Skripts feststellen, der einem durch den chart_id Parameter definierten Chart angefügt wurde.
  10. Terminal: Die Zeit zwischen dem Eingehen eines Ticks/Änderung der Markttiefe und dem Aufruf von OnTick und OnCalculate erheblich verringert. Das Gleiche gilt für die Zeit zwischen dem eingehenden Ereignis über die Änderung des Handelsstatus und dem Aufruf von OnTrade und OnTradeTransaction. Auf diese Weise werden nun MQL5-Programme schneller auf Marktereignisse reagieren.
  11. Terminal: Handelsanfragen werden nun unter Verwendung von einer erweiterten Authentifizierung mithilfe von SSL-Zertifikaten schneller gesendet.
  12. Terminal: Die Übersetzung der Benutzeroberfläche in Persisch aktualisiert.
  13. Terminal: Die Anzeige von Befehlen für das Setzen von SL/TP im Kontextmenü des Charts im Hedge-Modus korrigiert.
  14. Signals: Fehler behoben, wegen dessen die Close By Transaktionen in einigen Fällen nicht kopiert wurden.
  15. Signals: Automatische Anpassung der Währungspaare, die RUB und RUR enthalten, verbessert.
  16. Market: Sortierung nach der Produktkategorie korrigiert.
  17. Tester: Berechnung der Kommission als Zinssatz per annum beim Testen korrigiert.
  18. Tester: Neuberechnung und Anzeige des Kontostandes auf dem Chart korrigiert, der im Laufe des Testens erstellt wird.
  19. MetaEditor: Focussetzen auf Textfeld beim Öffnen des Dialogs der Ersetzung korrigiert.
  20. MetaEditor: Massenweise Textersetzung bei der Suche nach oben von der aktuellen Position korrigiert.
  21. Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.
 

Neues MetaTrader 5 Build 1395: Schnellere Handeslausführungen und Verbesserungen bei der visuellen Ausführung des Strategietesters

Dieses Update der MetaTrader 5 Plattform wird am Freitag, den 19. August 2016 veröffentlicht. Diese neue Version beinhaltet die folgenden Änderungen:


MetaTrader 5 Client Terminal Build 1395

  1. Terminal: Das Client-Terminal bietet nun eine schnellere Orderausführung.
  2. Terminal: Es wurde ein Fehler behoben, der dazu geführt hatte, dass das Ausführen von MQL5-Anwendungen in Terminals, die in 32 Bit Umgebungen von Windows 10 mit der Buildnummer 1607 liefen, nicht möglich war.
  3. Terminal: Der Navigator zeigt jetzt an, ob ein Konto im Hedging- oder im Netting-Modus handelt.
  4. Terminal: Es wurde in dem Navigator ein neuer Befehl innerhalb des Kontextmenüs hinzugefügt. Dieser erlaubt es dem Anwender, sich über den ausgewählten Account direkt mit dem Web-Terminal zu verbinden.
  5. Terminal: Die Hilfe-Sektion des Menüs wurde aktualisiert. Sie beinhaltet jetzt auch Links zu den Video-Anleitungen.
  6. Terminal: Es wurde ein Fehler behoben, der in Zusammenhang mit hochauflösenden Bildschirmen aufgetreten ist (4k).
  7. Terminal: Es wurden Fehler in der persischen Übersetzung der Anwenderschnittstelle behoben.
  8. MQL5: Es wurden neue 'void *' Pointers hinzugefügt, um es den Anwendern zu ermöglichen, abstrakte Sammlungen von Objekten zu erzeugen. Ein Pointer zu einem Objekt von einer beliebigen Klasse kann in diesem Typ der Variable gespeichert werden.
    Es wird empfohlen, den dynamic_cast<class name *>(void * pointer) Operator zu verwenden um eine Rückumwandlung durchzuführen. Falls eine Konvertierung nicht möglich ist, dann ist das Ergebnis NULL.
    class CFoo { };
    class CBar { };
    //+------------------------------------------------------------------+
    //| Skript Program Start Funktion                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       void *vptr[2];
       vptr[0]=new CFoo();
       vptr[1]=new CBar();
    //---
       for(int i=0;i<ArraySize(vptr);i++)
         {
          if(dynamic_cast<CFoo *>(vptr[i])!=NULL)
             Print("CFoo * object at index ",i);
          if(dynamic_cast<CBar *>(vptr[i])!=NULL)
             Print("CBar * object at index ",i);
         }
       CFoo *fptr=vptr[1];  // Führt zu einem Fehler bei der Umwandlung der Pointer, vptr[1] ist kein Objekt von CFoo
      }
    //+------------------------------------------------------------------+
  9. MQL5: Für Strings wurde die Unterstützung des Operators [ ] hinzugefügt. Dieser Operator ermöglicht es dem Anwender, ein Symbol aus einem String über den Index zu bekommen. Falls sich der angegebene Index außerhalb des Strings befindet, dann ist das Ergebnis 0.
    string text="Hello";
    ushort symb=text[0];  // Gibt den Code des Symbols 'H' zurück
    
  10. MQL5: Es wurde eine zweite Version des TesterInit Eventhandlers mit der int OnTesterInit(void) Signatur hinzugefügt. Dieser kann INIT_SUCCEEDED (0) oder INIT_FAILED (oder jeden anderen Wert ungleich Null) zurückgeben. Falls OnTesterInit einen Wert ungleich Null zurückgibt, dann wird die Optimierung nicht gestartet.
  11. MQL5: Es wurde ein Fehler behoben, der dazu geführt hat, dass bei den verschiedenen überladenen Methoden von ChartGetString unterschiedliche Ergebnisse zurückgegeben worden sind.
  12. Tester: Es wurden weitere Kommandos und Hotkeys für das visuelle testen hinzugefügt. Es ist jetzt möglich, in dem visuellen Tester die Charts genauso zu konfigurieren, wie es auch im Terminal möglich ist: Änderungen von Farben, die Sichtbarkeit von verschiedenen Control-Elementen, das Anwenden von Vorlagen, etc.




  13. Tester: Es wurde ein Fehler im Zusammenhang mit der sleep-Funktion bei dem Test mit "Open preisen" behoben.
  14. Tester: Es wurde ein Fehler behoben, der dazu gefügt hat, dass bei den Timeframes W1 und MN1, die Bars entsprechend ihrem Status falsch gebildet worden sind.
  15. MetaEditor: Es wurde eine Übersetzung in die traditionelle chinesische Sprache hinzugefügt.
  16. Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

 

Neues MetaTrader 5 Build 1430: Aktualisierter Reiter "Exposure"

Am Freitag, den 16. September 2016 wird das Update der MetaTrader 5 Plattform veröffentlicht. Die neue Version beinhaltet die folgenden Änderungen:


  1. Terminal: Es wurde ein neuer Algorithmus zur Bildung des "Belastung"-Reiters für den Wertpapiermarkt implementiert. Das Terminal passt jetzt die Anzeige der Aktiva an, je nach dem welches Risikomanagementsystem genutzt wird: Retail Forex, CFD, Futures oder Börsenmodell.

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

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

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




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

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





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

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

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

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

    Modifier final für Funktionen

    Der Modifier final funktioniert umgekehrt: er verbietet, Methoden in abgeleiteten Klassen zu überschreiben. Wenn die Implementierung der Methode abgeschlossen ist, deklarieren Sie diese mit dem final Modifier, damit sie später garantiert nicht verändert wird.
    class CFoo
      {
       void virtual func(int x) final { }
      };
     
    class CBar : public CFoo
      {
       void func(int) { }
      };
     
    Beim Versuch, die Methode mit dem final Modifier zu überschreiben, gibt der Compiler eine Fehlermeldung aus:
    'CFoo::func' method declared as 'final' cannot be overridden by 'CBar::func'
    see declaration of 'CFoo::func'
  9. MQL5: Es wurde der Kompilierungsfehler von Vorlagefunktionen mit Standardparametern behoben.
  10. Market: Es wurden Fehler in der Sortierung von Produkten im Market behoben.
  11. Tester: Es wurde die Aktualisierung aktueller Marktpreise von offenen Orders und Positionen im visuellen Modus des Strategietesters korrigiert.
  12. Tester: Es wurde Slippage bei der Ausführung von Buy Limit und Sell Limit Orders beim Testen anhand Börseninstrumenten beseitigt.
  13. Tester: Es wurde ein Fehler behoben, der in einigen Fällen zur Generierung falscher Preise im Testmodus "Nur Eröffnungspreise" geführt hat.
  14. Tester: Es wurde die Generierung der OnTradeTransaction Events beim Testen korrigiert.
  15. Tester: Beim Testen anhand realer Ticks wird die Information über die Nichtübereinstimmung der Tick-Preise (Bid oder Last, je nach dem anhand welchen Preises der Balken gebildet wird) mit Low oder High des aktullen Minutenbalkens im Journal des Strategietesters angezeigt.
  16. MetaEditor: Es wurden Fehler der Anzeige von Daten des Profilings in Quellcode-Dateien behoben.
  17. Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.
 

Neues MetaTrader 5 Build 1455: Bibliotheken mathematischer Funktionen in MQL5

Am Freitag, dem 14. Oktober 2016, wird das Update der MetaTrader 5 Plattform veröffentlicht. Die neue Version beinhaltet die folgenden Änderungen:

  1. Terminal: Es wurden Tooltips für die Buttons Buy, Sell und Close in Handelsdialogen hinzugefügt. Die Tooltips erklären, welche Aktiva genau bei der Abwicklung der Transaktion gekauft bzw. verkauft werden, und helfen Anfängern den Sinn des Handeslprozesses besser nachzuvollziehen.




  2. Terminal: Es wurden neue Icons für Orders, Trades und Positionen in den Reitern "Handel" und "Historie" hinzugefügt.




  3. Terminal: Es wurden die Anzeige und Aktualisierung der Markttiefe, des Tick-Charts der Markttiefe und von Times & Sales optimiert und wesentlich beschleunigt (um das 4-5-fache).
  4. Terminal: Es wurde die Synchronisierung der Tick-Historie außerhalb der Handelszeiten korrigiert. In einigen Fällen führte der Fehler zu einem übermäßigen Traffic-Vebrauch.
  5. MQL5: Es wurde eine MQL5-Version der Bibliothek der numerischen Analyse ALGLIB hinzugefügt.

    Eigenschaften der Bibliothek

    • Lineare Algebra
    • Lösen von Gleichungen - linearen und nicht linearen
    • Interpolation
    • Optimierung
    • Fast Fourie Transformation
    • Numerische Integration
    • Lineare und nicht lineare Approximation nach der Methode der kleinsten Quadraten
    • Gewöhnliche Differentialgleichungen
    • Berechnung spezieller Funktionen
    • Deskriptive Statistik und Hypothesentest
    • Datenanalyse - Klassifizierung, Regression
    • Implementierung von Algorithmen linearen Algebra, Interpolation usw. hochgenaue Arithmetik (mit MPFR)

    Wie es verwendet wird

    Die Dateien der ALGLIB sind im Verzeichnis \MQL5\Include\Math\Alglib gespeichert. Für die Verwendung der Funktionen, fügen Sie die Hauptdatei der Bibliothek in Ihr Programm hinzu:

    #include <Math\Alglib\alglib.mqh>

  6. MQL5: Es wurden Funktionen für das Arbeiten mit der mathematischen Statistik in die Standardbibliothek hinzugefügt. Nun sind die Möglichkeiten der R-Sprache, eines der besten Werkzeuge der statistischen Datenverarbeitung und -analyse, in MQL5 verfügbar.

    Eigenschaften der Bibliothek

    Die statistische Bibliothek beinhaltet Funktionen für die Berechnung statistischer Eigenschaften sowie Funktionen für das Arbeiten mit statistischen Verteilungen:

    • Funktionen für die Berechnung statistischer Eigenschaften der Array-Elemente
    • Funktionen für das Arbeiten mit statistischen Verteilungen: Normalverteilung, Lognormalverteilung, Betaverteilung usw.

    Wie es verwendet wird

    Die Dateien der statistischen Bibliothek sind in \MQL5\Include\Math\Stat gespeichert. Um Funktionen der Bibliothek zu verwenden, fügen Sie die Datei mit den notwendigen Funktionen in Ihr Programm hinzu, zum Beispiel:

    #include <Math\Stat\Binomal.mqh>
    #include <Math\Stat\Cauchy.mqh>
    
    

    Eine ausführliche Beschreibung der Bibliotheksfunktionen finden Sie im Artikel Statistische Verteilung in MQL5 - das beste aus R rausholen.


  7. MQL5: es wurde eine MQL5-Version der Fuzzy-Bibliothek, in der Inferenzen vom Typ Mamdani und Sugeno implementiert werden, in die Standardbibliothek hinzugefügt.

    Eigenschaften der Bibliothek

    • 13 Zugehörigkeitsfunktionen
    • Flexible Form für die Entwicklung von Relgeln für Fuzzy-Systeme
    • Unscharfe Inferenz nach Mamdani
    • Unscharfe Inferenz nach Sugeno
    • 5 Methoden der Defuzzifizierung für das System vom Typ Mamdani
    • Unbegrenzte Anzahl der Ein- und Ausgabevariablen

    Wie es verwendet wird

    Die Dateien der Fuzzy-Bibliothek sind im Verzeichnis \MQL5\Include\Math\Fuzzy gespeichert. Um Funktionen der Bibliothek zu verwenden, fügen Sie die Datei mit den notwendigen Funktionen in Ihr Programm hinzu, zum Beispiel:

    #include <Math\Fuzzy\mamdanifuzzysystem.mqh>
    #include <Math\Fuzzy\sugenofuzzysystem.mqh>
    
    

    Eine ausführliche Beschreibung der Bibliothek ist in der Code Base zu finden: Fuzzy - Bibliothek für das Arbeiten mit der Fuzzy-Logik


  8. MQL5: Es wurde die Eigenschaft CHART_QUICK_NAVIGATION für das Aktivieren/Deaktivieren der Leiste der schnellen Navigation hinzugefügt. Für die Änderung und das Erhalten des Zustands der Eigenschaft verwenden Sie bitte die Funktionen ChartSetInteger und ChartGetInteger.




    Die Navigationsleiste wird durch das Drücken auf die Eingabe- oder Leertaste aufgerufen. So können Sie schnell zum angegebenen Datum auf dem Chart gelangen sowie Symbol oder Zeitrahmen ändern. Wenn Ihr MQL5-Programm das Drücken der Eingabe- und Leertaste verarbeitet, deaktivieren Sie die Option CHART_QUICK_NAVIGATION, damit das Terminal diese Events nicht abfängt. Die Navigationsleiste kann auch mit einem Doppelklick aufgerufen werden.

  9. MQL5: es wurden die Funktionen FileLoad und FileSave für ein einfaches Lesen und Speichern von Arrays in Dateien. Im Gegensatz zu FileRead* und FileWrite* brauchen diese Funktionen den Handle der Datei nicht. FileLoad und FileSave funktionieren mit Arrays von numerischen Typen sowie mit einfachen Strukturen, die keine Strings, dynamischen Arrays oder Klassenobjekte haben.
    long  FileLoad(
       const string filename,      // [in] Dateiname
       void         &buffer[],     // [out] ein Array, in das die Datei geschrieben wird liest
       uint         common_flag=0  // [in] 0 - Suche nach der Datei im Files-Ordner des Terminals, FILE_COMMON - im gemeinsamen Verzeichnis der Terminals
       );
    
    bool  FileSave(
       const string filename,      // [in] Dateiname
       const void   &buffer[],     // [in] Array, welches in der Datei gespeichert wird
       uint         common_flag=0  // [in] 0 - Erstellung einer Datei im Files-Ordner des Terminals, FILE_COMMON - im gemeinsamen Verzeichnis der Terminals
       );
    
    Ein Beispiel dafür, wie Ticks in eine Datei geschrieben und anschließend gelesen werden:
    //--- Eingabeparameter
    input int      ticks_to_save=1000; // Anzahl von Ticks
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       string  filename=_Symbol+"_ticks.bin";
       MqlTick ticks[];
    //---
       int copied=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,0,ticks_to_save);
       Sif(copied!=-1)
         {
          PrintFormat(" CopyTicks(%s) copied %d ticks",_Symbol,copied);
          //--- wenn die Tick-Historie synchronisiert ist, ist der Fehlercode gleich Null
          if(!GetLastError()==0)
             PrintFormat("%s: Ticks are not synchronized. Error=",_Symbol,copied,_LastError);
          //---  schreiben wir die Ticks in eine Datei
          if(!FileSave(filename,ticks,FILE_COMMON))
             PrintFormat("FileSave() failed, error=%d",GetLastError());
         }
       else
          PrintFormat("Failed CopyTicks(%s), Error=",_Symbol,GetLastError());
    //--- nun lesen wir diese Ticks aus der Datei
       ArrayFree(ticks);
       long count=FileLoad(filename,ticks,FILE_COMMON);
       if(count!=-1)
         {
          Print("Time\tBid\tAsk\tLast\tVolume\tms\tflags");
          for(int i=0;i<count;i++)
            {
             PrintFormat("%s.%03I64u:\t%G\t%G\t%G\t%I64u\t0x%04x",
             TimeToString(ticks[i].time,TIME_DATE|TIME_SECONDS),ticks[i].time_msc%1000,
             ticks[i].bid,ticks[i].ask,ticks[i].last,ticks[i].volume,ticks[i].flags);
            }
         }
      }
    

  10. MQL5: Es wurde die Anzeige benutzerdefinierter Indikatoren mit dem Modus DRAW_CANDLES geändert. Nun kann man für diesen Stil eine bis drei Farben setzen, davon hängt die Darstellung von Kerzen ab.

    Wenn nur eine Farbe angegeben wird, werden alle Kerzen auf dem Chart diese Farbe haben.
    //--- Kerzen haben die gleiche Farbe 
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- es wurde nur eine Farbe angegeben, deswegen haben alle Kerzen die gleiche Farbe
    #property indicator_color1  clrGreen  
    
    Wenn zwei Kerzen angegeben werden, werden die Umrisse der Kerzen die erste Farbe und der Körper — die zweite Farbe haben.
    //--- die Farbe der Kerzen unterscheidet sich von der Farbe der Schatten
    #property indicator_label1  "Two color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- Schatten und Umriss - grün, Körper - weiss
    #property indicator_color1  clrGreen,clrWhite 
    
    Wenn drei Farben angegeben wurden, werden der Umriss der Kerzen die erste Farbe, bullische Kerzen - die zweite und bärische Kerzen - die dritte Farbe haben.
    //--- die Farbe der Kerzen unterscheidet sich von der Farbe der Schatten
    #property indicator_label1  "One color candles"
    #property indicator_type1   DRAW_CANDLES
    //--- die Schatten und der Umriss sind grün, der Körper der bärischen Kerze ist weiß, der Körper der bärischen Kerze ist rot
    #property indicator_color1  clrGreen,clrWhite,clrRed
    
    Auf diese Weise kann man mithilfe des Stils DRAW_CANDLES eigene benutzerdefinierte Varianten der Kerzenfarben gestalten. Alle Farben können beim Laufen des Indikators mithilfe der Funktion PlotIndexSetInteger(Index_DRAW_CANDLES, PLOT_LINE_COLOR, modifier_nummer, Farbe) geändert werden, wobei:
    • 0 – Farbe des Umrisses und der Schatten
    • 1– Farbe des Körpers einer bullischen Kerze
    • 2 – Farbe des Körpers einer bärischen Kerze
    //--- setzen wir die Farbe für den Umriss und die Schatten
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue);
    //--- setzen wir die Farbe für den Körper der bullischen Kerze
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrGreen);
    //--- setzen wir die Farbe für den Körper der bärischen Kerze
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
    
  11. MQL5: Es wurde eine Reihe von Fehlern behoben und das Arbeiten mit der Tick-Historie mithilfe der CopyTicks Funktion beschleunigt.
  12. MQL5: Es wurde die Verwendung von Operatoren in Schnittstellen erlaubt.
  13. Market: Es wurde der Fehler behoben, der in einigen Fällen zu einer erneuten Autorisierung auf MQL5.community beim Einkaufen im Market führte.
  14. Tester: Es wurde die Übersetzung der Anwenderschnittstelle in die griechische, malaiische und neuhebräische Sprachen hinzugefügt.
  15. Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

 

Neues MetaTrader 5 Build 1485: weitere Testmodi und Charts in der Standardbibliothek

Am Donnerstag, den 24. November 2016, wird ein Update für die MetaTrader 5 Plattform veröffentlicht. Die neue Version beinhaltet die folgenden Änderungen:


  1. Terminal: Es wurde die Reihenfolge der Anzeige von Eintragungen im Journal des Terminals und MetaEditors geändert. Früher wurden am Anfang des Journals die neuesten Einträge angezeigt, und jetzt - die ältesten. Die umgekehrte Reihenfolge ist beim Lesen des Journals geläufiger und benutzerfreundlicher.




    Darüber hinaus kann man jetzt die Spalten "Zeit" und "Quelle" über das Kontextmenü ausblenden.

  2. Terminal: Im Hedging-Modus wird nun das Ticket einer geschlossenen Position für Orders und Geschäfte in der Handelshistorie angezeigt. Dies erleichtert die Suche nach zusammenhängende Eröffnungs- und Schlusstransaktionen.




  3. Terminal: Es wurde ein Fehler behoben, der zum Kopieren von SL/TP Ebenen aus einer vorhandenen Position in eine neue Position auf dem gleichen Symbol geführt hat. Der Fehler trat bei der Verwendung von Funktionen des Ein-Klick-Handels (z.B., Panel auf dem Chart, Marktübersicht-Fenster) im Hedging-Modus auf.
  4. Terminal: Es wurde die Anzeige von Objekten "Pfeile" auf Bildschirmen mir hoher Auflösung korrigiert (4К).
  5. MQL5: Es wurde die Funktion ArrayPrint für die Ausgabe von Arrays einfacher Typen und Strukturen ins Journal hinzugefügt.
    void  ArrayPrint(
       const void&   array[],             // Output Array
       uint          digits=_Digits,      // Anzahl von Dezimalstellen nach dem Komma
       const string  separator=NULL,      // Trennzeichen zwischen den Werten der Felder einer Struktur
       ulong         start=0,             // Index des ersten ausgegebenen Elements
       ulong         count=WHOLE_ARRAY,   // Anzahl von ausgegebenen Elementen
       ulong         flags=ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN    
       );
    
    ArrayPrint gibt nicht alle Felder des Arrays einer Struktur im Journal aus – die Felder Arrays und Objekt-Bezeichner werden ausgelassen. Für die Ausgabe aller Felder einer solcher Struktur wird eine eigene Funktion mit einer gewünschten Formatierung benötigt.
    //--- gibt die Werte der letzten zehn Balken aus 
       MqlRates rates[];
       if(CopyRates(_Symbol,_Period,1,10,rates))
         {
          ArrayPrint(rates);
          Print("Überprüfung\n[time]\t[open]\t[high]\t[low]\t[close]\t[tick_volume]\t[spread]\t[real_volume]");
          for(int i=0;i<10;i++)
            {
             PrintFormat("[%d]\t%s\t%G\t%G\t%G\t%G\t%G\t%G\t%I64d\t",i,
             TimeToString(rates[i].time,TIME_DATE|TIME_MINUTES|TIME_SECONDS),
             rates[i].open,rates[i].high,rates[i].low,rates[i].close,
             rates[i].tick_volume,rates[i].spread,rates[i].real_volume);
            }
         }
       else
          PrintFormat("CopyRates failed, error code=%d",GetLastError());
    //--- Beispiel
    /*
                        [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
       [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295         18110       10   17300175000
       [1] 2016.11.09 05:00:00 1.12296 1.12825 1.11930 1.12747         17829        9   15632176000
       [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744         13458       10    9593492000
       [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194         15362        9   12352245000
       [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172         16833        9   12961333000
       [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052         15933        8   10720384000
       [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528         11888        9    8084811000
       [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915          7284       10    5087113000
       [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904          8710        9    6769629000
       [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263          8956        7    7192138000
       Überprüfung
       [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]
       [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295 18110 10 17300175000 
       [1] 2016.11.09 05:00:00 1.12296 1.12825 1.1193 1.12747 17829 9 15632176000 
       [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744 13458 10 9593492000 
       [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194 15362 9 12352245000 
       [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172 16833 9 12961333000 
       [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052 15933 8 10720384000 
       [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528 11888 9 8084811000 
       [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915 7284 10 5087113000 
       [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904 8710 9 6769629000 
       [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263 8956 7 7192138000 
    */
    

  6. MQL5: Es wurde ein Fehler in der Addition von Zeilen vom Typ S1=S2+S1 behoben.
  7. MQL5: Das Verhalten der Funktion ArrayResize wurde geändert. Bei der Übergabe des Wertes -1 als reserve_size Parameter macht die Funktion den unbenutzten (reservierten) Speicher frei, wenn die Array-Größe dabei nicht erhöht wird. Die Setzung der neuen Array-Größe auf 0 mit dem Wert reserve_size=-1 ist gleich dem Aufruf von ArrayFree. Das neue Verhalten lässt die Verwendung des Speichers in MQL5-Programmen optimieren.
    void OnStart()
      {
       int arr[];
    //--- wie viel Speicherplatz ursprünglich verwendet wurde 
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- wie viel Speicherplatz für das Array mit der Größe 1 verwendet wurde, aber mit Reserve
       ArrayResize(arr,1,1024*1024);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- nach der Vergrößerung des Arrays wird der Speicherplatz dank der Reserve nicht geändert
       ArrayResize(arr,1024*512,1024*1024);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- nach der Reduzierung des Arrays verändert sich die Speichergröße nicht
       ArrayResize(arr,1);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- der vom Array nicht genutzte Speicherplatz wird durch das Löschen der Reserve frei
       ArrayResize(arr,1,-1);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
      }
    

  8. MQL5: Es wurden Funktionen für das Zeichnen von Charts in die Standardbibliothek hinzugefügt. Um diese zu nutzen, fügen Sie die Datei MQL5\Include\Graphics\Graphic.mqh in Ihr Projekt hinzu.

    Zeichnen eines Charts aus 3 Datenreihen mithilfe von GraphPlot:
    #include <Graphics/Graphic.mqh>
    
    double Func1(double x) { return MathPow(x,2); }
    double Func2(double x) { return MathPow(x,3); }
    double Func3(double x) { return MathPow(x,4); }
    
    void OnStart()
      {
       GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
      }
    
    
    Das Ergebnis:


    Zeichnen eines Charts basierend auf einem Datenarray mithilfe von GraphPlot:
    #include <Math/Stat/Binomial.mqh>
    #include <Graphics/Graphic.mqh>
    
    void OnStart(void)
      {
       double    vars[101];
       double    results[101];
       const int N=2000;
    //---  
       MathSequence(0,N,20,vars);
       MathProbabilityDensityBinomial(vars,N,M_PI/10,true,results);
       ArrayPrint(results,4);
       GraphPlot(results);
    //---
      }
    
    Das Ergebnis:



  9. MQL5: Funktionen für das Arbeiten mit mathematischer Statistik in der Standardbibliothek aktualisiert. Es wurde eine große Überprüfung der Qualität und Genauigkeit aller Funktionen sowohl in der MQL5-Version, als auch in der Ausgangssprache R durchgeführt. Für die Kontrolle der Genauigkeit und der Geschwindigkeit werden zusammen mit der statischen Bibliothek Unit-Test verteilt. Diese sind im Verzeichnis \MQL5\Scripts\UnitTests\Stat verfügbar.

    • TestStat.mq5 — Testskript für die Überprüfung von Berechnungsergebnissen
    • TestPrecision.mq5 — testet die Genauigkeit von Berechnungen
    • TestBenchmark.mq5 — Test mit der Leistungsmessung

  10. Tester: Weitere Einstellungen für die Konfiguration von Verzögerung der Ausführung beim Testen. Nun kann man einen Handelsroboter unter noch vielfältigeren Bedingungen testen: von einem idealen Fall ohne Verzögerungen bis zu einer beliebigen Verzögerung, gesetzt vom Nutzer.



    Früher war nur der Modus zufälliger Verzögerungen verfügbar.

  11. Tester: Es wurde der Fehler der Generierung des Tickvolumens von Balken beim Testen im Modus OHLC М1 behoben.
  12. Tester: Die Eintragung der Eröffnungszeit wurde bei Ordern und Positionen genau bis auf Millisekunden beim Handel im Hedging-Modus verbessert.
  13. Tester: Es wurde der Fehler "old tick" (Tick veraltet) behoben, der bei Mehrwährungstests oder Multitimeframe-Tests im Modus anhand echter Ticks auftrat.
  14. Tester: Die Funktion CopyTicks wurde beschleunigt, wenn die angeforderten Ticks aus einer Datenbank auf einer Platte gelesen werden.
  15. MetaEditor: Befehle für das Arbeiten mit dem Repositorium von Quellcodes MQL5 Storage wurden in das Kontextmenü der Datei im Navigator und in die Toolbox hinzugefügt.




  16. MetaEditor: Es wurde ein Fehler behoben, der zur Beeinträchtigung der Integrität der lokalen Datenbank von MQL5 Storage bei der Arbeit mit mehr als 1024 Dateien im Repositorium führte.
  17. MetaEditor: Es wurde der Fehler der Anzeige des Dateibaums von MQL5 Storage behoben.
  18. MetaEditor: Die Anzeige einer Datei nach zahlreichen Textersetzungen korrigiert.
  19. Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

 

Neues MetaTrader 5 Build 1490: Verbesserungen und Fehlerbehebungen

Am 2. Dezember 2016 wird ein Update für die MetaTrader 5 Plattform veröffentlicht. Wir haben eine Reihe von Bugs anhand Meldungen von Nutzern und Crashlogs behoben, um die Plattform noch benutzerfreundlicher zu machen.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

 

Neues MetaTrader 5 Build 1495: Verbesserungen in MQL5 für das Arbeiten mit benutzerdefinierten Grafiken

Am 9. Dezember 2016 wird ein Update für die MetaTrader 5 Plattform veröffentlicht. Dieses Update beinhalten die folgenden Änderungen:

  1. MQL5: Es wurde die Funktion CopyTicksRange hinzugefügt.
  2. MQL5: Es wurden verbesserte Glättungsfunktionen in die CCanvas Klasse hinzugefügt:
  3. MQL5: Es wurde die Beschreibung der grafischen Bibliothek in die Dokumentation MQL5 hinzugefügt, mit welcher Histogramme, Verteilungen und lineare Grafiken direkt auf Preischarts schnell gezeichnet werden können.
  4. MQL5: Es wurden Statusbezeichnungen für Systemtasten in die Liste der Konstanten Status des Kundenterminals hinzugefügt. Der Aufruf von TerminalInfoInteger(TERMINAL_KEYSTATE_XXX) gibt den gleichen Code des Status der Taste zurück, wie die Funktion GetKeyState() in MSDN.
  5. MQL5: Die Umwandlung des Typs string in den Typ bool wird nicht mehr unterstützt. Für die Überprüfung von Strings muss eine explizite Bedingung geschrieben werden. In der neuen Version wird z.B. für den folgenden Code ein Fehler der Kompilation zurückgegeben:
    string str;
    ...
    if(str)                        // Fehler der Kompilation "Cannot convert type 'string' to 'bool'" (in den vorherigen Builds trat der Fehler nicht auf)
       Print("str is true");
    Man muss eine explizite Bedingung schreiben:
    string str;
    ...
    
    //--- überprüfen, ob der String initialisiert wurde
    if(str!=NULL)
       Print("str is true");
    
    oder
    
    //--- überprüfen, ob der Wert des Strings "true" ist
    if(StringCompare(str,"true",false))
       Print("str is true");
    
    oder
    
    //--- überprüfen, ob der String eine Zahl ist und nicht gleich Null ist
    if((int)str!=0)
       Print("str is true");
  6. Fehlerbehebungen anhand Crashlogs.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

 

Neues MetaTrader 5 Build 1525: Darstellung der Historie als Positionen und Verbesserung des Strategietesters

Am Freitag, dem 27. Januar 2017, wird ein Update für die MetaTrader 5 Plattform veröffentlicht. Dieses Update beinhalten die folgenden Änderungen:

  1. Terminal: Die Handelshistorie wird jetzt in Form von Positionen dargestellt. Das Terminal sammelt Daten von Deals, die auf eine Position bezogen sind (Eröffnung, zusätzliches Volumen, Teilschließung und komplette Schließung) und gruppiert diese Daten in einer Eintragung, die die folgenden Details enthält:

    • Eröffnungs- und Schlusszeit der Position, die Zeit wird nach dem ersten und letzten Trade festgelegt
    • Positionsgröße. Wenn ein Teil der Position geschlossen wurde, werden das geschlossene Volumen und das ursprüngliche Volumen gezeigt
    • Gewichteter Durchschnittspreis für die Eröffnung und Schließung der Position
    • Gesamtfinanzergebnis von Deals, die sich auf die Position beziehen




    Für Konten mit der Hedge-Option ist solche Darstellung von Positionen ähnlich der Kontohistorie in MetaTrader 4.




  2. Terminal:  Es wurde ein neues Befehl für die Visualisierung von Deals auf dem Chart nach einem bestimmten Symbol hinzugefügt.

    • Um alle Abschlüsse für die gewählte Position/Symbol anzuzeigen, klicken Sie auf "[Symbolname] Deals hinzufügen". Die entsprechenden Deals werden auf allen offenen Charts des ausgewählten Symbols angezeigt. Wenn keine offenen Charts vorhanden sind, wird ein neuer Chart geöffnet.
    • Um alle Abschlüsse für alle Symbole aus der Historie anzuzeigen, klicken Sie auf "Alle Deals hinzufügen". Auf allen offenen Charts werden alle Deals für entsprechende Symbole angezeigt.




  3. Terminal: Es wurde die Anzeige des internationalen Namens eines Finanzinstruments in der Kontraktspezifikation hinzugefügt sowie die Suchmöglichkeit nach dem internationalen Namen im Dialog der Symbolverwaltung




  4. Terminal: Es wurde die Möglichkeit hinzugefügt, die Auflösung des Terminalfensters schnell zu setzen. Diese Funktion wird für diejenigen praktisch sein, die Videos aufnehmen. Im Menü stehen Ihnen die populärsten Auflösungen für die Veröffentlichung von Videos in verschiedenen Videoservices wie YouTube zur Verfügung.



  5. Terminal: Vorlagen und Profile von Charts wurden aus [Terminal Data Folder\Profiles] nach [Terminal Data Folder\MQL5\Profiles] übertragen. Nun kann man Vorlagen ins MQL5 Storage ganz einfach hinzufügen und auf diese von beliebigen PCs zugreifen.
  6. MQL5: Es wurde die Unterstützung für Ressourcenvariablen hinzugefügt. Die Verwendung solcher Variablen kann die Entwicklung einiger Programme wesentlich vereinfachen. Sie können zum Beispiel, einen OpenCL-Code in einer separaten CL-Datei schreiben und dann diese Datei als String den Ressourcen ihres MQL5-Programms hinzufügen. Früher hat man einen solchen Code als eine große String-Variable beschreiben müssen.

    Deklaration der Ressourcenvariablen
    #resource path_to_resource_file als type_of_resource_variable name_of_resource_variable

    Eigenschaften
    • Die Kodierung von String-Dateien wird automatisch nach BOM (Überschrift) bestimmt. Wenn BOM fehlt, wird die Kodierung nach dem Inhalt ermittelt. Es werden die Kodierungen ANSI, UTF-8 und UTF-16 unterstützt. Alle Strings werden in Unicode umgewandelt.
    • Die Daten einer solchen Ressource können nur über eine Variable adressiert werden. Die automatische Adressierung über "::<resource name>" funktioniert nicht.
    • Der spezielle Typ der Ressourcenvariablen bitmap zeigt dem Compiler, dass die Ressource eine grafische Abbildung darstellt. In diesem Fall bekommt die Ressourcenvariable den Typ uint.
    • Bei der Verwendung einer 24-Bit-Abbildung wird die Komponente des Alpha-Kanals für alle seine Pixel auf 255 gesetzt.
    • Bei der Verwendung einer 32-Bit-Abbildung ohne Alpha-Kanal wird die Komponente des Alpha-Kanals für alle seine Pixel auch auf 255 gesetzt.
    • Bei der Verwendung einer 32-Bit-Abbildung mit dem Alpha-Kanal werden die Pixel nicht verarbeitet.
    • Die Array-Ressourcenvariable vom Typ bitmap kann zwei Dimensionen haben. In diesem Fall wird die Array-Größe als [Bildhöhe][Bildbreite] gesetzt.
    • Wenn das Arrays eindimensional ist, wird die Anzahl der Elemente als Bildhöhe*Bildbreite definiert.
    • Wenn die Dateigröße der Ressource keine Aliquote zur Größe des Elements des Arrays ist, werden die restlichen Daten abgeschnitten. Z.B. wenn die Dateigröße 14 Bytes beträgt, beläuft sich die Anzahl der Elemente für ein int Array auf 3, und die restlichen 2 Bytes (14 - sizeof(int)*3) werden abgeschnitten.

    Anwendungsbespiele
    #resource "data.bin" as int ExtData[]             // Deklaration des eindimensionalen Arrays vom nummerischen Typ, das Daten aus der Datei data.bin enthält
    #resource "data.bin" as MqlRates ExtData[]        // Deklaration des Arrays einfacher Strukturen, das Daten aus der Datei data.bin enthält
    
    #resource "data.txt" as string ExtCode            // Deklaration des Strings, der Daten aus der Datei data.txt enthlt
    #resource "data.txt" as string ExtCode[]          // Deklaration des String-Arrays, data.txt
    
    #resource "image.bmp" as bitmap ExtBitmap[]       // Deklaration des eindimensionalen Arrays, das die Bitmap aus der BMP Datei enthält, Arraygröße = height * width
    #resource "image.bmp" as bitmap ExtBitmap2[][]    // Deklaration des zweidimensionalen Arrays, das die Bitmap aus der BMP Datei enthält, Arraygröße [height][width]

  7. MQL5: Es wurde die Eigenschaft CHART_SHOW für die Deaktivierung der Anzeige eines Charts hinzugefügt. Für das Erhalten und die Installation der Eigenschaft werden die Funktionen ChartGetInteger und ChartSetInteger verwendet.

    Wenn false, wird die Zeichnung jeglicher Attribute eines Preischarts deaktiviert und alle Randabstände des Charts werden entfernt: Zeit- und Preisskala, die Leiste der schnellen Navigation, Markierungen von Ereignissen im Kalender, Zeichen von Trades, Tooltips von Indikatoren und Balken, Unterfenster von Indikatoren, Histogramme der Volumina usw.
    Die Deaktivierung der Zeichnung stellt eine ideale Lösung für die Erstellung eines eigenen Interfaces unter Verwendung grafischer Ressourcen.

    Grafische Objekte werden unabhängig von dem gesetzten Wert der CHART_SHOW Eigenschaft gezeichnet.

  8. MQL5: Es wurde die Eigenschaft CHART_KEYBOARD_CONTROL für die Aktivierung/Deaktivierung der Steuerung eines Charts mit der Tastatur ("Home", "End", "PageUp", "+", "-", "Pfeil nach oben" usw.) hinzugefügt. Wenn man CHART_KEYBOARD_CONTROL auf false setzt, kann man das Scrollen und die Skallierung des Charts deaktivieren, dabei kann man aber die Ereignisse des Drückens auf diese Tasten in OnChartEvent erhalten.

    Für das Erhalten und Setzen der Eigenschaft werden die Funktionen ChartGetInteger und ChartSetInteger verwendet.

  9. MQL5: Es wurden neue Funktionen und Eigenschaften für Operationen mit OpenCL hinzugefügt.

    Neue Eigenschaften für das Arbeiten mit dem Speicher
    Mit CLGetInfoIntegrer kann man nun 4 neue Eigenschaften erhalten:
    • CL_DEVICE_MAX_WORK_GROUP_SIZE — die Gesamtzahl der lokalen Arbeitsgruppen, die für ein OpenCL Gerät verfügbar sind.
    • CL_KERNEL_WORK_GROUP_SIZE — die Gesamtzahl der lokalen Arbeitsgruppen, die für ein OpenCL Programm verfügbar sind.
    • CL_KERNEL_LOCAL_MEM_SIZE — die Größe des lokalen Speichers in Bytes, den ein OpenCL Programm für alle parallelen Auufgaben in einer Gruppe verwendet. Verwenden Sie CL_DEVICE_LOCAL_MEM_SIZE, um das verfügbare Maximum zu erhalten.
    • CL_KERNEL_PRIVATE_MEM_SIZE — minimale Größe des privaten Speichers in Bytes, die von jeder Aufgabe im Kernel des OpenCL Programms genutzt wird.

    bool CLExecutionStatus(int kernel)
    Gibt den Ausführungsstatus eines OpenCL Programms zurück. Als Parameter wird das Handle des Kernels des OpenCL Programms übergeben.

    bool CLSetKernelArgMemLocal(int kernel_handle,int arg_index,ulong local_mem_size)
    Setzt den Puffer als Argument der kernel-Funktion. Als Parameter werden das Handle des Kernels des OpenCL Programms, Nummer des Arguments der OpenCL-Funktion und die Puffergröße übergeben.

  10. MQL5: Es wurde die Funktion TranslateKey hinzugefügt, die ein Unicode-Zeichen nach dem virtuellen Code der Taste unter Berücksichtigung der aktuellen Eingabesprache und des Status der Steuerungstasten zurückgibt. Die Funktion verwendet ToUnicodeEx für die Umwandlung der vom Nutzer gedrückten Tasten in Unicode-Zeichen.
    void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
      {
       if(id==CHARTEVENT_KEYDOWN)
         {
          short sym=TranslateKey((int)lparam);
          //--- wenn das eingegebene Zeichen erfolgreich in Unicode umgewandelt wurde
          if(sym>0)
             Print(sym,"'",ShortToString(sym),"'");
          else
             Print("Error in TranslateKey for key=",lparam);
         }
      }

  11. MQL5: Es wurde der Antwortcode TRADE_RETCODE_LIMIT_POSITIONS hinzugefügt. Die Anzahl offener Positionen, die man gleichzeitig auf einem Konto haben kann, kann durch die Servereinstellungen begrenzt werden. Wenn die Grenze erreicht ist, gibt der Server beim Versuch, eine Order zu platzieren, den Fehler TRADE_RETCODE_LIMIT_POSITIONS zurück. Die Begrenzung funktioniert unterschiedlich je nach dem Typ der Verrechnung von Positionen:

    • Im Netting-Modus wird die Anzahl offener Positionen berücksichtigt. Beim Erreichen der Grenze erlaubt die Plattform keine neuen Orders zu platzieren, infolge deren sich die Anzahl der offenen Positionen erhöhen kann. Die Plattform erlaubt praktisch Orders nur für die Symbole zu platzieren, auf welchen es bereits offene Positionen gibt. Die aktuellen Pending Orders werden nicht berücksichtigt, weil deren Ausführung zur Änderung der aktuellen Positionen und nicht zur Erhöhung ihrer Anzahl führen kann.
    • Im Hedging-Modus werden neben den offenen Positionen auch platzierte Pending Orders berücksichtigt, denn ihre Auslösung immer zur Eröffnung einer offenen Position führt. Wenn die Grenze erreicht ist, erlaubt die Plattform keine Marktorders zur Eröffnung von Positionen sowie keine Pendig Orders zu eröffnen.

  12. MQL5: Es wurde ein Fehler behoben, der in einigen Fallen zum Auslassen von Ticks in der Tick-Historie führte.
  13. MQL5: Es wurden die Fehler der indirekten Typisierung von Vorlagen behoben.
  14. MQL5: Es wurde die Bibliothek mathematischer Statistik aktualisiert.
  15. Market: Es wurde das Öffnen der Produktseite beim Herunterladen einer Demoversion korrigiert.
  16. Tester: Nun werden Optimierungsergebnisse nach der Spalte "Ergebnisse" automatisch sortiert.
  17. Tester: Es wurde die Option der automatischen Umschaltung auf Ergebnisse nach dem Beenden der Optimierung hinzugefügt.
  18. Tester: Der Strategietester bleibt nun im Optimierungsmodus nach dem Start eines einzelnen Tests. Früher wechselte der Strategietester zum Modus des Einzeltests, wenn ein Einzeltest aus dem Ergebnisse-Reiter gestartet wurde. Für die erneute Optimierung musste man früher diese in den Einstellungen wieder starten.
  19. Tester: Jetzt kann man Sets von Parametern nicht nur als set-Dateien, sondern auch als Einstellungen des lokalen Strategietesters mit einem Zugriff über das Kontextmenü speichern.




  20. Tester: Es wurde die Übersetzung ins Mongolische, Ungarische, Rumänische und Urdu hinzugefügt.
  21. MetaEditor: Es wurde die Möglichkeit hinzugefügt, die Reihenfolge betrachtender Ausdrücke im Debug-Fenster zu ändern. Bewegen Sie einfach den Ausdruck zur gewünschten Position.




  22. MetaEditor: Es wurde der Fehler der Erkennung der Kodierung von Quelldateien behoben.
  23. MetaEditor: Es wurde die Suche nach Dateien in der UTF-8-Kodierung hinzugefügt.
  24. MetaEditor: Es wurde der Fehler der Hervorhebung eines Textes mit Tabulatoren mit der Maus behoben.
  25. MetaEditor: Es wurde die Übersetzung ins Ungarische und Rumänische hinzugefügt.
  26. Die Dokumentation wurde aktualisiert.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

Grund der Beschwerde: