MetaTrader 5 Plattform Build 2005: Wirtschaftskalender, MQL5-Programme als Dienste und eine API für die Sprache R

Was ist neu im MetaTrader 5

21 Februar 2019

Terminal

  1. Komplett überarbeiteter, integrierter Wirtschaftskalender.

    Der Wirtschaftskalender ist unsere eigene Lösung. Er bietet Ihnen über 600 Finanznachrichten und Indikatoren der 13 größten Volkswirtschaften der Welt: USA, Europäische Union, Japan, Großbritannien, Kanada, Australien, China unter andere. Die relevanten Daten werden aus offenen Quellen in Echtzeit erhoben.

    Die neue Version bietet aktualisierte Inhalte und erweiterte Ereignisfilter: nach Zeit, Priorität, Währungen und Ländern.

    Die Daten des Kalenders können jetzt aus MQL5 Programmen abgerufen werden. Bitte sehen Sie weiter unten die Details.




  2. Es gibt eine neue Art von MQL5-Anwendungen — Dienste. Dieser neue Typ ermöglicht die Erstellung von benutzerdefinierten Preisfeeds für das Terminal, d.h. die Integration von Preisen aus externen Systemen in Echtzeit, genau so wie sie auf den Handelsservern der Makler implementiert sind.

    Im Gegensatz zu Expert Advisors, Indikatoren und Skripten sind Dienste nicht an ein bestimmten Chart gebunden. Solche Anwendungen laufen im Hintergrund und werden beim Start des Terminals automatisch gestartet (es sei denn, eine solche Anwendung wurde erzwungenermaßen gestoppt).

    Dienste können von einem neuen Abschnitt im Navigatorfenster aus verwaltet werden:





    So erstellen Sie die Dienste
    Um die Vorlage eines Dienstes zu erstellen, verwenden Sie die entsprechende Option des MQL5 Assistenten. Die Dienste haben einen Einstiegspunkt Onstart, ähnlich wie Skripte. Hier können Sie eine endlose Datenempfangs- und -bearbeitungsschleife mit Netzwerkfunktionen implementieren.

    So starten Sie die Dienste
    Um mehrere Kopien von Expert Advisors oder Indikatoren mit unterschiedlichen Parametern auszuführen, müssen diese auf verschiedenen Charts gestartet werden. In diesem Fall werden verschiedene Programminstanzen erstellt, die dann unabhängig voneinander arbeiten. Die Dienste sind nicht an einen Chart gebunden, daher wurde ein spezieller Mechanismus für das Erstellen einer Instanz eines Dienstes implementiert.

    Wählen Sie einen Dienst im Navigator aus und klicken Sie in dessen Kontextmenü auf "Dienst hinzufügen". Dies öffnet einen standardmäßigen MQL5-Programmdialog, in dem Sie den Handel und den Zugriff auf Signale aktivieren/deaktivieren sowie die Parameter einstellen können.




    Die Instanz eines Dienstes kann über ein entsprechendes Menü gestartet und gestoppt werden. Um alle Instanzen zu verwalten, verwenden Sie das Menü der Dienste.

  3. Ein Lernprogramm wurde implementiert.

    Die neuen Merkmale helfen Anfängern dabei zu lernen, was man mit der Plattform alles machen kann. Wir haben über 100 interaktive Tipps zu den wichtigsten Funktionen der Plattform hinzugefügt.

    • Tipps werden nahtlos als Fortschrittsbalken auf der Symbolleiste angezeigt und lenken den Benutzer nicht ab.
    • Tipps erscheinen nur für die Aktionen, die Sie noch nie auf der Plattform durchgeführt haben.
    • Alle Tipps enthalten interaktive Links, über die Sie zu den relevanten Elementen der Schnittstelle navigieren können. So kann beispielsweise ein Handelsdialog oder ein Menü mit dem gewünschten Programm direkt vom Tipp aus gestartet werden.

    Der ausgefüllte Bereich des Fortschrittsbalkens erhöht sich, wenn Sie geeignete Aktionen durchführen und das Training fortsetzen.




  4. Die Handelskontenhistorie kann als Positionen dargestellt werden. Die Plattform sammelt Daten über die Transaktionen (Deals), die sich auf die Position beziehen (Eröffnung, Volumenzunahme, teilweises oder vollständiges Schließen) und gruppiert die Informationen in einem einzigen Datensatz. So können Sie auf Positionsdetails zugreifen: Zeit der Eröffnung und des Schließens, Volumen, Preis und Ergebnis. Diese effiziente Präsentationsform steht nun in Berichten der Historie zur Verfügung, die in Dateien exportiert werden.




  5. Hinzugefügt wurde ein neues API, das das Abrufen MetaTrader 5 Terminaldaten durch Anwendungen ermöglicht, die die Sprache R verwenden.

    Wir haben ein spezielles Paket für MetaTrader vorbereitet. Es enthält eine DLL, für die Interaktion zwischen R und dem MetaTrader 5 Terminal, inkl. Dokumentation und Hilfsdateien. Wir schließen die Paketregistrierung im CRAN Repository ab, danach wird es zum Download und zur Installation zur Verfügung stehen.




    Das Paket kann mit einem speziellen Befehl installiert werden:
    R CMD INSTALL --build MetaTrader

    Die folgenden Befehle zur Datenanforderung sind verfügbar:

    • MT5Initialize initialisiert und stellt die Verbindung mit dem MetaTrader 5 Terminal her. Bei Bedarf wird das Terminal während der Befehlsausführung gestartet.
    • MT5Shutdown deinstalliert und trennt die Verbindung vom MetaTrader 5.
    • MT5Version ruft die Terminalversion MetaTrader 5 ab.
    • MT5TerminalInfo ruft den Status und die Parameter der Terminalverbindung zum Server eines Brokers ab (Kontonummer und Serveradresse).
    • MT5WaitTerminal wartet auf das MetaTrader 5 Terminal, um sich mit dem Server eines Brokers zu verbinden.
    • MT5CopyTicksFrom(symbol, from, count, flags) kopiert die angegebene Anzahl von Ticks ab dem angegebenen Datum. Der Zeitpunkt wird in Millisekunden seit 01.01.1970 angegeben.
    • MT5CopyTicksRange(Symbol, from, to, flags) kopiert Ticks aus dem angegebenen Zeitraum. Die Zeitpunkte werden seit 01.01.1970 in Millisekunden angegeben.
    • MT5CopyRatesFrom(Symbol, timeframe, from, count) kopiert die angegebene Anzahl von Ein-Minuten-Balken ab dem angegebenen Datum. Der Zeitpunkt wird in Sekunden seit dem 01.01.1970 angegeben.
    • MT5CopyRatesFromPos(symbol, timeframe, start_pos, count) kopiert Ein-Minuten-Balken von der angegebenen Position relativ zum letzten Balken.
    • MT5CopyRatesFromRange(Symbol, timeframe, date_from, date_to) kopiert die entsprechenden Balken des angegebenen Zeitraums. Der Zeitpunkt wird in Sekunden seit dem 01.01.1970 angegeben.

    Die Liste der unterstützten Befehle wird weiter ergänzt.

  6. Optimierter Dialog Close By zum Schließen einer Position durch eine entgegengesetzte Position. Nun wird der Dialog auch bei einer großen Anzahl von offenen Positionen nicht verlangsamt.
  7. Behoben wurde ein Berechnungsfehler bei synthetischen Symbolen, aufgrund dessen Daten gelegentlich übersprungen werden konnten.
  8. Wenn ein nutzerdefiniertes Symbol gelöscht wird, werden nun auch Dateien mit der Historie der Ticks und Balken gelöscht. Dadurch wird das Aufhäufen ungenutzter Daten auf der Festplatte vermieden.
  9. Korrigiert wurde die Darstellung der Suchergebnisse auf Bildschirmen mit hoher DPI-Auflösung.

