Die neue Version der Plattform MetaTrader 4 build 970: Vereinfachte Eröffnung von Demokonten und Erweiterung von MQL4-Möglichkeiten

 

Die neue Version der Plattform MetaTrader 4 build 970: Vereinfachte Eröffnung von Demokonten und Erweiterung von MQL4-Möglichkeiten

Am Freitag, 3. Juni 2016 wird eine Aktualisierung der MetaTrader 4 Plattform veröffentlicht. Die Aktualisierung enthält folgende Verbesserungen:

Ab dem 1. Juli 2016 werden MetaTrader 4 Terminals älter als build 940 nicht mehr unterstützt

Ab dem 1. Juli 2016 werden MetaTrader 4 Kundenterminals älter als build 940 nicht mehr unterstützt. Solche Terminals können keine Verbindung mit Servern der neuen Versionen herstellen. Aus diesem Grund empfehlen wir Ihnen, Ihre Terminals zu aktualisieren.


MetaTrader 4 build 970

  1. Terminal: Dialog der Eröffnung eines Demokontos wesentlich vereinfacht. Nun brauchen Sie keine lange Form mehr auszufüllen, geben Sie nur die wichtigsten Daten ein und wählen Sie die Handelsparameter aus: Kontotyp, Anlage und Hebel.




  2. MQL4: das Format ausführbarer EX4-Dateien wurde aufgrund neuer Möglichkeiten der MQL4-Programmiersprache geändert. Alle alten EX4-Programme, die im MetaEditor vorheriger Versionen kompiliert wurden, werden nach der Aktualisierung richtig funktionieren. Auf diese Weise bleibt die Aufwärtskompatibilität erhalten.

    Allerdings werden die EX4-Programme, die in der Version 970 und höher kompiliert wurden, in den Terminals älterer Versionen nicht funktionieren — es gibt keine Abwärtskompatibilität.

  3. MQL4: Abstrakte Klassen und rein virtuelle Funktionen hinzugefügt.

    Die abstrakten Klassen dienen zur Erstellung generalisierter Entitäten, 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). Ein 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 eine falsche Anwendung
    new CAnimal;         // Fehler 'CAnimal' - der Compiler zeigt die Fehlermeldung "cannot instantiate abstract class" an
    CAnimal some_animal; // Fehler 'CAnimal' - der Compiler zeigt die Fehlermeldung "cannot instantiate abstract class" an
    
    //--- Beispiele für die richtige Anwendung
    new CCat;  // kein Fehler - die CCat Klasse ist nicht abstrakt
    CCat cat;  // kein Fehler - die CCat Klasse ist nicht abstrakt
    
    Begrenzungen für Anwendung abstrakter Klassen
    Wenn der Konstruktor einer abstrakten Klasse eine rein virtuelle Funktion (direkt oder indirekt) aufruft, wird das Ergebnis undefiniert sein.
    //+------------------------------------------------------------------+
    //| Abstrakte Basisklasse                                            |
    //+------------------------------------------------------------------+
    class CAnimal
      {
    public:
       //--- rein virtuelle Funktion
       virtual void      Sound(void)=NULL;
       //--- Funktion
       void              CallSound(void) { Sound(); }
       //--- Konstruktor
       CAnimal()
        {
         //--- 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.

  4. MQL4: Für Vereinfachung von Event-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, die Variable Pointer auf Funktion kann deklariert werden:
    TFunc func_ptr;
    In der Variablen func_ptr kann man den Pointer auf Funktion speichern, um die Funktion 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.

  5. MQL4: Der Aufzählung der Eigenschaften des Kundenterminals ENUM_TERMINAL_INFO_INTEGER wurde der Wert TERMINAL_SCREEN_DPI hinzugefügt — die Auflösung der Informationsanzeige auf dem Bildschirm wird in Punkten pro Zoll (DPI) angegeben. Wenn der Wert dieses Parameters bekannt ist, kann die Größe grafischer Objekte so eingestellt werden, dass diese auf Bildschirmen mit unterschiedlicher Auflösung gleich aussehen.
  6. MQL4: Der Aufzählung von Eigenschaften des Kundenterminals ENUM_TERMINAL_INFO_INTEGER wurde der Wert TERMINAL_PING_LAST hinzugefügt — der letzte bekannte Wert der Ping-Zeit bis zum Handelsserver in Mikrosekunden. Eine Sekunde besteht aus einer Million Mikrosekunden.
  7. MQL4: die Puffern DRAW_NONE (keine grafischen Darstellungen) werden nicht bei der Berechnung des Minimums und Maximums des Chartsfensters in benutzerdefinierten Indikatoren berücksichtigt.
  8. MQL4: Generierung von Ereignissen korrigiert, die mit dem Bewegen der Maus und dem Drücken der Maustaste über Objekten vom Typ OBJ_LABEL und OBJ_TEXT verbunden sind. Früher wurden die Events unkorrekt generiert, wenn sie sich innerhalb anderer Objekte vom Typ OBJ_RECTANGLE_LABEL und OBJ_RECTANGLE befanden.
  9. MQL4: Einzeichnen der Balken des Histogramms mit Null-Höhe in benutzerdefinierten Indikatoren korrigiert. Früher wurden diese Balken nicht gezeichnet, nun werden diese ein Pixel hoch gezeichnet.
  10. Signals: Suche nach Symbolen beim Vergleichen verfügbarer Handelsinstrumente des Signalanbieters und des Abonnenten korrigiert.
  11. Tester: Verwendung von Spread in fxt-Dateien korrigiert, wenn in den Einstellungen des Testers der aktuelle Spread verwendet wird.
  12. Market: Eine Reihe von Anzeigefehlern des Schaufensters im Market behoben.
  13. MetaEditor: Die Wortsuche in den Dateien im Modus "Nur das ganze Wort" korrigiert.
  14. MetaEditor: Öffnen einer Datei mit einem Doppelklick auf die Zeile, die das Ergebnis der Kompilation für die entsprechende Datei enthält.
  15. MetaEditor: Anzeige einiger Steuerelemente in Windows XP verbessert.
  16. Verbesserungen von Crash-Logs.

Die Aktualisierung wird über LiveUpdate verfügbar sein.

Grund der Beschwerde: