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

Der Marktübersicht wurde das Arbeiten mit der Tick-Historie hinzugefügt. Früher zeigte ein Tickchart nur die Historie, die sich während der Arbeit im

23 Oktober 2015

Handelsterminal

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


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

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



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

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


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

Market

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

Virtuelles Hosting und Signale

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


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


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


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

MQL5

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

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

    Die Struktur MqlTick wird in zwei Methoden verwendet:

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

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

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

Tester

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


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

Verbesserungen anhand Crash-Logs.

Die Dokumentation wurde aktualisiert.