MQL5

  1. Integrierter Zugriff auf die Daten des Wirtschaftskalenders aus MQL5-Programmen.

    Neue Funktionen

    CalendarCountryById — Anrufen der Länderbeschreibung auf Grund des Identifikators.
    bool CalendarCountryById(
       const long           country_id,    // Länder-ID
       MqlCalendarCountry&  country        // Länderbeschreibung
       );
    
    CalendarEventById — Abrufen der Ereignisbeschreibung auf Grund des Identifikators.
    bool CalendarEventById(
       const long           event_id,      // Ereignis-ID
       MqlCalendarEvent&    event          // Ereignisbeschreibung
       );
    
    CalendarValueById — Abrufen der Wertbeschreibung des Ereignisses auf Grund des Identifikators.
    bool CalendarValueById(
       const long           value_id,      // Werte-ID
       MqlCalendarValue&    value          // Wertbeschreibung
       );
    
    CalendarEventByCountry — Abrufen eines Arrays der verfügbaren Ereignisse eines Landes.
    bool CalendarEventByCountry(
       string               country_code,  // Länder-Code
       MqlCalendarEvent&    events[]       // Array der Ereignisse
       );
    
    CalendarEventByCurrency — Abrufen eines Arrays der verfügbaren Ereignisse, die eine Währung beeinflussen.
    bool CalendarEventByCurrency(
       string               currency,      // Währung
       MqlCalendarEvent&    events[]       // Array der Ereignisse
       );
    
    CalendarValueHistoryByEvent — Abrufen eines Arrays mit den Werten einer angegebenen Zeitspanne, nach dem Ereignis-Identifikator.
    bool CalendarValueHistoryByEvent(
       ulong                event_id,      // Ereignis-ID
       MqlCalendarValue&    values[],      // Array der Werte
       datetime             datetime_from, // Anfangszeitpunkt der Zeitspanne
       datetime             datetime_to=0  // Endzeitpunkt der Zeitspanne
       );
    
    CalendarValueHistory — Abrufen eines Arrays von Werten der angegebenen Zeitspanne mit allen Ereignissen, gefiltert nach Land und/oder Währung.
    bool CalendarValueHistory(
       MqlCalendarValue&    values[],          // Array der Werte
       datetime             datetime_from,     // Anfangszeitpunkt der Zeitspanne
       datetime             datetime_to=0,     // Endzeitpunkt der Zeitspanne
       string               country_code=NULL, // Länder-Code
       string               currency=NULL      // Währung
       );
    
    CalendarValueLastByEvent — Abrufen eines Array der letzten Ereigniswerte nach Identifikator. Diese Funktion ermöglicht das Abrufen der Werte, die seit der letzten Anforderung erschienen sind. Für diesen Vorgang wird zusätzlich der In/Out-Parameter "change_id" verwendet.

    Bei jeder Änderung der Kalenderdatenbank wird die Eigenschaft "change_id" (die letzte Änderungskennung) aktualisiert. Bei der Datenanfrage geben Sie "change_id" an und das Terminal gibt Ereignisse zurück, die nach dieser Zeit aufgetreten sind, sowie den aktuellen Wert "change_id", der für die nächste Anfrage verwendet werden kann. Geben Sie beim ersten Funktionsaufruf für "change_id" Null an: Die Funktion gibt keine Ereignisse zurück, sondern die aktuelle "change_id" für weitere Anfragen.
    bool CalendarValueHistory(
       ulong                event_id,          // Ereignis-ID
       ulong&               change_id,         // letzte Änderungs-ID des Kalenders
       MqlCalendarValue&    values[]           // Array der Werte
       );
    
    CalendarValueLast — Abrufen eines Arrays der letzten Werte aller Ereignisse, gefiltert nach Land und/oder Währung. Diese Funktion ermöglicht das Abrufen der Werte, die seit der letzten Anforderung erschienen sind. Ähnlich wie bei CalendarValueLastByEvent wird die Eigenschaft "change_id" für die Anforderung verwendet.
    bool CalendarValueHistory(
       ulong                event_id,          // Ereignis-ID
       ulong&               change_id,         // letzte Änderungs-ID des Kalenders
       MqlCalendarValue&    values[],          // Array der Werte
       string               country_code=NULL, // Länder-Code
       string currency=NULL                    // Währung
       );
    

    Neue Strukturen

    MqlCalendarCountry — Beschreibung der Länder.
    struct MqlCalendarCountry
      {
       ulong             id;                        // Länder-ID in ISO 3166-1
       string            name;                      // Text-Name des Landes
       string            code;                      // Code-Name des Landes in ISO 3166-1 alpha-2
       string            currency;                  // Währungscode des Landes
       string            currency_symbol;           // Symbol/Zeichen der Landeswährung
       string            url_name;                  // Ländername, der in der URL von mql5.com verwendet wird
      };
    
    MqlCalendarEvent — Ereignisbeschreibung
    struct MqlCalendarEvent
      {
       ulong                          id;           // Ereignis-ID
       ENUM_CALENDAR_EVENT_TYPE       type;         // Ereignis-Typ
       ENUM_CALENDAR_EVENT_SECTOR     sector;       // Sektor, zu dem das Ereignis gehört
       ENUM_CALENDAR_EVENT_FREQUENCY  frequency;    // Häufigkeit der Ereignisveröffentlichung
       ENUM_CALENDAR_EVENT_TIMEMODE   time_mode;    // Zeitmodus der Ereignisveröffentlichung
       ulong                          country_id;   // Länder-ID
       ENUM_CALENDAR_EVENT_UNIT       unit;         // Einheit der Ereigniswerte
       ENUM_CALENDAR_EVENT_IMPORTANCE importance;   // Wichtigkeit des Ereignisses
       ENUM_CALENDAR_EVENT_MULTIPLIER multiplier;   // Multiplikator der Wichtigkeit des Ereignisses
       uint                           digits;       // Dezimalstellen des Ereigniswertes
       string                         source_url;   // URL der Quelle
       string                         event_code;   // Ereignis-Code
       string                         name;         // Text-Name des Ereignisses in der Sprache des Terminals
      };
    
    MqlCalendarValue — Wertbeschreibung des Ereignisses.
    struct MqlCalendarValue
      {
       ulong             id;                        // Werte-ID
       ulong             event_id;                  // Ereignis-ID
       datetime          time;                      // Datum und Zeit des Ereignisses
       datetime          period;                    // Zeitperiode, für den das Ereignis veröffentlicht wird
       int               revision;                  // Revision des veröffentlichten Indikators in Relation zur Berichtsperiode
       long              actual_value;              // aktueller Ereigniswert
       long              prev_value;                // vorheriger Ereigniswert
       long              revised_prev_value;        // revidierter, vorheriger Ereigniswert
       long              forecast_value;            // prognostizierter Ereigniswert
       ENUM_CALENDAR_EVENT_IMPACRT impact_type;     // mögliche Auswirkung auf den Währungskurs
      };
    

    Neue Enumerationen

    enum ENUM_CALENDAR_EVENT_FREQUENCY
      {
       CALENDAR_FREQUENCY_NONE            =0,   // nicht bekannt
       CALENDAR_FREQUENCY_WEEK            =1,   // wöchentlich
       CALENDAR_FREQUENCY_MONTH           =2,   // monatlich
       CALENDAR_FREQUENCY_QUARTER         =3,   // vierteljährlich
       CALENDAR_FREQUENCY_YEAR            =4,   // jährlich
       CALENDAR_FREQUENCY_DAY             =5,   // täglich
      };
    
    enum ENUM_CALENDAR_EVENT_TYPE
      {
       CALENDAR_TYPE_EVENT                =0,   // Ereignis (Sitzung, Rede etc.)
       CALENDAR_TYPE_INDICATOR            =1,   // Indikator
       CALENDAR_TYPE_HOLIDAY              =2,   // Feiertag
      };
    
    enum ENUM_CALENDAR_EVENT_SECTOR
      {
       CALENDAR_SECTOR_NONE               =0,   // kein Sektor bestimmt
       CALENDAR_SECTOR_MARKET             =1,   // Markt
       CALENDAR_SECTOR_GDP                =2,   // BIP
       CALENDAR_SECTOR_JOBS               =3,   // Arbeitsstellen
       CALENDAR_SECTOR_PRICES             =4,   // Preise
       CALENDAR_SECTOR_MONEY              =5,   // Geld
       CALENDAR_SECTOR_TRADE              =6,   // Handel
       CALENDAR_SECTOR_GOVERNMENT         =7,   // Regierung
       CALENDAR_SECTOR_BUSINESS           =8,   // Geschäft
       CALENDAR_SECTOR_CONSUMER           =9,   // Verbraucher
       CALENDAR_SECTOR_HOUSING            =10,  // Wohnen
       CALENDAR_SECTOR_TAXES              =11,  // Steuern
       CALENDAR_SECTOR_HOLIDAYS           =12,  // Feiertage
      };
      
    enum ENUM_CALENDAR_EVENT_IMPORTANCE
      {
       CALENDAR_IMPORTANCE_NONE           =0,   // nicht bestimmt
       CALENDAR_IMPORTANCE_LOW            =1,   // niedrig
       CALENDAR_IMPORTANCE_MODERATE       =2,   // mittel
       CALENDAR_IMPORTANCE_HIGH           =3,   // hoch
      };
    
    enum ENUM_CALENDAR_EVENT_UNIT
      {
       CALENDAR_UNIT_NONE                 =0,   // ohne Einheit
       CALENDAR_UNIT_PERCENT              =1,   // Prozent
       CALENDAR_UNIT_CURRENCY             =2,   // Landeswährung
       CALENDAR_UNIT_HOUR                 =3,   // Anzahl der Stunden
       CALENDAR_UNIT_JOB                  =4,   // Anzahl der Arbeitsstellen
       CALENDAR_UNIT_RIG                  =5,   // Anzahl der Förderanlagen
       CALENDAR_UNIT_USD                  =6,   // US-Dollar
       CALENDAR_UNIT_PEOPLE               =7,   // Anzahl der Leute
       CALENDAR_UNIT_MORTGAGE             =8,   // Anzahl der Hypotheken
       CALENDAR_UNIT_VOTE                 =9,   // Anzahl der Stimmen
       CALENDAR_UNIT_BARREL               =10,  // Anzahl der Barrels
       CALENDAR_UNIT_CUBICFEET            =11,  // Volumen in Kubikfuß
       CALENDAR_UNIT_POSITION             =12,  // Anzahl der Arbeitsstellen
       CALENDAR_UNIT_BUILDING             =13   // Anzahl der Gebäude
      };
      
    enum ENUM_CALENDAR_EVENT_MULTIPLIER
      {
       CALENDAR_MULTIPLIER_NONE           =0,   // kein Multiplikator
       CALENDAR_MULTIPLIER_THOUSANDS      =1,   // Tausend
       CALENDAR_MULTIPLIER_MILLIONS       =2,   // Million
       CALENDAR_MULTIPLIER_BILLIONS       =3,   // Milliarde
       CALENDAR_MULTIPLIER_TRILLIONS      =4,   // Billion
      };
      
    enum ENUM_CALENDAR_EVENT_IMPACRT
      {
       CALENDAR_IMPACT_NA                 =0,   // nicht vorhanden
       CALENDAR_IMPACT_POSITIVE           =1,   // positive
       CALENDAR_IMPACT_NEGATIVE           =2,   // negative
      };
    
    enum ENUM_CALENDAR_EVENT_TIMEMODE
      {
       CALENDAR_TIMEMODE_DATETIME         =0,   // die exakte Veröffentlichungszeit der Quelle
       CALENDAR_TIMEMODE_DATE             =1,   // Das Ereignis dauert den ganzen Tag
       CALENDAR_TIMEMODE_NOTIME           =2,   // die Quelle veröffentlicht keinen Ereigniszeitpunkt
       CALENDAR_TIMEMODE_TENTATIVE        =3,   // die Quelle veröffentlicht nur das Datum und keinen genauen Zeitpunkt der Veröffentlichung
      };
    

    Neue Fehlernummern

    ERR_CALENDAR_MORE_DATA             =5400,   // das Array ist für alle Ergebnisse zu klein (Werte, die hineinpassen, werden zurückgegeben)
    ERR_CALENDAR_TIMEOUT               =5401,   // Timeout für das Warten auf die Antwort der Kalenderdaten
    ERR_CALENDAR_NO_DATA               =5402,   // Daten nicht gefunden
    

  2. Korrekturen und Verbesserungen der Betriebsgeschwindigkeit in Bezug auf die Historie von Ticks und Balken.
  3. Korrekturen und signifikante Verbesserungen der Betriebsgeschwindigkeit im Zusammenhang mit Funktionen zur Änderung der Historie von Ticks und Balken von nutzerdefinierten Handelssymbolen, CustomTicks* und CustomRates*.
  4. Neue Funktionen zur Datenkonvertierung.

    CharArrayToStruct weist einen Array vom Typ uchar einer POD-Struktur zu.
    bool  CharArrayToStruct(
       void&         struct_object,    // Struktur
       const uchar&  char_array[],     // Array
       uint          start_pos=0       // Startposition im Array
       );
    
    StructToCharArray weist einer POD-Struktur einem Array vom Typ uchar zu.
    bool  StructToCharArray(
       const void&  struct_object,     // Struktur
       uchar&       char_array[],      // Array
       uint         start_pos=0        // Startposition im Array
       );
    

  5. Hinzugefügt wurde die Funktion MathSwap, mit der Reihung der Bytes von ushort, uint und ulong zu ändern.
    ushort MathSwap(ushort value);
    uint   MathSwap(uint   value);
    ulong  MathSwap(ulong  value);
    

  6. Hinzugefügt wurden Netzwerkfunktionen, um TCP-Verbindungen zu entfernten Hosts über System-Sockets herzustellen:

    • SocketCreate erstellt einen Socket mit angegebenen Flags und gibt dessen Handle zurück.
    • SocketClose schließt den Socket.
    • SocketConnect verbindet sich mit dem Server, inkl. einer Timeout-Steuerung.
    • SocketIsConnected prüft, ob der Socket aktuell verbunden ist.
    • SocketIsReadable ermittelt die Anzahl der Bytes, die aus dem Socket gelesen werden können.
    • SocketIsWritable prüft, ob das Schreiben von Daten auf diesen Socket zum aktuellen Zeitpunkt möglich ist.
    • SocketTimeouts setzt die Zeit eines Timeouts für den Empfang und das Senden von Daten für das Objekt eines System-Sockets.
    • SocketRead liest Daten von einem Socket.
    • SocketSend schreibt Daten in einen Socket.
    • SocketTlsHandshake initiiert eine sichere TLS (SSL) Verbindung mit dem angegebenen Host über das TLS-Handshake Protokoll.
    • SocketTlsCertificate erhält Informationen über das Zertifikat, das für die sichere Netzwerkverbindung verwendet wird.
    • SocketTlsRead liest Daten von einer sicheren TLS-Verbindung.
    • SocketTlsReadAvailable liest alle verfügbaren Daten von einer sicheren TLS-Verbindung.
    • SocketTlsSend sendet Daten über eine sichere TLS-Verbindung.

    Die Adresse des Hosts, zu dem die Verbindung über Netzwerkfunktionen hergestellt wird, muss in den Terminaleinstellungen explizit zur Liste der zulässigen Adressen hinzugefügt werden.

    Neue Fehlernummern wurden für die Arbeit mit den Netzwerkfunktionen hinzugefügt:

    • ERR_NETSOCKET_INVALIDHANDLE (5270): Ungültiges Socket-Handle an die Funktion übergeben.
    • ERR_NETSOCKET_TOO_MANY_OPENED (5271): Zu viele Sockets sind offen (maximal 128)
    • ERR_NETSOCKET_CANNOT_CONNECT (5272): Fehler bei der Verbindung zum entfernten Host
    • ERR_NETSOCKET_IO_ERROR (5273): Fehler beim Senden/Empfangen der Daten vom Socket
    • ERR_NETSOCKET_HANDSHAKE_FAILED (5274): Fehler beim sicheren Verbindungsaufbau (TLS-Handshake)
    • ERR_NETSOCKET_NO_CERTIFICATE (5275) — keine Daten über das Zertifikat für die sichere Verbindung

  7. Hinzugefügt wurden neue Funktionen für Zeichenkettenoperationen:

    StringReserve kehrt den Speicherpuffer der angegebenen Größe einer Zeichenkette um.
    bool  StringReserve(
       string&        string_var,          // Zeichenkette
       uint           new_capacity         // Puffergröße für die Zeichenkette
       );
    
    StringSetLength legt die Anzahl der Buchstaben einer Zeichenkette fest.
    bool  StringSetLength(
       string&        string_var,          // Zeichenkette
       uint           new_length           // neue Länge der Zeichenkette
       );
    

  8. Hinzugefügt wurden neue Funktionen für Arrays:

    ArrayRemove entfernt die angegebene Anzahl der Elemente aus dem Array ab dem angegebenen Index.
    bool  ArrayRemove(
       void&         array[],              // Array irgendeines Typs
       uint          start,                // Startindex für das Entfernen
       uint          count=WHOLE_ARRAY     // Anzahl der Elemente
       );
    
    ArrayInsert fügt in das Empfängerarray ab dem angegebenen Index eine bestimmte Anzahl von Elementen aus einem Quellarray ein.
    bool  ArrayInsert(
       void&         dst_array[],          // Zielarray
       const void&   src_array[],          // Quellarray
       uint          dst_start,            // Index des Zielarrays, ab dem eingefügt werden soll
       uint          src_start=0,          // Index im Quellarray, ab dem aus dem Quellarray kopiert werden soll
       uint          count=WHOLE_ARRAY     // Anzahl der einzufügenden Elemente
       );
    
    ArrayReverse kehrt in einem Array eine angegebene Anzahl von Elemente ab dem angegebenen Index um.
    bool  ArrayReverse(
       void&         array[],              // Array irgendeines Typs
       uint          start=0,              // Startindex der Umkehrung
       uint          count=WHOLE_ARRAY     // Anzahl der Elemente
       );
    

  9. Den Funktionen CustomRatesUpdate, CustomRatesReplace, CustomTicksAdd und CustomTicksReplace wurde der neue Parameter "uint count" hinzugefügt. Er ermöglicht die Angabe der Anzahl der Elemente des übergebenen Arrays, die von der Funktion verwendet werden sollen. Der Wert WHOLE_ARRAY wird standardmäßig für den Parameter verwendet. Das bedeutet, dass das gesamte Array verwendet wird.
  10. Hinzugefügt wurde die Funktion CustomBookAdd, um den Status der Markttiefe für ein benutzerdefiniertes Symbol zu übergeben. Die Funktion erlaubt die Übertragung der Markttiefe als ob die Preise vom Server des Brokers kommen.
    int  CustomBookAdd(
       const string        symbol,            // Symbolname
       const MqlBookInfo&  books[]            // Array der Beschreibungen der Elemente der Markttiefe (DOM)
       uint                count=WHOLE_ARRAY  // Anzahl der zu verwendenden Elemente
       );
    
  11. Hinzugefügt wurde Überladungen der Funktion CustomSymbolCreate. Dies ermöglicht das Erstellen eines benutzerdefinierten Handelssymbols, das auf einem bestehenden Symbol basiert. Nach dem Erstellen kann jede Symboleigenschaft mit entsprechenden Funktionen bearbeitet werden.
    bool  CustomSymbolCreate(
       const string        symbol_name,       // Name des nutzerdefiniertes Symbol
       const string        symbol_path="",    // Name der Gruppe, in der das Symbol erzeugt wird
       const string        symbol_origin=NULL // Symbolname, auf dessen Basis das nutzerdefinierte Symbole erstellt wird
       );
    
    Der Name des Symbols, dessen Eigenschaften für das nutzerdefinierte Symbol kopiert werden sollen, wird im Parameter "symbol_origin" angegeben.

  12. Die Funktion StringToTime, die die Zeichenkette mit Datum/Uhrzeit in einen Datumszeitwert umwandelt, wurde aktualisiert. Jetzt unterstützt sie folgenden Datumsformate:

    • yyyy.mm.dd [hh:mi]
    • yyyy.mm.dd [hh:mi:ss]
    • yyyymmdd [hh:mi:ss]
    • yyyymmdd [hhmiss]
    • yyyy/mm/dd [hh:mi:ss]
    • yyyy-mm-dd [hh:mi:ss]

  13. Neue Eigenschaften der TERMINAL_VPS in der Enumeration ENUM_TERMINAL_INFO_INTEGER; sie zeigt, dass das Terminal auf dem Server MetaTrader Virtual Hosting (MetaTrader VPS) läuft. Wenn eine Anwendung auf einem Hosting-Server läuft, können Sie alle ihre visuellen Funktionen deaktivieren, da der virtuelle Server keine grafische Benutzeroberfläche hat.
  14. Die neuen Eigenschafte SYMBOL_EXIST in der Enumeration ENUM_SYMBOL_INFO_INTEGER bedeutet, dass das Symbol mit diesem Namen gibt.
  15. Die Typisierung bei der Verwendung von vorab-deklarierten Template-Funktionen wurde korrigiert.
  16. Hinzugefügt wurde einer Neu-Initialisierung der Indikatoren beim Wechsel des Handelskontos.
  17. Optimierte StringSplit.
  18. Fehler in der Standardbibliothek behoben.

Tester

  1. Hinzugefügt wurde die Funktion TesterStop — routinemäßige frühzeitiges Beenden eines Expert Advisors auf einen Testagenten. Jetzt können Sie ein Testende erzwingen, nachdem eine angegebene Anzahl von Verlustpositionen, ein vorgegebener Drawdownwert oder anderes Kriterien erreicht wurde.

    Die mit dieser Funktion beendete Tests gelten als erfolgreich. Nach dem Funktionsaufruf wird die während des Tests erhaltene Handelshistorie und alle Handelsstatistiken an das Terminal übergeben.

  2. Deaktivierte wurde die Möglichkeit, Expert Advisors in der MQL5 Cloud Network im Modus anhand realer Ticks zu testen und zu optimieren. Dieser Modus kann nur von lokalen Agenten und lokalen Netzwerkfarmen verwendet werden.
  3. Verbesserte Arbeit mit Indikatoren bei der visuellen Prüfung. Jetzt werden Preisdiagramm und Indikatorlinien synchron gezeichnet, auch bei maximaler Visualisierungsgeschwindigkeit.
  4. Optimiertes und deutlich beschleunigtes Testen und Optimieren.
  5. Das Debugging von Indikatoren mit historischen Daten wurde korrigiert. Nun können die Funktionen OnInit und OnDeinit eines Indikators korrekt debuggt werden.
  6. Schnellerer Zugriff auf historische Daten beim Testen von Expert Advisors mit verschiedenen Währungen.
  7. Behoben wurde ein gelegentliches Einfrieren des visuellen Testers während des Debuggens mit historischen Daten.
  8. Schnellerer Start der Optimierungsläufe bei der Bearbeitung eines Aufgabenpakets durch einen Agenten.
  9. Die Richtlinie zur Verteilung von Aufgabenpaketen an die Testagenten wurde geändert. Die Paketgröße wurde erhöht und damit die Belastung des Netzwerkes deutlich reduziert.
  10. Das Verhalten der Optionen, die die Verwendung von lokalen, Netzwerk- und Cloud-Agenten ermöglichen, wurde geändert. Wenn Sie nun die Optionen ausschalten, wird die Bearbeitung der erhaltenen Aufgaben normal beendet, aber neuen Aufgaben werden nicht mehr erteilt. In früheren Versionen war das Verhalten ähnlich dem Befehl "Disable", der den Agentenbetrieb sofort beendete.




MetaEditor

  1. Hinzugefügt wurde die Unterstützung von Nicht-ANSI-Zeichen im Debugger. Jetzt werden die Ausdrücke korrekt angezeigt, auch wenn der Variablenname in Kyrillisch angegeben ist.
  2. Korrigiert wurde die Anzeige der Suchergebnisse auf Bildschirmen mit hoher DPI-Auflösung.

Die Übersetzung der Benutzeroberfläche ins Kroatische wurde hinzugefügt.

Die Dokumentation wurde aktualisiert.