Was ist neu im MetaTrader 5

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

24 März 2023
MetaTrader 5 Build 3660: Verbesserungen und Korrekturen

Terminal

  1. Gelegentliche Fehler bei der Erstellung von Plattformprotokollen wurden behoben.
  2. Aktualisierte Übersetzungen der Nutzeroberfläche.

MQL5

  • Die Überprüfung globaler Variablen wurde korrigiert. Bei der Deklaration identischer Variablen in verschiedenen Namensräumen gab der Compiler eine fehlerhafte Warnung aus, dass die Variable bereits deklariert sei.

Web Terminal

  1. Die Nutzeroberfläche wurde ins Portugiesische übersetzt. Das Webterminal ist jetzt in 12 Sprachen verfügbar.
  2. Der Dialog zum Hinzufügen des Indikators Standard Deviation (Standardabweichung) wurde korrigiert.
  3. Kleinere Korrekturen und Verbesserungen.
17 März 2023
MetaTrader 5 Build 3640: Web-Terminal in 11 Sprachen

Web Terminal

  1. Übersetzungen des UI in 10 weit verbreiteten Sprachen wurde hinzugefügt: Vereinfachtes und traditionelles Chinesisch, Französisch, Deutsch, Italienisch, Japanisch, Koreanisch, Spanisch, Türkisch und Russisch. Diese Liste wird in künftigen Versionen noch erweitert werden. Um die Sprache zu wechseln, verwenden Sie das entsprechende Menü:


    Webterminal-Schnittstelle in 11 Sprachen verfügbar


  2. Optimierter Verbindungsmechanismus zum Handelsserver.

MQL5

  1. MQL5: Hinzugefügt wurden die Flags COPY_TICKS_VERTICAL und COPY_RATES_VERTICAL für die Methoden CopyTicks, CopyTicksRange und CopyRates.

    Standardmäßig werden Ticks und Zeitreihendaten entsprechend einer horizontalen Achse in die Matrix kopiert, d. h. die Daten werden am rechten Ende der Zeilen hinzugefügt. Für das Training von ONNX-Modelllaufaufgaben muss eine solche Matrix transponiert werden, um die Eingabedaten einzugeben:

    const long   ExtOutputShape[] = {1,1};    // Ausgangsform des Modells
    const long   ExtInputShape [] = {1,10,4}; // Eingangsform des Modells
    #resource "Python/model.onnx" as uchar ExtModel[]// das Modell als Resource
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- get 10 bars
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC,2,10))
          return(-1);
    //--- input a set of OHLC vectors
       matrix x_norm=rates.Transpose();
       vector m=x_norm.Mean(0);               
       vector s=x_norm.Std(0);
       matrix mm(10,4);
       matrix ms(10,4);

    Durch die Angabe des zusätzlichen Flags COPY_RATES_VERTICAL (bzw. COPY_TICKS_VERTICAL für Ticks) beim Aufruf der Methode können Sie die zusätzliche Datentransposition vermeiden:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- get 10 bars
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC|COPY_RATES_VERTICAL,2,10))
          return(-1);
    //--- input a set of OHLC vectors
  2. Neuer Wert in der Enumeration ENUM_CHART_PROPERTY_INTEGER — CHART_SHOW_TRADE_HISTORY. Die Eigenschaft steuert die Anzeige von Handelsgeschäften aus der Handelshistorie im Chart. Verwenden Sie die Funktionen ChartGetInteger und ChartSetInteger, um die Eigenschaft zu erhalten und zu setzen. Weitere Einzelheiten über die Anzeige der Trades im Chart finden Sie in der Dokumentation der Plattform.

MetaEditor

  • Das Einfrieren der Schnittstelle, das unter bestimmten Bedingungen während der Dateikompilierung auftreten konnte, wurde behoben.

Terminal

  • Behoben wurde ein Fehler in den Absturzprotokollen.
10 März 2023
MetaTrader 5 Build 3620: Verbesserungen am Web-Terminal, ONNX-Unterstützung und schnelle Matrix-Multiplikationen in MQL5

Terminal

  1. Die Berechnung des Gesamtgewinns in den Handelsberichten wurde korrigiert.
  2. Aktualisierte Daten für Handelsinstrumente, die über das Fenster Market Watch verfügbar sind.
  3. Korrigiert wurde der Start der Handelsplattform unter Wine 7.0.1 auf Linuxsystemen
  4. Das Hinzufügen von Symbolen zur Markttiefe über die Suchleiste wurde korrigiert. Ein über die Beschreibung gefundenes Symbol konnte nicht durch Anklicken der entsprechenden Zeile in die Liste aufgenommen werden.

MQL5

  1.  Die Unterstützung für Operationen mit ONNX-Modellen (Open Neural Network Exchange) wurde hinzugefügt.

    ONNX ist ein Open-Source-Format für Modelle des maschinellen Lernens. Dieses Format wird von vielen Plattformen unterstützt, darunter Chainer, Caffee2 und PyTorch. Erstellen Sie ein ONNX-Modell mit Hilfe spezieller Tools, integrieren Sie es in Ihre MQL5-Anwendung und nutzen Sie es, um Handelsentscheidungen zu treffen.

    Beschreibungen aller unterstützten Funktionen finden Sie in der Dokumentation. Ein Beispiel für ein ONNX-Testmodell finden Sie unter „öffentliche Projekte“ im MetaEditor. Suchen Sie das Projekt ONNX.Price.Prediction in „Toolbox \ Öffent,iche Projekte“ und wählen Sie im Kontextmenü die Option Teilnehmen. Das Projekt wird auf Ihren Computer heruntergeladen und erscheint im Navigator:


    Ein Beispiel für die Arbeit mit einem ONNX-Modell in öffentlichen Projekten


    Kompilieren Sie das Projekt und lassen Sie es auf EURUSD H1 laufen, um das Ergebnis zu sehen.

    Neben dem Modell und dem MQL5-Code, der es ausführt, enthält das Projekt auch das Python-Skript PricePredictionTraining.py. Es zeigt, wie Sie selbst ein ONNX-Modell erstellen können. Um das Skript auszuführen, installieren Sie Python auf Ihrem Computer und die erforderlichen Module über die Eingabeaufforderung:

    python.exe -m pip install --upgrade pip
    python -m pip install --upgrade tensorflow
    python -m pip install --upgrade pandas
    python -m pip install --upgrade scikit-learn
    python -m pip install --upgrade matplotlib
    python -m pip install --upgrade tqdm
    python -m pip install --upgrade metatrader5
    python -m pip install --upgrade onnx==1.12
    python -m pip install --upgrade tf2onnx
    Anweisungen zur Verwendung von ONNX finden Sie in der Dokumentation.

  2. Unterstützung für General Matrix Multiplikation (GeMM) hinzugefügt. Dieser Algorithmus beschleunigt die Berechnungen auf einigen Prozessortypen durch parallelisierte Aufgaben und optimierte Nutzung der L1/L2/L3-Caches. Die Berechnungsgeschwindigkeit ist vergleichbar mit gängigen Paketen wie der Math Kernel Library (MKL) and OpenBLAS. Ausführliche Vergleichstests werden demnächst veröffentlicht.

    Der neue Algorithmus wird derzeit von der Methode matrix::GeMM unterstützt. Wenn Ihr Prozessor die Befehle AVX and FMA unterstützt (die meisten nach 2013 veröffentlichten Prozessoren unterstützen diese Befehle), wird der Algorithmus automatisch aktiviert.

  3.  Es wurde die Möglichkeit hinzugefügt, Matrizen und Vektoren zur einer DLL zu übertragen. Dies ermöglicht den Import von Funktionen, die die entsprechenden Typen verwenden, aus externen Variablen.

    Matrizen und Vektoren werden an eine DLL als Zeiger auf einen Puffer übergeben. Um zum Beispiel eine Matrix vom Typ float zu übergeben, muss der entsprechende Parameter der aus der DLL exportierten Funktion einen Pufferzeiger vom Typ float aufnehmen. Zum Beispiel:

    MQL5
    #import "mmlib.dll"
    bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta);
    #import
    C++
    extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
    Zusätzlich zu den Puffern sollten Sie Matrix- und Vektorgrößen für eine korrekte Verarbeitung übergeben.

  4. Die neue Funktion CopySeries zum Kopieren von synchronisierten Zeitreihen aus MqlRates in separate Arrays hinzugefügt.

    Die Funktion CopySeries ermöglicht es, mit einem einzigen Aufruf nur die erforderlichen Zeitreihen in verschiedene spezifizierte Arrays zu erhalten, wobei alle Zeitreihendaten synchronisiert werden. Das bedeutet, dass alle Werte in den resultierenden Arrays bei einem bestimmten Index N zum selben Balken des angegebenen Symbol/Zeitrahmenpaares gehören. Daher muss der Programmierer die empfangenen Zeitreihen nicht zusätzlich mit der Eröffnungszeit der Balken synchronisieren.

    Im Gegensatz zu CopyRates, das den gesamten Satz von Zeitreihen als MqlRates-Array zurückgibt, ermöglicht die Funktion CopySeries, bestimmte erforderliche Zeitreihen in separaten Arrays zu erhalten. Dies kann durch die Angabe einer Kombination von Flags geschehen, um den Typ der Zeitreihe auszuwählen. Die Reihenfolge der an die Funktion übergebenen Arrays muss mit der Reihenfolge der Felder in der MqlRates-Struktur übereinstimmen:

    struct MqlRates
      {
       datetime time;         // period beginning time
       double   open;         // open price
       double   high;         // high price for the period
       double   low;          // low price for the period
       double   close;        // close price
       long     tick_volume;  // tick volume
       int      spread;       // spread
       long     real_volume;  // exchange volume
      }

    Wenn Sie also die Werte der Zeitreihen „time“, „close“ und „real_volume“ für die letzten 100 Balken des aktuellen Symbols/Zeitrahmens abrufen möchten, sollten Sie den folgenden Aufruf verwenden:

    datetime  time[];
    double    close[];
    long      volume[];
    CopySeries(NULL,0,0,100,COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_VOLUME_REAL,time,close,volume);
    

    Die Reihenfolge der Arrays „time, close, volume“ muss mit der Reihenfolge der Felder in der Struktur MqlRates übereinstimmen. Die Reihenfolge der Werte in der Maske rates_mask wird nicht berücksichtigt. Die Maske könnte auch folgendermaßen aussehen:

    COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE

    Beispiel

    //--- input parameters
    input datetime InpDateFrom=D'2022.01.01 00:00:00';
    input datetime InpDateTo  =D'2023.01.01 00:00:00';
    input uint     InpCount   =20;
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart(void)
      {
    //--- arrays to get timeseries from the Rates structure
       double   open[];
       double   close[];
       float    closef[];
       datetime time1[], time2[];
    //---request close prices to a double array
       ResetLastError();
       int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close);
       PrintFormat("1. CopySeries  returns %d values. Error code=%d", res1, GetLastError());
       ArrayPrint(close);
       
    
    //--- now also request open prices; use float array for close prices
       ResetLastError();
       int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef);
       PrintFormat("2. CopySeries  returns %d values. Error code=%d", res2, GetLastError());
       ArrayPrint(closef);
    //--- compare the received data
       if((res1==res2) && (time1[0]==time2[0]))
         {
          Print("  | Time             |    Open      | Close double | Close float |");
          for(int i=0; i<10; i++)
            {
             PrintFormat("%d | %s |   %.5f    |   %.5f    |   %.5f   |",
                         i, TimeToString(time1[i]), open[i], close[i], closef[i]);
            }
         }
    /*  Result
            1. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
            2. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
              | Time             |    Open      | Close double | Close float |
            0 | 2023.03.01 17:00 |   1.06660    |   1.06722    |   1.06722   |
            1 | 2023.03.01 18:00 |   1.06722    |   1.06733    |   1.06733   |
            2 | 2023.03.01 19:00 |   1.06734    |   1.06653    |   1.06653   |
            3 | 2023.03.01 20:00 |   1.06654    |   1.06520    |   1.06520   |
            4 | 2023.03.01 21:00 |   1.06520    |   1.06573    |   1.06573   |
            5 | 2023.03.01 22:00 |   1.06572    |   1.06649    |   1.06649   |
            6 | 2023.03.01 23:00 |   1.06649    |   1.06694    |   1.06694   |
            7 | 2023.03.02 00:00 |   1.06683    |   1.06675    |   1.06675   |
            8 | 2023.03.02 01:00 |   1.06675    |   1.06684    |   1.06684   |
            9 | 2023.03.02 02:00 |   1.06687    |   1.06604    |   1.06604   |
    */
      }
  5. Die Operation der Funktion OrderSend wurde korrigiert. Die Funktionsabfrage konnte ein falsches Auftragsticket zurückgeben, wenn das gleiche Konto gleichzeitig auf mehreren Plattformen verwendet wurde.
  6. Der Import von EX5-Bibliotheken wurde korrigiert. Ein Fehler trat auf, wenn der Name der importierten Bibliothek mit dem Namen der Datei übereinstimmte, in die sie importiert wurde.

MetaEditor

  1.  Das Senden von Push-Benachrichtigungen im Rahmen eines „shared projects“ wurde hinzugefügt. Mit der neuen Option können Nutzer über Änderungen in Projekteinstellungen und Dateien benachrichtigt werden. Um Benachrichtigungen zu aktivieren, geben Sie Ihre MetaQuotes-ID unter dem Abschnitt „Einstellungen \ Sicherheit“ Ihres titleMQL5.community-Profilstitle ein.


    Push-Benachrichtigungen über Projektaktualisierungen


  2. Aktualisierte Dateisymbole im Navigator. Neue, einfachere Metaphern werden sie verständlicher machen.

Tester

  1. Es wurde ein Fehler behoben, der dazu führte, dass der Eingabe-String-Parameter abgeschnitten wurde, wenn er das Zeichen „|“ enthielt.

MetaTrader 5 Web Terminal Build 3620

  1. Es wurden vorbereitete Farbvorlagen für die Webterminal-Schnittstelle hinzugefügt. Die Vorlagen wirken sich auf die Anzeige der Balken und Linien im Chart sowie auf die Preise im Market Watch und in der Kontodarstellung aus. Unser Designteam hat auf der Grundlage Ihrer Vorschläge und traditioneller Farbkombinationen Farbvorlagen vorbereitet.


    Neue Webterminal-Farbvorlagen


  2. Das Fenster für die Spezifikation von Symbolen wurde neu gestaltet. Die Daten der Handelsinstrumente wurden zur besseren Übersichtlichkeit in logische Blöcke gegliedert.


    Aktualisiertes Fenster für die Spezifikation von Handelsinstrumenten


  3. Das Eröffnen von Echtgeldkonten über das Webterminal wurde korrigiert. Der Server konnte nach dem Ausfüllen eines Registrierungsformulars einen Fehler zurückgeben.
  4. Ein Fehler im Handelsdialog wurde behoben. Wenn der Nutzer eine Position durch Drücken der X-Taste im Toolbox-Fenster schloss, während der Dialog zur Positionsänderung geöffnet war, wurde der Inhalt des Dialogs nicht zurückgesetzt. Nach der Aktualisierung wird der Dialog in diesem Fall automatisch auf einen neuen Modus für die Auftragserteilung zurückgesetzt.
  5. Die Anzeige des Feldes „Server“ im Kontoverwaltungsdialog wurde korrigiert.
  6. Die Anzeige des aktuellen Zeitrahmens in der Symbolleiste wurde korrigiert.
  7. Die Anzeige der Volumina in Bezug auf die Einheiten des Basiswerts im Handelsdialog wurde korrigiert.
  8. Die Änderung der Stop-Loss- und Take-Profit-Ebenen wurde korrigiert. Die Änderung eines der Werte kann unter bestimmten Bedingungen den zweiten Wert zurücksetzen.
  9. Die Anzeige von Warnungen vor Investitionsrisiken wurde korrigiert.
6 März 2023
MetaTrader 5 für iPhone/iPad: Verbesserte On-Chart-Handels- und Analysefunktionen
  1. Es wurde die Möglichkeit hinzugefügt, Stop- und Stop-Limit-Orders aus dem Chart heraus zu platzieren.

    In früheren Versionen waren nur Limit-Aufträge verfügbar. Wählen Sie den gewünschten Typ, indem Sie nacheinander auf die Schaltfläche im unteren Chartbereich drücken.


    Stop- und Stop-Limit-Aufträge vom Chart aus platzieren


  2. Es wurde die Möglichkeit hinzugefügt, vom Chart aus auf die Funktionen zum Schließen von Positionen oder zum Löschen von schwebenden Aufträgen zuzugreifen. Wählen Sie eine Position oder einen Auftrag im Chart aus, und der entsprechende Befehl wird im Paneel unten im Chart angezeigt:


    Positionen und Aufträge vom Chart aus verwalten


  3. Verbesserte Funktionsweise, die den rechten Rand des Preischarts verschiebt. Um zu verschieben, scrollen Sie einfach im Chart zum letzten Preis, bis eine vertikale Trennlinie erscheint. Bewegen Sie dann das Dreieck auf der unteren Chartskala:


    Ändern der Verschiebung des Charts durch Ziehen des Dreiecks an der unteren Skala


  4. Es wurde die Möglichkeit hinzugefügt, analytische Objekte im Chart zu kopieren. Dies ermöglicht eine schnellere Chartgestaltung. Öffnen Sie das Objektmenü mit einem langen Druck und wählen Sie "Kopieren":

    Kopien von analytischen Objekten erstellen


  5. Es wurde die Möglichkeit hinzugefügt, die Anzeige von Indikatoren auf verschiedenen Zeitrahmen zu verwalten. Wenn der Indikator für bestimmte Chartperioden nicht geeignet ist, kann er ausgeblendet werden, um Platz auf dem Bildschirm für andere Analysetools zu schaffen.


    Verwalten der Anzeige von Indikatoren in verschiedenen Zeitrahmen


  6. Die Anzeige von Symbolkommissionen im Instrumentenspezifikationsfenster wurde hinzugefügt.


    Ermitteln Sie den Provisionsbetrag in der Instrumentenspezifikation


  7. Link zur Passwortwiederherstellung hinzugefügt. Das Passwort eines Kontos kann nur über den jeweiligen Broker wiederhergestellt werden. Der Link zeigt die Kontaktdaten des Maklers an.


    Hilfe bei der Passwortwiederherstellung


  8. Es wurde die Möglichkeit hinzugefügt, einen Link zu an MQL5.community channel zu teilen.


    Teilen Sie einen Link zu Ihrem Kanal über die App


  9. Verbesserte Nutzerfreundlichkeit bei der Verbindung zu einem Konto mit einer Handelsbeschränkungen.

    Der Handel kann aus verschiedenen Gründen eingeschränkt werden: Login mit dem Investor-Passwort; eine Handelsvereinbarung wurde nicht akzeptiert; die Überprüfung des Brokers wurde nicht abgeschlossen und andere. Früher wurde der Grund für die Einschränkung der Handelsfunktionen nicht erklärt.

    Wenn der Handel eingeschränkt ist, ist die Schaltfläche zum Erteilen von Aufträgen im Bereich Handel ausgegraut. Wenn Sie darauf drücken, werden die entsprechenden Informationen und Empfehlungen angezeigt.


    Hilfreiche Informationen, wenn der Handel eingeschränkt ist


  10. Verbesserter Arbeitsablauf mit SSL-Zertifikaten, die für die erweiterte Authentifikation verwendet werden.

    Wenn sich der Nutzer mit einem Konto mit erweiterter Authentifizierung verbindet, zeigt die App nun eine kurze Beschreibung der erforderlichen Aktionen an.


    Verbessertes Arbeiten mit SSL-Zertifikaten


    Ein Zertifikat kann aus einer PFX-Datei importiert werden. Speichern Sie die benötigte Datei in der App Datei-App und verwenden Sie dann die Importfunktion im Startdialog.

    Es ist jetzt auch möglich, Zertifikate in Dateien zu importieren, was die Verwendung von Zertifikaten auf anderen Geräten ermöglicht. Gehen Sie dazu zu Einstellungen \ Zertifikate und wählen Sie im Zertifikatsmenü "Exportieren".

  11. Die Konstruktion von Preischarts wurde auf „Metal“ übertragen. Das ist die neuesten Generation der in Apple-Geräten verwendeten Grafik-API. Dadurch wird die Leistung beim Rendern des Charts, von Indikatoren und Objekten erheblich gesteigert.
  12. Feste Ersetzung der Stop-Loss- und Take-Profit-Ebenen in der Markttiefe. Bei FIFO-Konten werden die Stop-Levels automatisch in Übereinstimmung mit den Stop-Levels der bestehenden offenen Positionen für dasselbe Instrument gesetzt. Dieses Verfahren ist erforderlich, um die FIFO-Regel einzuhalten.
  13. Reaktivierung behoben. Wenn ein neues Angebot zurückkommt, hat der Nutzer eine kurze Frist, um die neuen Preise zu akzeptieren oder abzulehnen. Wird innerhalb des erforderlichen Zeitrahmens nichts unternommen, wird der Antrag automatisch abgelehnt und das Requote-Fenster geschlossen.
  14. Die Anzeige der Zeit im Chartbereich bei Verwendung des dunklen Oberflächenthemes wurde korrigiert.
16 Dezember 2022
MetaTrader 5 Build 3550: Verbesserungen und Korrekturen

MetaTrader 5 Client Terminal Build 3550

  1. Terminal: Aktualisierte Übersetzungen der Nutzeroberfläche.
  2. Korrekturen aufgrund von Absturzprotokollen.

MetaTrader 5 Web Terminal Build 3550

9 Dezember 2022
MetaTrader 5 Build 3540: 2FA/TOTP-Authentifizierung und verbesserte Marktbeobachtung im Webterminal

Web Terminal

  1. 2FA/TOTP-Authentifizierung mit Google Authenticator und ähnlichen Anwendungen hinzugefügt.

    Die 2FA/TOTP-Authentifizierung schützt ein Handelskonto vor unbefugtem Zugriff, selbst wenn dessen Login und Passwort bekannt geworden sind. Die Authentifizierung mit dem One-Time-Password-Algorithmus (TOTP) kann mit verschiedenen mobilen Anwendungen umgesetzt werden. Die bekanntesten davon sind Google Authenticator, Microsoft Authenticator, LastPass Authenticator und Authy. Jetzt können Sie sich mit Ihrem Konto im MetaTrader 5-Client-Terminal verbinden, indem Sie Einmalpasswörter verwenden, die von solchen Authenticator-Apps generiert werden.

    Um die Zwei-Faktor-Authentifizierung zu aktivieren, verbinden Sie sich über das MetaTrader 5 Web Terminal mit Ihrem Konto. Klicken Sie dann im Menü auf Ihr Konto und wählen Sie im neu geöffneten Dialog „Enable 2FA“ (2FA aktivieren). Starten Sie die Authenticator-App auf Ihrem Mobilgerät, klicken Sie auf „+“, um Ihr Handelskonto hinzuzufügen, und scannen Sie den QR-Code vom Terminal. Geben Sie den generierten Code in das Feld „One-time password“ (Einmalpasswort) ein und klicken Sie auf „Enable 2FA“ (2FA aktivieren). Für Ihr Konto wird auf dem Handelsserver des Brokers ein Geheimcode registriert.


    Unterstützung für 2FA/TOTP-Authentifizierung mit Google Authenticator und ähnlichen Apps wurde hinzugefügt.


    Der gespeicherte Geheimcode wird in der Authenticator-App verwendet, um jedes Mal, wenn Sie sich mit Ihrem Konto verbinden, ein Einmalpasswort, One-time password oder OTP, zu generieren. Jedes Passwort ist 30 Sekunden lang gültig. Danach wird ein Neues erstellt.


    Für die Verbindung mit dem Konto ist ein zusätzliches Einmalpasswort, ein One-Time Password oder OTP, von der Authenticator-App erforderlich


    Im QR-Code-Dialog wird auch ein Backup-Code für die Verknüpfung mit dem Generator angezeigt. Bewahren Sie sie an einem sicheren Ort auf. Wenn Sie den Zugang zu Ihrem verknüpften Gerät verlieren, können Sie mit dem Code Ihr Konto wieder zur Authenticator-App hinzufügen.

    Wenn Sie sich entscheiden, den gespeicherten Geheimcode aus der Authenticator-App zu entfernen, sollten Sie zunächst die 2FA/TOTP-Authentifizierung über den entsprechenden Befehl im Kontextmenü des Kontos deaktivieren. Wenn die neue 2FA/TOTP-Authentifizierungsmethode auf Ihrem Konto nicht verfügbar ist, wenden Sie sich bitte an Ihren Broker.

  2. Die Anzahl der im Market Watch angezeigten Daten wurde erweitert. Zusätzlich zu den aktuellen Bid/Ask (Geld-/Briefkursen) und der prozentualen Preisänderung können Sie nun sehen:

    • Maximaler und minimaler Geld-/Briefkurs für die aktuelle Handelssitzung
    • Eröffnungskurse der aktuellen Handelssitzung und Schlusskurse der vorherigen Handelssitzung

    Verwenden Sie das Kontextmenü, um die angezeigten Informationen anzupassen:


    Zusätzliche Daten der Marktübersicht


  3. Die Anzeige von Risikomeldungen wurde hinzugefügt, wenn eine entsprechende Einstellung auf der Seite des Brokers aktiviert ist. Einige Regulierungsbehörden verlangen, dass die Händler die Meldung vor dem Handel lesen und akzeptieren.
  4. Die Anzeige der oberen Symbolleiste auf iPhone-Modellen mit einer Aussparung am oberen Rand des Bildschirms wurde korrigiert. Zuvor konnte sie gelegentlich die Tasten des Bedienfelds verdecken.
  5. Die Anzeige der endgültigen Finanzparameter des Kontos (Gewinn, Eigenkapital usw.) im Google Chrome Browser wurde korrigiert. Manchmal wurden sie nicht aktualisiert.

Terminal

  1. Der Dialog zur Eröffnung eines Demokontos wurde optimiert und stark beschleunigt.
  2. Aktualisierte Übersetzungen der Nutzeroberfläche.
  3. Korrekturen aufgrund von Absturzprotokollen.

MQL5

  1. Der Klasse COpenCL der Standardbibliothek wurden neue Methoden hinzugefügt:

    • BufferFromMatrix — Füllen des Gerätepuffers mit Daten aus der Matrix
    • BufferToMatrix — Einlesen der Daten aus dem Gerätepuffer in die Matrix
    • ContextCreate — Erstellung des Gerätekontexts (der erste Teil der Initialisierungsmethode )
    • ProgramCreate — Erstellung eines Programms auf der Grundlage des OpenCL-Quellcodes (der zweite Teil der Initialisierungsmethode)
    • ContextClean — Freigabe aller zum Gerätekontext gehörenden Daten (ähnlich wie bei der Methode Shutdown, jedoch ohne den Kontext zu entfernen)
    • GetDeviceInfoInteger — Empfangen einer ganzzahligen Geräteeigenschaft
    • GetKernelInfoInteger — Empfangen einer ganzzahligen Kernel-Eigenschaft
    • GetDeviceInfo — empfängt jede einzelne ganzzahlige Geräteeigenschaft, die nicht in der Aufzählung ENUM_OPENCL_PROPERTY_INTEGER enthalten ist

    Verwendungsbeispiel von GetDeviceInfo;
    long preferred_workgroup_size_multiple=OpenCL.GetDeviceInfo(0x1067);
  2. Die Werte TERMINAL_CPU_NAME und TERMINAL_OS_VERSION wurden zur Enumeration ENUM_TERMINAL_INFO_STRING hinzugefügt. Sie ermöglichen den Empfang der CPU- und Betriebssystemnamen des Nutzers.
    void OnStart()
      {
       string cpu,os;
    //---
       cpu=TerminalInfoString(TERMINAL_CPU_NAME);
       os=TerminalInfoString(TERMINAL_OS_VERSION);
       PrintFormat(„CPU: %s, OS: %s“,cpu,os);
      }
    
    Ergebnis:
    CPU: Intel Xeon  E5-2630 v4 @ 2.20GHz, OS: Windows 10 build 19045
  3. Die Funktion des Parameters „table_or_sql“ in den Funktionen DatabasePrint und DatabaseExport wurde korrigiert. Jetzt kann er zusätzlich zu einer SQL-Abfrage auch einen Tabellennamen übergeben.

MetaEditor

  1. Die Prüfung der maximalen Anzahl der anzeigbaren Spalten in der Datenbank wurde korrigiert. Es können jetzt bis zu 64 Spalten angezeigt werden.
  2. Die Bedienung von Haltepunkten in kurzen Konstruktionen wie IF[ if(cond) break; ] wurde korrigiert.
25 November 2022
MetaTrader 5 Build 3520: 2FA/TOTP-Authentifizierung mit dem Google Authenticator

Terminal

  1. 2FA/TOTP-Authentifizierung mit Google Authenticator und ähnlichen Anwendungen hinzugefügt.

    Die 2FA/TOTP-Authentifizierung schützt ein Handelskonto vor unbefugtem Zugriff, selbst wenn dessen Login und Passwort bekannt werden. Die Authentifizierung mit dem One-Time-Password-Algorithmus (TOTP) kann mit verschiedenen mobilen Anwendungen umgesetzt werden. Die bekanntesten davon sind Google Authenticator, Microsoft Authenticator, LastPass Authenticator und Authy. Jetzt können Sie sich mit Ihrem Konto im MetaTrader 5-Client-Terminal verbinden, indem Sie Einmalpasswörter verwenden, die von solchen Authenticator-Apps generiert werden.

    Um die Zwei-Faktor-Authentifizierung zu aktivieren, verbinden Sie sich mit Ihrem Konto und führen Sie den Befehl "2FA/TOTP aktivieren" im Kontextmenü Ihres Kontos aus. Starten Sie die Authenticator-App auf Ihrem Mobilgerät, klicken Sie auf "+", um Ihr Handelskonto hinzuzufügen, und scannen Sie den QR-Code vom Terminal. Geben Sie den generierten Code in das Feld "Einmaliges Passwort" ein und klicken Sie auf "2FA aktivieren". Für Ihr Konto wird auf dem Handelsserver des Brokers ein Geheimcode registriert.


    Unterstützung für 2FA/TOTP-Authentifizierung mit Google Authenticator und ähnlichen Apps wurde hinzugefügt.

    Der gespeicherte Geheimcode wird in der Authenticator-App verwendet, um jedes Mal, wenn Sie sich mit Ihrem Konto verbinden, ein Einmalpasswort, One-time password oder OTP, zu generieren. Jedes Passwort ist 30 Sekunden lang gültig. Danach wird ein Neues erstellt.



    Für die Verbindung mit dem Konto ist ein zusätzliches Einmalpasswort, ein One-Time Password oder OTP, von der Authenticator-App erforderlich

    Wenn Sie sich entscheiden, den gespeicherten Geheimcode aus der Authenticator-App zu entfernen, sollten Sie zunächst die 2FA/TOTP-Authentifizierung über den entsprechenden Befehl im Kontextmenü des Kontos deaktivieren. Wenn die neue 2FA/TOTP-Authentifizierungsmethode auf Ihrem Konto nicht verfügbar ist, wenden Sie sich bitte an Ihren Broker.

MQL5

  1. Die Funktion CopyTicks für nutzerdefinierte Handelsinstrumente wurde korrigiert. Bei der Arbeit mit nutzerdefinierten Symbolen konnten unter bestimmten Bedingungen die Anfangsticks der vorherigen Sitzung anstelle der angeforderten Daten zurückgegeben werden.

  2. MQL5: Es wurden neue Enumerationswerte hinzugefügt, um den letzten OpenCL-Fehlercode und die Textbeschreibung zu erhalten.
    1. Der Wert CL_LAST_ERROR (Zahl: 4094) wurde der Enumeration ENUM_OPENCL_PROPERTY_INTEGER hinzugefügt

      Beim Abrufen des letzten OpenCL-Fehlers über CLGetInfoInteger wurde der Parameter handle ignoriert. Fehlerbeschreibungen: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.
      Bei einem unbekannten Fehlercode wird die Zeichenfolge "unknown OpenCL error N" zurückgegeben, wobei N der Fehlercode ist.

      Beispiel:
      //--- the first handle parameter is ignored when obtaining the last error code
      int code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);

    2. Der Wert CL_ERROR_DESCRIPTION (4093) wurde der Enumeration ENUM_OPENCL_PROPERTY_STRING hinzugefügt.
      Eine textuelle Fehlerbeschreibung kann mit CLGetInfoString abgerufen werden. Fehlerbeschreibungen: https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS.

      Wenn CL_ERROR_DESCRIPTION verwendet wird, sollte ein Fehlercode als Parameter handle in CLGetInfoString übergeben werden. Wenn CL_LAST_ERROR anstelle des Fehlercodes übergeben wird, gibt die Funktion die letzte Fehlerbeschreibung zurück.

      Beispiel:
      //--- get the code of the last OpenCL error
      int    code = (int)CLGetInfoInteger(0,CL_LAST_ERROR);
      string desc; // to get the text description of the error
      
      //--- use the error code to get the text description of the error
      if(!CLGetInfoString(code,CL_ERROR_DESCRIPTION,desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      
      
      //--- to get the description of the last OpenCL error without receiving the code, pass CL_LAST_ERROR  
      if(!CLGetInfoString(CL_LAST_ERROR,CL_ERROR_DESCRIPTION, desc))
         desc = "cannot get OpenCL error description, " + (string)GetLastError();
      Print(desc);
      Der interne Name der Enumeration wird als Fehlerbeschreibung übergeben. Die Erklärung dazu finden Sie unter https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS. Der Wert CL_INVALID_KERNEL_ARGS bedeutet beispielsweise "Wird zurückgegeben, wenn der Kernel in die Prozess-Enqueue gestellt wird und einige Kernel-Argumente nicht gesetzt oder ungültig sind."

  3. Die Funktion der Methode matrix::MatMul wurde korrigiert. Bei der Arbeit mit großen Matrizen konnte das Terminal bei bestimmten Größen abstürzen.

Behoben wurde ein Fehler in den Absturzprotokollen.
18 November 2022
MetaTrader 5 Build 3510: Verbesserungen am Web-Terminal

MetaTrader 5 WebTerminal

  1. In der mobilen Version haben wir das Sortieren der Handelshistorie und leistungsfähige Filter implementiert. Verwenden Sie die Befehle des oberen Bedienfeld, um die Anzeige der Historie anzupassen:


    Anpassbare Ansicht der Handelshistorie in der mobilen Version


    Die Vorgänge können nach den wichtigsten Parametern sortiert werden, wie z. B. Datum, Ticket, Symbol und Volumen, um nur einige zu nennen.

  2. Verbesserter Zugang zu den Details des Handelskontos.

    • In der Desktop-Version sind die aktuellen Kontodaten anklickbar. Klicken Sie auf das Konto, um seine Details anzuzeigen.
    • In der mobilen Version wird das aktuelle Konto unter dem Abschnitt Einstellungen angezeigt. Klicken Sie auf das Konto, um seine Details anzuzeigen.


    Verbesserter Zugang zu Handelskontodaten

  3. Die Anzeige des Kontotyps im Fenster der Kontoverwaltung wurde korrigiert.
  4. Korrigiert wurde die Anzeige des Kapitals und der freien Marge nach der Seitenaktualisierung des Webterminals in mobilen Browsern.
  5. Die Anzeige der unteren Leiste im mobilen Firefox-Browser wurde korrigiert.

Terminal

  1. Korrigiert wurde die Berechnungen von Kapital und Saldo im Handelsbericht.

MQL5

  1. Neues Verhalten von typename(expr). Die aktualisierte Funktion gibt den vollständigen Typ mit Modifikatoren und Dimensionen (für Arrays) zurück:
    Klasse A
      {
      };
    
    void OnStart(void)
      {
       const A *const arr[][2][3]={};
       Print(typename(arr));
      }
    
    Ergebnis:
    "class A const * const [][2][3]"
Behoben wurde ein Fehler in den Absturzprotokollen.
11 November 2022
MetaTrader 5 Build 3500: Verbesserungen und Korrekturen

Terminal

  1. Das Kontextmenü der Abschnitte Handel und Historie wurde um einen neuen Befehl ergänzt, der den Zugriff auf den neuen Handelsbericht ermöglicht.


    Der Handelsbericht enthält die folgenden Leistungsdaten:
    • Diagramme und Tabellen zur Visualisierung der monatlichen Wachstumsmetriken
    • Kapitaldiagramm
    • Sterndiagramm, das eine schnelle Bewertung der Kontosituation ermöglicht
    • Handelsstatistiken nach Instrumenten
    • Eine Vielzahl zusätzlicher Metriken für die Handelsanalyse

  2. Korrigierte Berechnungen der Ersteinlage im Handelsbericht.
  3. Die Einstellung der Stop-Loss- und Take-Profit-Level bei Verwendung des Quick-Trading-Paneels im Chart und Market Watch wurde korrigiert. Die Level konnten von zuvor eröffneten Positionen übernommen werden, auch wenn die Übernahme nicht erforderlich war (die entsprechende Funktionsweise ist für FIFO-basierte Konten implementiert).
  4. Aktualisierte Übersetzungen der Nutzeroberfläche.

MQL5

  1. Es wurde ein Compilerfehler behoben, der den Zugriff auf ein Strukturfeld über eine konstante Zeichenkette mit dem Wert des Feldnamens ermöglichte.
  2. Die Prüfung von Tastenzuständen mit der Funktion TerminalInfoInteger(TERMINAL_KEYSTATE_*) wurde korrigiert.

Fehler in den Absturzprotokollen wurden behoben.

MetaTrader 5 WebTerminal Version 3500

  1. Ein Fehler, durch den Positionen bei Requotes geschlossen wurden, wurde korrigiert.
  2. Die Verbindung zum Server wurde wiederhergestellt, nachdem ein Browser-Fenster maximiert wurde, das lange Zeit inaktiv war.
  3. Korrigierte Anzeige der Kreditmittel.
  4. Verbesserungen und Korrekturen
4 November 2022
MetaTrader 5 Build 3490: Die Version des Mobile Web Terminals und neue Matrix-Methoden in MQL5

Mobile Version der Webplattform

Das neue Web-Terminal bietet eine umfassende Unterstützung für mobile Geräte. Die Oberfläche passt sich automatisch an die Bildschirmgröße an und ermöglicht so eine effiziente Bedienung von iOS- und Android-Handys und -Tablets:


Außerdem bietet das Web-Terminal eine Reihe von Korrekturen und Verbesserungen.

Das neue MetaTrader 5 Web-Terminal unterstützt den vollen Umfang der Handelsfunktionen. Es ermöglicht den Nutzern:

  • die Arbeit mit Demo- und Live-Konten,
  • den Erhalt von Preise für jede Art von Finanzsymbolen,
  • den Handel auf allen Märkten,
  • die Analyse der Preise der Symbole mit mehr als 30 Indikatoren und 20 grafischen Objekten,
  • die Nutzung der Wirtschaftskalenderdaten für die Fundamentalanalyse,


Terminal

  1. Erweiterte Funktionen des Task-Managers. Die neue Version ermöglicht eine genauere Überwachung der verwendeten Ressourcen.

    • Die Anzeige der Stackgröße für Threads wurde hinzugefügt.
    • Die Anzeige der Anzahl der Kontextwechsel wurde hinzugefügt.
    • Erkennung von System- und Drittanbieter-DLL-Threads hinzugefügt.
    • Anzeige der Betriebszeit im Kernel-Modus hinzugefügt. Ein Anstieg dieser Kennzahl im Vergleich zu der im Nutzermodus verbrachten Zeit kann auf Probleme auf Systemebene hinweisen: Treiberprobleme, Hardwarefehler oder langsame Hardware. Für weitere Details lesen Sie bitte die Microsoft Dokumentation.
    • Die Anzeige der Betriebszeit im Nutzermodus wurde hinzugefügt.




  2. Neue OpenCL-Registerkarte in den Terminaleinstellungen zur Verwaltung der verfügbaren Geräte. Der neue OpenCL-Manager ermöglicht die explizite Angabe von Geräten, die für Berechnungen verwendet werden sollen.




  3. Hinzugefügt wurde die Darstellung von Stop-Loss und Take-Profit in der Markttiefe für Konten, die im FIFO-Modus arbeiten (der Modus kann auf der Seite des Brokers aktiviert werden).

    Nach der FIFO-Regel können die Positionen für jedes Instrument nur in der gleichen Reihenfolge geschlossen werden, in der sie eröffnet wurden. Um durch die Stopp-Level die Positionen FIFO-konforme zu schließen, wurde auf der Seite des Client-Terminals folgende Logik implementiert:

    Wenn mehrere Positionen für dasselbe Instrument bestehen, führt das Setzen von Stopp-Levels für eine der Positionen dazu, dass die gleichen Levels auch für alle anderen Positionen gesetzt werden. Dementsprechend werden bei Auslösung eines Levels alle Positionen in einer FIFO-konformen Reihenfolge geschlossen.

    Wenn der Nutzer nun die Markttiefe für ein Instrument öffnet, für das bereits offene Positionen bestehen, werden die Niveaus der bestehenden Positionen (falls vorhanden) automatisch in den Feldern Stop-Loss und Take-Profit angegeben.

  4. Das Löschen von Stop-Loss- und Take-Profit-Levels mit Hilfe der X-Schaltflächen im Toolbox\Trade-Fenster wurde korrigiert. Der Fehler trat auf, wenn die Schnellhandelsfunktion deaktiviert war. Ein Klick auf die Schaltfläche öffnet einen Handelsdialog mit einem leeren Wert des entsprechenden Levels.

  5. Die Beschriftung der Grafiken und die Berechnung der Endprovisionen im Handelsbericht wurden korrigiert. Der Abschnitt konnte falsche Gewinne in den Berichtsstatistiken und falsche Werte in den Tooltips der Kapital- und Saldendiagramme anzeigen.

MQL5

  1. Die Vektor- und Matrixmethoden CopyTicks und CopyTicksRange wurden hinzugefügt. Sie ermöglichen das einfache Kopieren von Arrays mit Tickdaten in Vektoren und Matrizen.
    bool matrix::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    bool vector::CopyTicks(string symbol,uint flags,ulong from_msc,uint count);
    
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    bool matrix::CopyTicksRange(string symbol,uint flags,ulong from_msc,ulong to_msc);
    Der kopierte Datentyp wird im Parameter rates_mask unter Verwendung der Enumeration ENUM_COPY_RATES angegeben. Die folgenden Werte sind verfügbar:
    COPY_TICKS_INFO    = 1,       // Ticks aufgrund der Änderungen von Bid and/or Ask
    COPY_TICKS_TRADE   = 2,       // Ticks aufgrund der Änderungen von Last und Volumen
    COPY_TICKS_ALL     = 3,       // alle Ticks haben sich geändert
    COPY_TICKS_TIME_MS = 1<<8,    // Zeit in Millisekunden
    COPY_TICKS_BID     = 1<<9,    // Bid-Preis
    COPY_TICKS_ASK     = 1<<10,   // Ask-Preis
    COPY_TICKS_LAST    = 1<<11,   // Last-Preis
    COPY_TICKS_VOLUME  = 1<<12,   // Volume
    COPY_TICKS_FLAGS   = 1<<13,   // Tick-Flags
    Wenn mehrere Datentypen ausgewählt werden (nur bei Matrizen möglich), entspricht die Reihenfolge der Zeilen in der Matrix der Reihenfolge der Werte in der Enumeration.

  2. Erweiterte Funktionen der Methoden matrix::Assign und vector::Assign.

    Jetzt kann der Matrix ein eindimensionales Array oder ein Vektor zugewiesen werden:
    bool matrix::Assign(const vector &vec);
    Das Ergebnis wird eine einzeilige Matrix sein.

    Außerdem kann jetzt eine Matrix einem Vektor zugewiesen werden (es wird Matrixglättung durchgeführt):
    bool vector::Assign(const matrix &mat);
  3. Swap-Methoden für Vektoren und Matrizen hinzugefügt.
    bool vector::Swap(vector &vec);
    bool vector::Swap(matrix &vec);
    bool vector::Swap(double &arr[]);
    bool matrix::Swap(vector &vec);
    bool matrix::Swap(matrix &vec);
    bool matrix::Swap(double &arr[]);
    Jedes Array, jeder Vektor oder jede Matrix verweist auf einen Speicherpuffer, der die Elemente des betreffenden Objekts enthält. Die Swap-Methode tauscht tatsächlich die Zeiger auf diese Puffer aus, ohne die Elemente in den Speicher zu schreiben. Eine Matrix bleibt also eine Matrix, und ein Vektor bleibt ein Vektor. Das Vertauschen einer Matrix und eines Vektors führt zu einer einzeiligen Matrix mit Vektorelementen und einem Vektor mit Matrixelementen in einer flachen Darstellung (siehe die Methode Flat).
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---
      matrix a= {{1, 2, 3}, {4, 5, 6}};
      Print("a vor dem Tausch: \n", a);
      matrix b= {{5, 10, 15, 20}, {25, 30, 35, 40}, {45, 50, 55, 60}};
      Print("b vor dem Tausch: \n", b);  
    //--- Tausch der Matrix-Pointer
      a.Swap(b);
      Print("a nach dem Tausch: \n", a);
      Print("b nach dem Tausch: \n", b);
      /*
      a vor dem Tausch:
      [[1,2,3]
      [4,5,6]]
      b vor dem Tausch:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      
      a nach dem Tausch:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      b nach dem Tausch:
      [[1,2,3]
      [4,5,6]]
      */
      vector v=vector::Full(10, 7);
      Print("v vor dem Tausch: \n", v);
      Print("b vor dem Tausch: \n", b);
      v.Swap(b);
      Print("v nach dem Tausch: \n", v);
      Print("b nach dem Tausch: \n", b);
      /*
      v vor dem Tausch:
      [7,7,7,7,7,7,7,7,7,7]
      b vor dem Tausch:
      [[1,2,3]
      [4,5,6]]
      
      v nach dem Tausch:
      [1,2,3,4,5,6]
      b nach dem Tausch:
      [[7,7,7,7,7,7,7,7,7,7]]
      */
     }
    Die Methode Swap() ermöglicht auch Operationen mit dynamischen Arrays (Arrays fester Größe können nicht als Parameter übergeben werden). Das Array kann eine beliebige Dimension haben, aber eine vereinbarte Größe, was bedeutet, dass die Gesamtgröße einer Matrix oder eines Vektors ein Vielfaches der Dimension Null des Arrays sein muss. Die Dimension Null des Arrays enthält die Anzahl der Elemente, die im ersten Index enthalten sind. Bei einem dynamischen dreidimensionalen Array ‚double array[][2][3]‘ beispielsweise ist die Dimension Null das Produkt aus der Größe der zweiten und dritten Dimension: 2x3=6. Daher kann ein solches Array bei der Swap-Methode nur mit Matrizen und Vektoren verwendet werden, deren Gesamtgröße ein Vielfaches von 6 ist: 6, 12, 18, 24, usw.

    Betrachten Sie das folgende Beispiel:
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- Füllen einer 1x10 Matrix mit dem Wert 7.0
      matrix m= matrix::Full(1, 10, 7.0);
      Print("matrix vor dem Tausch:\n", m);
    //--- Tauschversuch von Matrix und Array
      double array_small[2][5]= {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
      Print("array_small vor dem Tausch:");
      ArrayPrint(array_small);
      if(m.Swap(array_small))
       {
        Print("array_small nach dem Tausch:");
        ArrayPrint(array_small);
        Print("matrix nach dem Tausch: \n", m);
       }
      else // Die Größe der Matrix ist kein Vielfaches der ersten Dimension
       {
        Print("m.Swap(array_small) failed. Error ", GetLastError());
       }
      /*
      matrix vor dem Tausch:
      [[7,7,7,7,7,7,7,7,7,7]]
      array_small vor dem Tausch:
               [,0]     [,1]     [,2]     [,3]     [,4]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000
      [1,]  6.00000  7.00000  8.00000  9.00000 10.00000
      m.Swap(array_small) failed. Error 4006
      */
    //--- neuer Versuch des Tausches mit einer größeren Matrix
      double array_static[3][10]= {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
         {2, 4, 6, 8, 10, 12, 14, 16, 18, 20},
         {3, 6, 9, 12, 15, 18, 21, 24, 27, 30}
       };
      Print("array_static vor dem Tausch:");
      ArrayPrint(array_static);
      if(m.Swap(array_static))
       {
        Print("array_static nach dem Tausch:");
        ArrayPrint(array_static);
        Print("matrix nach dem Tausch: \n", m);
       }
      else // ein statisches Array kann nicht für einen Matrix-Tausch verwendet werden
       {
        Print("m.Swap(array_static) failed. Error ", GetLastError());
       }
      /*
      array_static vor dem Tausch:
             [,0]     [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]
      [0,]  1.00000  2.00000  3.00000  4.00000  5.00000  6.00000  7.00000  8.00000  9.00000 10.00000
      [1,]  2.00000  4.00000  6.00000  8.00000 10.00000 12.00000 14.00000 16.00000 18.00000 20.00000
      [2,]  3.00000  6.00000  9.00000 12.00000 15.00000 18.00000 21.00000 24.00000 27.00000 30.00000
      m.Swap(array_static) failed. Error 4006
      */
    //--- ein weiterer Tauschversuch von Array und matrix
      double array_dynamic[][10];    // dynamischer Array
      ArrayResize(array_dynamic, 3); // setzen der Größe der ersten Dimension
      ArrayCopy(array_dynamic, array_static);
    //--- jetzt die Verwendung eines dynamischen Arrays für dejn Tausch
      if(m.Swap(array_dynamic))
       {
        Print("array_dynamic nach dem Tausch:");
        ArrayPrint(array_dynamic);
        Print("matrix nach dem Tausch: \n", m);
       }
      else //  no error
       {
        Print("m.Swap(array_dynamic) failed. Error ", GetLastError());
       }
      /*
      array_dynamic nach dem Tausch:
            [,0]    [,1]    [,2]    [,3]    [,4]    [,5]    [,6]    [,7]    [,8]    [,9]
      [0,] 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000 7.00000
      matrix nach dem Tausch:
      [[1,2,3,4,5,6,7,8,9,10,2,4,6,8,10,12,14,16,18,20,3,6,9,12,15,18,21,24,27,30]]
      */
     }
  4. Die Methode LossGradient für Vektoren und Matrizen wurde hinzugefügt. Diese Methode berechnet einen Vektor oder eine Matrix von partiellen Ableitungen der Verlustfunktion auf vorhergesagte Werte. In der linearen Algebra wird ein solcher Vektor als Gradient bezeichnet und beim maschinellen Lernen verwendet.
    vector vector::LossGradient(const vector &expected,ENUM_LOSS_FUNCTION loss) const;
    matrix matrix::LossGradient(const matrix &expected,ENUM_LOSS_FUNCTION loss) const;
  5. Die Verwendung von FOREIGN KEYS in SQLite wurde ermöglicht, um Beziehungen zwischen Tabellen in SQL-Abfragen zu erzwingen.   Beispiel:
    CREATE TABLE artist(
      artistid    INTEGER PRIMARY KEY, 
      artistname  TEXT
    );
    
    CREATE TABLE track(
      trackid     INTEGER, 
      trackname   TEXT, 
      trackartist INTEGER,
      FOREIGN KEY(trackartist) REFERENCES artist(artistid)
    );

  6. Korrigiert wurde die Auswahl der geeigneten Klassenmethode in Abhängigkeit von der Methoden- und Objektdeklaration.

MetaEditor

  1. Die zulässige Länge von Kommentaren bei der Übertragung in den MQL5-Storage wurde erhöht. Ausführliche Kommentare beim Übertragen von Änderungen in das Repository gelten als gute Praxis bei der Arbeit an großen Projekten, aber bisher war die Länge der Kommentare auf 128 Zeichen beschränkt. Die zulässige Länge beträgt jetzt bis zu 260 Zeichen.

MetaTester

  1. Erhöhte Empfindlichkeit des Prüfgeschwindigkeitsschalters im visuellen Modus.
Fehler in den Absturzprotokollen behoben.

17 September 2022
MetaTrader 5 Build 3440: Neuartiger Bericht über das Handelskonto

Terminal

  1. Neuer Bericht über die Handelsleistung des Kontos hinzugefügt. Er ähnelt den bereits bekannten Signal-Berichten in Bezug auf die Verfügbarkeit von Statistiken und die Darstellung der Daten. Die folgenden Leistungsdaten werden auf der Plattform verfügbar sein:
    • Diagramme und Tabellen zur Visualisierung der monatlichen Wachstumsmetriken
    • Diagramm zum Eigenkapital
    • Sterndiagramm, das eine schnelle Bewertung des Kontostands ermöglicht
    • Handelsstatistiken nach Instrumenten
    • Eine Vielzahl zusätzlicher Metriken für die Handelsanalyse

    Der Bericht kann direkt auf der Plattform angezeigt werden, ohne dass er in eine Datei exportiert werden muss. Um ihn zu öffnen, wählen Sie Berichte im Menü Ansicht.



  2. Korrigiertes Füllen der Optionstafeln für Call- und Put-Kontrakte mit nicht übereinstimmender Menge oder Symbolart.
  3. Die Positionsauswahl im Handelsdialog während der Operationen Close by (Schließen durch) wurde korrigiert. Der Fehler trat bei Listen mit entgegengesetzter Reihenfolge auf, die nach einer anderen Spalte als dem Ticket sortiert waren.
  4. Beschleunigte Protokollierung der Plattform.
  5. Die Anzeige von Kommentaren in nutzerdefinierten Symbolcharts wurde korrigiert.

MQL5

  1. Die Funktion CArrayList::LastIndexOf wurde korrigiert. Zuvor wurde immer -1 anstelle des Index des zuletzt gefundenen Elements zurückgegeben.
  2. Neue Matrix- und Vektor-Methode hinzugefügt - Assign (Zuweisung). Es ersetzt Matrix/Vektor-Elemente durch die übergebenen Matrix/Vektor- oder Array-Daten.
    bool vector<TDst>::Assign(const vector<TSrc> &assign);
    bool matrix<TDst>::Assign(const matrix<TSrc> &assign);
    
    Beispiel:
      //--- copying matrices
      matrix b={};
      matrix a=b;
      a.Assign(b);
      
      //--- copying an array to a matrix
      double arr[5][5]={{1,2},{3,4},{5,6}};
      Print("array arr");
      ArrayPrint(arr);
      b.Assign(arr);
      Print("matrix b \n",b);
    /*
    array arr
            [,0]    [,1]    [,2]    [,3]    [,4]
    [0,] 1.00000 2.00000 0.00000 0.00000 0.00000
    [1,] 3.00000 4.00000 0.00000 0.00000 0.00000
    [2,] 5.00000 6.00000 0.00000 0.00000 0.00000
    [3,] 0.00000 0.00000 0.00000 0.00000 0.00000
    [4,] 0.00000 0.00000 0.00000 0.00000 0.00000
    matrix b 
    [[1,2,0,0,0]
     [3,4,0,0,0]
     [5,6,0,0,0]
     [0,0,0,0,0]
     [0,0,0,0,0]]
    
    */
  3. Neue Matrix- und Vektor-Methode hinzugefügt - CopyRates. Es kopiert Preisdaten-Arrays in Vektoren und Matrizen.
    bool matrix::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    bool vector::CopyRates(string symbol,ENUM_TIMEFRAMES period,ulong rates_mask,ulong from,ulong count);
    Der kopierte Datentyp wird im Parameter rates_mask unter Verwendung der Enumeration ENUM_COPY_RATES angegeben. Die folgenden Werte sind verfügbar:
    COPY_RATES_OPEN
    COPY_RATES_HIGH
    COPY_RATES_LOW
    COPY_RATES_CLOSE
    COPY_RATES_TIME
    COPY_RATES_VOLUME_TICK
    COPY_RATES_VOLUME_REAL
    COPY_RATES_SPREAD
    COPY_RATES_OHLC
    COPY_RATES_OHLCT
    Die letzten beiden Werte ermöglichen die gleichzeitige Auswahl der Parameter mehrerer Balken: Open, High, Low, Close und time. (Eröffnung, Hoch, Tief, Schluss, Zeit)

    Wenn mehrere Datentypen ausgewählt werden (nur bei Matrizen möglich), entspricht die Reihenfolge der Zeilen in der Matrix der Reihenfolge der Werte in der Enumeration.

  4. Die Anzeige von Text-Label-Objekten wurde korrigiert. Bei Verwendung der Eigenschaften OBJPROP_XOFFSET und OBJPROP_YOFFSET konnte ein falsches Bildfragment im Chart angezeigt werden.

  5. Fehler beim Ändern eines konstanten Parameters, der als Objektzeigerreferenz an eine Funktion übergeben wurde, behoben.

    Der Spezifizierer const deklariert eine Variable als Konstante, um zu verhindern, dass sie während der Programmausführung geändert wird. Es erlaubt nur die einmalige Initialisierung von Variablen während der Deklaration. Ein Beispiel für konstante Variablen in der Funktion OnCalculate:

    int OnCalculate (const int rates_total,      // price[] array size
                     const int prev_calculated,  // bars processed on previous call
                     const int begin,            // meaningful data starts at
                     const double& price[]       // array for calculation
       );
    

    Das folgende Beispiel enthält einen Compilerfehler, der ein implizites Zeiger-Casting für Referenzparameter zuließ:

    class A {};
    const A *a = new A;
    
    void foo( const A*& b )
      {
       b = a;
      }
    
    void OnStart()
      {
            A *b; 
            foo(b);  // not allowed
            Print( a,":",b );
      }
    Der Compiler erkennt solche illegalen Operationen und gibt den entsprechenden Fehler zurück.

MetaEditor

  1. Die Anzeige von komplexen Zahlenreferenzen im Debugger wurde korrigiert.
  2. Verbesserter Schutz der MQL5 Cloud. Zuvor konnte der Dateischutz unter bestimmten Bedingungen fehlschlagen.
  3. Fehler in Absturzprotokollen behoben.


Neues MetaTrader 5 Web-Terminal

Wir haben ein überarbeitetes MetaTrader 5 Web-Terminal veröffentlicht, das eine aktualisierte Oberfläche und einen neu gestalteten Kern aufweist. Die neue Oberfläche ähnelt der Terminalversion für das iPad:



Außerdem bietet es eine Fülle neuer Funktionen:

  • Möglichkeit zur Beantragung echter Konten mit dem detaillierten Registrierungsformular und den Optionen zur Einreichung von Dokumenten,
  • Unterstützung für Preisdatenabonnements und die Möglichkeit, verzögerte Kurse zu erhalten,
  • Mehr analytische Objekte mit komfortablen Verwaltungsoptionen,
  • Darstellung auf dem Chart der Ein- und Austritte im Markt,
  • Anzeige der Ereignisse des Wirtschaftskalenders auf dem Chart.
  • Bequeme Konfiguration von Instrumenten im Market Watch, zusammen mit den Tagesänderungen der Preise.
  • Vereinfachte Nutzeroberfläche, um Anfängern den Einstieg in das Terminal zu erleichtern: Das Kontextmenü des Charts und das obere Menü wurden entfernt; alle Befehle zur Chartsteuerung, Objekte und Indikatoren sind auf der linken Seite und im oberen Bereich verfügbar, während andere Befehle über das Hamburger-Menü aufgerufen werden können
  • Dunkler Modus der Schnittstelle

Versuchen Sie das neue Webterminal unter www.mql5.com gleich jetzt. Es wird in Kürze für Ihre Makler verfügbar sein.

4 August 2022
MetaTrader 5 Build 3390: Float in OpenCL und in mathematischen Funktionen, Aktivierungs- und Verlustfunktionen für maschinelles Lernen

Terminal

  1. Automatische Eröffnung eines Tutorials bei der ersten Verbindung mit einem Handelskonto hinzugefügt. Dies wird Anfängern helfen, die Grundlagen des Handels zu erlernen und die Funktionen der Plattform zu erkunden. Das Lernprogramm ist in mehrere Abschnitte unterteilt, die jeweils kurze Informationen zu einem bestimmten Thema enthalten. Der Trainingsfortschritt wird durch eine blaue Linie dargestellt.

    Automatische Eröffnung eines Tutorials bei der ersten Verbindung mit einem Handelskonto hinzugefügt.


  2. Korrektur der Massenschließung‚ Close profitable‘/‚Close losing‘ (Schließe Gewinner/Verlierer) . Zuvor verwendete die Plattform entgegengesetzte Positionen, wenn es sie gab. Wenn Sie z. B. zwei Kaufpositionen im Verlust für EURUSD und eine Verkaufsposition im Gewinn für EURUSD haben, werden alle drei Positionen während des Massenvorgangs ‚Close losing‘ (Verluste schließen) geschlossen. Kauf und Verkauf würden durch den Vorgang ‚Close by‘ (Schließen durch) abgeschlossen, während der verbleibende Kauf durch einen normalen Vorgang abgeschlossen würde. Jetzt funktionieren die Befehle richtig: Sie schließen nur die ausgewählten Positionen, entweder im Gewinn oder Verlust.

  3. Die Anzeige von negativen historischen Preisen wurde korrigiert. Diese Preise werden auf allen Zeitskalen korrekt angezeigt.
  4. Optimierter und deutlich reduzierter Systemressourcenverbrauch durch das Terminal.
  5. Aktualisierte Fundamentaldatenbank für Handelsinstrumente. Die Zahl der verfügbaren Datenaggregatoren für Börseninstrumente wurde auf 15 erweitert. Die Nutzer werden über die beliebtesten Wirtschaftsaggregatoren Zugang zu Informationen über noch mehr Ticker haben.

    Aktualisierte Fundamentaldatenbank für Handelsinstrumente.

    Rund 7.000 Wertpapiere und mehr als 2.000 ETFs sind auf dem globalen Börsenmarkt notiert. Außerdem bieten die Börsen Futures und andere Derivate an. Die Plattform MetaTrader 5 bietet Zugang zu einer riesigen Datenbank von Börseninstrumenten. Um auf die entsprechenden Fundamentaldaten zuzugreifen, kann der Nutzer mit einem Klick direkt von Market Watch aus auf die Website des ausgewählten Aggregators wechseln. Zur Vereinfachung bietet die Plattform eine Auswahl an Informationsquellen für jedes Finanzinstrument.

  6. Corregido el ajuste de los niveles de Stop Loss y Take Profit en la nueva ventana de colocación de nuevas órdenes. En el caso de las cuentas FIFO, los niveles de stop se fijarán ahora de manera automática según los niveles de stop de las posiciones ya abiertas para el mismo instrumento. Esto será necesario para cumplir con la regla FIFO.

MQL5

  1. Die Mathematikfunktionen können jetzt mit Matrizen und Vektoren arbeiten.

    Wir bauen die Möglichkeiten der MetaTrader 5-Plattform für den algorithmischen Handel und das maschinelle Lernen weiter aus. Zuvor haben wir neue Datentypen hinzugefügt: Matrizen und Vektoren, die die Verwendung von Arrays für die Datenverarbeitung überflüssig machen. Mehr als 70 Methoden wurden in MQL5 für Operationen mit diesen Datentypen hinzugefügt. Die neuen Methoden ermöglichen lineare Algebra und statistische Berechnungen in einem einzigen Arbeitsgang. Multiplikation, Umformung und Gleichungssysteme können einfach und ohne übermäßige viele Codezeilen implementiert werden. Das neueste Update enthält mathematische Funktionen.

    Ursprünglich wurden mathematische Funktionen entwickelt, um relevante Operationen mit skalaren Werten durchzuführen. Ab diesem Build können die meisten Funktionen auf Matrizen und Vektoren angewendet werden. Dazu gehören MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh, und MathTanh. Solche Operationen implizieren eine elementweise Behandlung von Matrizen oder Vektoren. Beispiel:
    //---
      matrix a= {{1, 4}, {9, 16}};
      Print("matrix a=\n",a);
    
      a=MathSqrt(a);
      Print("MatrSqrt(a)=\n",a);
      /*
       matrix a=
       [[1,4]
        [9,16]]
       MatrSqrt(a)=
       [[1,2]
        [3,4]]
      */
    Bei MathMod und MathPow kann das zweite Element entweder ein Skalar oder eine Matrix/ein Vektor mit der entsprechenden Größe sein.

    Das folgende Beispiel zeigt, wie die Standardabweichung durch Anwendung mathematischer Funktionen auf einen Vektor berechnet werden kann.
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- Use the initializing function to populate the vector
      vector r(10, ArrayRandom); // Array of random numbers from 0 to 1
    //--- Calculate the average value
      double avr=r.Mean();       // Array mean value
      vector d=r-avr;            // Calculate an array of deviations from the mean
      Print("avr(r)=", avr);
      Print("r=", r);
      Print("d=", d);
      vector s2=MathPow(d, 2);   // Array of squared deviations
      double sum=s2.Sum();       // Sum of squared deviations
    //--- Calculate standard deviation in two ways
      double std=MathSqrt(sum/r.Size());
      Print(" std(r)=", std);
      Print("r.Std()=", r.Std());    
     }
    /*
      avr(r)=0.5300302133243813
      r=[0.8346201971495713,0.8031556138798182,0.6696676534318063,0.05386516922513505,0.5491195410016175,0.8224433118686484,...
      d=[0.30458998382519,0.2731254005554369,0.1396374401074251,-0.4761650440992462,0.01908932767723626,0.2924130985442671, ...
       std(r)=0.2838269732183663
      r.Std()=0.2838269732183663
    */ 
    //+------------------------------------------------------------------+
    //| Fills the vector with random values                              |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }
    

  2. In Template-Funktionen wurde Unterstützung für die Notationen matrix<double>, matrix<float>, vector<double>, vector<float> anstelle der entsprechenden Matrix-, matrixf-, vector- und vectorf-Typen hinzugefügt.
  3. Verbesserte mathematische Funktionen für Operationen mit dem Typ float. Die neu implementierte Möglichkeit, mathematische Funktionen auf 'float'-Matrizen und -Vektoren anzuwenden, hat eine Verbesserung der auf 'float'-Skalare angewandten mathematischen Funktionen ermöglicht. Zuvor wurden diese Funktionsparameter bedingungslos in den Typ "double" umgewandelt, dann wurde die entsprechende Implementierung der mathematischen Funktion aufgerufen, und das Ergebnis wurde in den Typ "float" zurückgewandelt. Jetzt werden die Operationen ohne zusätzliches Typenumwandlung (Casting) implementiert.

    Das folgende Beispiel zeigt den Unterschied in den mathematischen Sinusberechnungen:

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---  Array of random numbers from 0 to 1
      vector d(10, ArrayRandom);
      for(ulong i=0; i<d.Size(); i++)
       {
        double delta=MathSin(d[i])-MathSin((float)d[i]);
        Print(i,". delta=",delta);
       }
     }
    /*
       0. delta=5.198186103783087e-09
       1. delta=8.927621308885136e-09
       2. delta=2.131878673594656e-09
       3. delta=1.0228555918923021e-09
       4. delta=2.0585739779477308e-09
       5. delta=-4.199390279957527e-09
       6. delta=-1.3221741035351897e-08
       7. delta=-1.742922250969059e-09
       8. delta=-8.770715820283215e-10
       9. delta=-1.2543186267421902e-08
    */
    //+------------------------------------------------------------------+
    //| Fills the vector with random values                              |
    //+------------------------------------------------------------------+
    void ArrayRandom(vector& v)
     {
      for(ulong i=0; i<v.Size(); i++)
        v[i]=double(MathRand())/32767.;
     }

  4. Aktivierungs- und Ableitungsmethoden für Matrizen und Vektoren hinzugefügt:
    AF_ELU               Exponential-Linear-Einheit
    AF_EXP               Exponential
    AF_GELU              Gaußscher Fehler Lineare Einheit
    AF_HARD_SIGMOID      Hartes Sigmoid
    AF_LINEAR            Linear
    AF_LRELU             Undichte rektifizierte Lineareinheit
    AF_RELU              Rektifizierte Lineareinheit
    AF_SELU              Skalierte Exponential-Linear-Einheit
    AF_SIGMOID           Sigmoid
    AF_SOFTMAX           Softmax
    AF_SOFTPLUS          Softplus
    AF_SOFTSIGN          Softsign
    AF_SWISH             Swish
    AF_TANH              Hyperbolischer Tangens
    AF_TRELU             Schwellenwerteinheit (Rectified Linear Unit)
    Die Aktivierungsfunktion des neuronalen Netzes bestimmt, wie die Summe der gewichteten Eingangssignale in ein Knotenausgangssignal auf der Netzebene umgewandelt wird. Die Auswahl der Aktivierungsfunktion hat einen großen Einfluss auf die Leistung des neuronalen Netzes. Verschiedene Teile des Modells können unterschiedliche Aktivierungsfunktionen verwenden. Zusätzlich zu allen bekannten Funktionen bietet MQL5 Derivative. Derivativ-Funktionen ermöglichen eine schnelle Berechnung von Anpassungen auf der Grundlage des beim Lernen erhaltenen Fehlers.

  5. Verlustfunktion für Matrizen und Vektoren hinzugefügt. Sie hat die folgenden Parameter:
    LOSS_MSE            Mittlerer quadratischer Fehler
    LOSS_MAE            Mittlerer absoluter Fehler
    LOSS_CCE            Kategoriale Kreuzentropie
    LOSS_BCE            Binäre Kreuzentropie
    LOSS_MAPE           Mittlerer absoluter prozentualer Fehler
    LOSS_MSLE           Mittlerer quadratischer logarithmischer Fehler
    LOSS_KLD            Kullback-Leibler Divergenz
    LOSS_COSINE         Kosinus-Ähnlichkeit/-Nähe
    LOSS_POISSON        Poisson
    LOSS_HINGE          Hinge-Verlustfunktion
    LOSS_SQ_HINGE       Quadratische Hinge-Verlustfunktion
    LOSS_CAT_HINGE      Kategoriale Hinge-Verlustfunktion
    LOSS_LOG_COSH       Logarithmus des Hyperbolischen Kosinus
    LOSS_HUBER          Huber-Verlustfunktion

    Die Verlustfunktion bewertet, wie gut das Modell die tatsächlichen Werte vorhersagt. Die Modellkonstruktion zielt darauf ab, den Funktionswert in jeder Phase zu minimieren. Der Ansatz hängt von dem jeweiligen Datensatz ab. Außerdem kann die Verlustfunktion von Gewicht und Offset abhängen. Die Verlustfunktion ist eindimensional und kein Vektor, da sie eine allgemeine Bewertung des neuronalen Netzes liefert.

  6. Hinzugefügt wurden die Methoden Matrix::CompareByDigits und vector::CompareByDigits für Matrizen und Vektoren. Sie vergleichen die Elemente zweier Matrizen/Vektoren bis zu signifikanten Ziffern.

  7. Unterstützung für die Funktionen MathMin und MathMax für Zeichenketten (strings) hinzugefügt. Die Funktionen verwenden lexikografische Vergleiche: Buchstaben werden alphabetisch verglichen, Groß- und Kleinschreibung wird beachtet.

  8. Die maximale Anzahl von OpenCL-Objekten wurde von 256 auf 65536 erhöht. Die Handles von einem OpenCL-Objekt werden in einem MQL5-Programm mit den Funktionen CLContextCreate, CLBufferCreate und CLProgramCreate erstellt. Die bisherige Grenze von 256 Handles war für den effizienten Einsatz von Methoden des maschinellen Lernens nicht ausreichend.

  9. Es wurde die Möglichkeit hinzugefügt, OpenCL auf Grafikkarten ohne Unterstützung von double-Werten zu verwenden. Bisher waren in MQL5-Programmen nur GPUs erlaubt, die Double-Typen unterstützen, obwohl viele Aufgaben Berechnungen mit Float erlauben. Der Float-Typ wird zunächst als nativ für die Parallelverarbeitung angesehen, da er weniger Platz benötigt. Daher wurde die alte Vorschrift aufgehoben.

    Um die obligatorische Verwendung von Grafikprozessoren mit Unterstützung von double Werten für bestimmte Aufgaben festzulegen, verwenden Sie die Option CL_USE_GPU_DOUBLE_ONLY im Aufruf CLContextCreate.
       int cl_ctx;
    //--- Initializing the OpenCL context
       if((cl_ctx=CLContextCreate(CL_USE_GPU_DOUBLE_ONLY))==INVALID_HANDLE)
         {
          Print("OpenCL not found");
          return;
         }

  10. Die Arbeitsweise der Funktion CustomBookAdd wurde korrigiert. Zuvor verhinderte ein Wert ungleich Null im Feld MqlBookInfo::volume_real, dass die Funktion einen Snapshot der Markttiefe erstellen konnte. Die Prüfung wird nun wie folgt durchgeführt:
    Die übermittelten Daten werden validiert: Typ, Preis und Volumen müssen für jedes Element angegeben werden. Außerdem dürfen MqlBookInfo.volume und MqlBookInfo.volume_real nicht null oder negativ sein. Sind beide Volumina negativ, wird dies als Fehler gewertet. Sie können einen der Volumentypen oder beide angeben, wobei das System denjenigen verwendet, der angegeben ist oder positiv ist:

       volume=-1 && volume_real=2 — es wird volume_real=2 verwendet,

       volume=3 && volume_real=0 — es wird volume=3 verwendet.

    Das Volumen MqlBookInfo.volume_real mit erhöhter Genauigkeit hat eine höhere Priorität als MqlBookInfo.volume. Wenn also beide Werte angegeben werden und gültig sind, wird volume_real verwendet.

    Wenn eines der Markttiefe-Elemente falsch beschrieben wird, verwirft das System den übergebenen Zustand vollständig.

  11. Der Betrieb der Funktion CalendarValueLast wurde korrigiert. Aufgrund eines Fehlers konnten aufeinanderfolgende Funktionsaufrufe nach Änderungen im Wirtschaftskalender (der Parameter 'change' wurde nach dem Aufruf auf einen neuen Wert gesetzt) bei Verwendung des Währungsfilters einige Ereignisse überspringen.
    CalendarValueLast(change, result, "", "EUR")
  12. Das Verhalten der Funktion ArrayBSearch wurde korrigiert. Wenn mehrere identische Elemente gefunden werden, wird ein Link zum ersten Ergebnis zurückgegeben und nicht ein zufälliges Ergebnis.
  13. Die Prüfung der Sichtbarkeit von Template-Funktionen innerhalb einer Klasse wurde korrigiert. Aufgrund eines Fehlers wurden Klassenvorlagenfunktionen, die als privat/geschützt deklariert wurden, als public angezeigt.

MetaEditor

  1. Fehler und zweideutiges Verhalten von MetaAssist behoben.
  2. Unterstützung für die %terminal%-Makros, die den Pfad zum Terminal-Installationsverzeichnis angeben, wurde hinzugefügt. Zum Beispiel: %terminal%\MQL5\Experts. 

    Unterstützung für die %terminal%-Makros, die den Pfad zum Terminal-Installationsverzeichnis angeben, wurde hinzugefügt.

  3. Verbesserte Anzeige von Arrays im Debugger.
  4. Vergrößerter Puffer für das Kopieren von Werten aus dem Debugger.
  5. Verbesserte Fehlerhinweise.
  6. Angabe von relativen Pfaden in der Projektdatei *.mproj hinzugefügt. Zuvor wurden absolute Pfade verwendet, was zu Kompilierungsfehlern führte, wenn das Projekt verschoben wurde.
  7. Es wurde das automatische Einbetten von BMP resources als global verfügbare 32-Bit-Bitmap-Arrays in Projekte hinzugefügt. Dadurch entfällt die Notwendigkeit, ResourceReadImage innerhalb des Codes aufzurufen, um die grafische Ressource einzulesen.
    'levels.bmp' as 'uint levels[18990]'
    
  8. Verbessertes Einlesen von erweiterten BMP-Dateiformaten.
  9. Aktualisierte UI-Übersetzungen.
  10. Fehler in Absturzprotokollen behoben.
2 Juni 2022
MetaTrader 5 build 3320: Verbesserungen und Korrekturen

Terminal

  1. Erweiterte Tooltips für Handelsobjekte, die auf den Charts angezeigt werden:
    • Die Deals, mit denen aus dem Markt ausgestiegen wurde, zeigen jetzt Gewinne an.
    • Bei Deals, die als Folge einer Take Profit- oder Stop Loss-Aktivierung ausgeführt wurden, wird die entsprechende Anzeige eingeblendet.

    Ähnliche Tooltips sind für die Verbindungslinien zwischen Ein- und Ausstiegs-Deals verfügbar.

    Erweiterte Tooltips für Handelsobjekte


  2. Verbesserte grafische Systemleistung.
  3. Die Protokollierung von Operationen mit offenen Aufträgen und Positionen wurde hinzugefügt. Wenn ein solcher Befehl ausgeführt wird, wird dem Journal ein entsprechender Protokolleintrag hinzugefügt, z. B.: "Massenschließung von XXX Positionen gestartet".
  4. Festgelegte Massenschließung von gegenüberliegenden Positionen.
  5. Die Aktualisierung von Chart-Objekten, die den Handelsverlauf anzeigen, wurde korrigiert. Der Fehler trat beim Ändern des Diagrammsymbols auf.

MQL5

  1. Arbeiten an Matrix- und Vektor-Funktionen sind im Gange: Unterstützung für 'float' und 'complex' wird implementiert.
  2. Der Operator "!" (LNOT) für einen Zeiger prüft dessen Gültigkeit durch einen impliziten Aufruf von CheckPointer. Der Operator "==" sollte für eine schnelle Prüfung auf NULL verwendet werden. Zum Beispiel: ptr==NULL oder ptr!=NULL.

MetaTester

  1. Die Anzeige von Deal-Objekten in Testdiagrammen wurde korrigiert.
  2. Die Leistung des grafischen Systems wurde verbessert.

MetaEditor

  • Aktualisierte UI-Übersetzungen.

Fehler in den Absturz-Logs behoben.

20 Mai 2022
MetaTrader 5 build 3300: Schnelle Kompilierung und verbesserte Code-Navigation im MetaEditor

Terminal

  1. Es wurde die Möglichkeit hinzugefügt, die Größe des grafischen Objekts "Rechteck" durch Ziehen an einer seiner vier Ecken zu ändern.


  2. Schnelleres GUI-Rendering.
  3. Verbesserte Unterstützung für IPv6-Adressen.
  4. Es wurde die Höhenberechnung für das untere Datumsfeld und die Breitenberechnung für das Preisfeld auf der rechten Seite beim ersten Start der Plattform korrigiert.

MQL5

  1. Funktion für die Arbeit mit Matrizen und Vektoren hinzugefügt — RegressionMetric. Sie setzt die Metrik für die Regressionsauswertung.
     double vector.RegressionError(const enum lr_error);
     double matrix.RegressionError(const enum lr_error);
     vector matrix.RegressionError(const enum lr_error,const int axis);
    Die folgenden Variablen können als Metriken verwendet werden:
    enum REGRESSION_ERROR
      {
       REGRESSION_MAE,     // Mittlerer absoluter Fehler
       REGRESSION_MSE,     // Mittlerer quadratischer Fehler
       REGRESSION_RMSE,    // Wurzel des mittleren quadratischen Fehlers
       REGRESSION_R2,      // R-Quadrat
       REGRESSION_MAPE,    // Mittlerer absoluter Fehler in Prozent
       REGRESSION_MSPE,    // Mittlerer quadratischer Fehler in Prozent
       REGRESSION_RMSLE    // Logarithmus der Wurzel des mittleren quadratischen Fehlers
      };
  2. Es wurde die Möglichkeit hinzugefügt, Arrays mit einer Datengröße größer als INT_MAX zu schreiben (Arrays von Strukturen).

MetaEditor

  1. Verbesserungen der Tab-Leiste:
    • Die Leiste wird nicht ausgeblendet, auch wenn nur ein Fenster geöffnet ist. Somit sind die Befehle des Tab-Kontextmenüs für den Nutzer immer sichtbar.
    • Die Schaltfläche "X" zum Schließen wurde zu jedem Tab hinzugefügt. Darüber hinaus können Registerkarten mit der mittleren Maustaste oder über das Kontextmenü geschlossen werden.


  2. Befehl zur schnellen Programmkompilierung hinzugefügt. Dieser Modus überspringt die Code-Optimierung, was die Erstellung einer ausführbaren EX5-Datei erheblich beschleunigt. Verwenden Sie diesen Modus während der aktiven Entwicklungsphase, wenn Sie den geschriebenen Code schnell überprüfen wollen. Schalten Sie während der endgültigen Programmkompilierung den maximalen Optimierungsmodus ein, um die Leistung zu verbessern.


    Der Parameter "Maximale Optimierung" in den Projekteinstellungen erfüllt die gleiche Funktion.

    Alle kompilierungsrelevanten Operationen sind unter dem Menü "Erstellen" verfügbar.

  3. Verbesserungen in der Codeverwaltung:
    • Es wurden getrennte Befehle für das Springen zu Definitionen und zu Deklarationen implementiert. Zuvor hatte das Menü einen Befehl, der ein Auswahl-Untermenü öffnete. Die neuen Befehle ermöglichen einen schnelleren Wechsel zu den benötigten Codeteilen.
    • Erkennung von Schlüsselwörtern durch die Tabulatortaste, zusätzlich zu "Eingabe".




  4. Es wurde die Möglichkeit hinzugefügt, automatisch lokale Variablen in der Beobachtungsliste des Debuggers anzuzeigen. Die Anzeige kann durch den Befehl "Lokal" im Kontextmenü aktiviert werden. Wenn die Debugger-Operation durch den Code fortschreitet, werden die Variablen des aktuellen Bereichs automatisch in der Liste angezeigt.


  5. Verbesserungen der Debugger-Überwachungsliste für Vektoren und Matrizen.
  6. Fixierte Pfade in Projektdateien. Ein Fehler konnte dazu führen, dass Dateien aus Projekten verschwanden.

Tester

  1. Verbessertes Beendigen der Tester-Agenten beim Herunterfahren der Plattform.
  2. Der fünfte MQL5 Cloud Network Knoten wurde hinzugefügt. Er befindet sich in Hongkong. Der neue Knoten beschleunigt die Optimierung von Robotern über das Netzwerk in den nächstgelegenen Regionen.

Fehler in den Absturz-Logs behoben
29 April 2022
MetaTrader 5 build 3280: Verbesserungen und Korrekturen aufgrund von Nutzer-Feedbacks

Terminal

  1. Das Füllen der Standard-Trailing-Stop-Levels im Kontextmenü von offenen Aufträgen und Positionen wurde korrigiert.



  2. Aktualisierte Übersetzungen der Nutzeroberfläche.

Fehler in den Absturz-Logs behoben.
21 April 2022
MetaTrader 5 build 3270: Verbesserungen und Korrekturen

Terminal

  1. Verbesserungen des integrierten Chats.
    • Aktualisiertes Design. Nachrichten werden jetzt ohne umlaufende Blasen angezeigt, um die Anzeige und die Platznutzung zu optimieren. Avatare und Datumstrenner wurden hinzugefügt.
    • Die Befehle Kopieren und Löschen wurden zum Nachrichtenmenü hinzugefügt.
    • Fehlerkorrekturen und Stabilitätsverbesserungen.



  2. Korrektur beim Auftrag zur Mehrfachschließung von Positionen. Auf Konten mit Hedging-Position konnte ein Fehler auftreten.
  3. Die Abrechnung bestimmter Geschäftsarten bei der Erstellung der Positionshistorie wurde korrigiert.

Fehler in den Absturz-Logs behoben.
15 April 2022
MetaTrader 5 Build 3260: Mehrfachoperationen, Matrix- und Vektorfunktionen und Chat-Verbesserungen

Terminal

  1. Befehle für die Massenschließung von Positionen und die Stornierung von schwebenden Aufträgen hinzugefügt.

    Der neue Befehl "Bulk Operations" wurde dem Kontextmenü der Registerkarte "Handel" hinzugefügt. Die Liste der verfügbaren Befehle wird automatisch erstellt, abhängig von der ausgewählten Operation und dem Kontotyp.



    Die folgenden Befehle sind immer im Menü verfügbar:
    • Beim Schließen aller Positionen auf Hedging-Konten versucht das System, Positionen durch entgegengesetzte Positionen zu schließen (Close By), und schließt dann die restlichen Positionen nach einem regulären Verfahren.
    • Schließen aller Positionen im Gewinn oder im Verlust
    • Alle schwebenden Aufträge löschen
    • Löschen aller schwebenden Aufträge bestimmter Typen: Limit, Stop, Stop-Limit

    Wenn Sie eine Position auswählen, erscheinen zusätzliche Befehle im Menü:
    • Alle Positionen dieses Symbols schließen
    • Alle Positionen derselben Richtung schließen (auf Hedging-Konten)
    • Alle entgegengesetzten Positionen desselben Symbols schließen (auf Hedging-Konten)
    • Positionen umkehren (auf Netting-Konten)

    Wenn Sie einen schwebenden Auftrag auswählen, erscheinen zusätzliche Befehle im Menü:
    • Alle schwebenden Aufträge desselben Symbols löschen
    • Alle schwebenden Aufträge desselben Typs für dasselbe Symbol löschen

    Diese Befehle sind nur verfügbar, wenn Sie den Ein-Klick Handel in den Plattformeinstellungen aktiviert haben: Extras \ Optionen \ Handel.
  2. Verbesserte interne Chat-Funktionen:
    • Es wurde die Möglichkeit hinzugefügt, auf Nachrichten zu antworten. Der Quelltext der Nachricht wird in der Antwort zitiert.
    • Es wurde die Möglichkeit hinzugefügt, Nachrichten mit verschiedenen Inhaltstypen zu erstellen, wie z.B. Bilder mit Text und Text mit Anhängen, um nur einige zu nennen.
    • Die Anzeige des Trennzeichens zwischen gelesenen und ungelesenen Nachrichten wurde korrigiert.
    • Fehlerkorrekturen und Stabilitätsverbesserungen.



  3. Optimierte und beschleunigte Ausführung des Grafiksystems des Terminals. Das Rendering der Oberfläche benötigt nun weniger Ressourcen.
  4. Korrektur der Berechnung der täglichen Preisänderungen für Futures. Wenn der Broker einen Clearing-Preis zur Verfügung stellt, wird dieser Preis für die Berechnungen verwendet:
    ((Letzter - Clearing-Preis)/Clearing-Preis)*100
    Eine detaillierte Beschreibung aller Berechnungsarten finden Sie in der Dokumentation.

  5. Fehler bei Kauf von MQL5-Angeboten behoben:
    • Zahlungssysteme konnten unter bestimmten Bedingungen Fehler für erfolgreiche Operationen zurückgeben.
    • Bei Zwischenschritten der Produktvermietung im Markt konnte ein falscher Preis angezeigt werden.

  6. Die Funktion der Schaltfläche "Start" auf der Seite für gekaufte/heruntergeladene Marktprodukte wurde korrigiert. Die Schaltfläche startet die Anwendung nun korrekt auf dem ersten geöffneten Chart.
  7. Die Abrechnung bestimmter Geschäftsarten bei der Erstellung der Positionshistorie wurde korrigiert.

MQL5

  1. Neue Funktionen für die Arbeit mit Matrizen und Vektoren hinzugefügt:
    • Median — gibt den Median der Matrix- oder Vektorelemente zurück
    • Quantile — gibt das q-te Quantil der Matrix/Vektor-Elemente oder der Elemente entlang der angegebenen Achse zurück
    • Percentile — gibt das q-te Perzentil der Matrix-/Vektorelemente oder der Elemente entlang der angegebenen Achse zurück
    • Std — Berechnet die Standardabweichung der Matrix- oder Vektorelemente
    • Var — berechnet die Varianz der Matrix- oder Vektorelemente
    • CorrCoef — berechnet den Korrelationskoeffizienten der Matrix/des Vektors
    • Correlate — berechnet die Kreuzkorrelation von zwei Vektoren
    • Convolve — gibt die diskrete, lineare Faltung von zwei Vektoren zurück
    • Cov — Berechnet die Kovarianzmatrix

  2. Wir haben begonnen, integrierte Methoden für numerische Arrays hinzuzufügen. Die neuen Methoden verbessern die Nutzerfreundlichkeit, erhöhen die Kompaktheit des Codes und verbessern die Kompatibilität des Codes mit anderen Sprachen.

    Die folgenden drei Methoden sind bereits verfügbar:
    • ArgSort — sortiert Arrays nach der angegebenen Dimension; die letzte Methode wird standardmäßig verwendet (axis=-1).
    • Range — gibt die Anzahl der Elemente in der angegebenen Array-Dimension zurück. Analog zu ArrayRange.
    • Size — gibt die Anzahl der Array-Elemente zurück. Analog zu ArraySize.

    Beispiel:
    void OnStart()
      {
       int arr[4][5]=
         {
            {22, 34, 11, 20,  1},
            {10, 36,  2, 12,  5},
            {33, 37, 25, 13,  4},
            {14,  9, 26, 21, 59}
         };
       ulong indexes[4][5];
    //--- Sort the array
       arr.ArgSort(indexes,-1,0);
       Print("indexes");  
       ArrayPrint(indexes);
      }
    
    // Result log:
    // indexes
    //     [,0][,1][,2][,3][,4]
    // [0,]   4   2   3   0   1
    // [1,]   2   4   0   3   1
    // [2,]   4   3   2   0   1
    // [3,]   1   0   3   2   4

  3. Wir haben begonnen, integrierte Methoden für Zeichenketten hinzuzufügen.
    Die folgenden Methoden sind derzeit verfügbar:

    • BufferSize — gibt die Puffergröße zurück, die für die Zeichenkette reserviert ist.
    • Compare — vergleicht zwei Zeichenketten und gibt das Vergleichsergebnis als Ganzzahl zurück.
    • Length — gibt die Anzahl der Zeichen in einer Zeichenkette zurück.
    • Find — sucht nach einer Teilzeichenkette in einer Zeichenkette.
    • Upper — wandelt eine Zeichenfolge in Großbuchstaben um.
    • Lower — wandelt eine Zeichenfolge in Kleinbuchstaben um.
    • Replace — ersetzt eine Teilzeichenkette.
    • Reserve — kehrt den Zugriff auf den Zeichenpuffer um.

    Alle Methoden sind analog zu den String-Funktionen.

    Beispiel:
    void OnStart()
      {
       string test="some string";
       PrintFormat("String length is %d",test.Length());
      }
    
    // Result log:
    // String length is 11
  4. Der Wert SYMBOL_SUBSCRIPTION_DELAY wurde in die Enumeration ENUM_SYMBOL_INFO_INTEGER für die Verzögerung bei der Lieferung von Symbolkursen hinzugefügt.

    Sie wird nur für Abonnement-basierte Handelssymbole verwendet. Die Verzögerung gilt normalerweise für Daten, die im Testmodus bereitgestellt werden.

    Die Eigenschaft kann nur für in der Marktübersicht ausgewählte Symbole angefordert werden. Ansonsten wird er Fehler ERR_MARKET_NOT_SELECTED (4302) zurückgegeben.

  5. Die Eigenschaft ACCOUNT_HEDGE_ALLOWED wurde in die Enumeration ENUM_ACCOUNT_INFO_INTEGER aufgenommen — sie ermöglicht die Eröffnung von gegenläufigen Positionen und schwebenden Aufträgen. Die Eigenschaft wird nur für Hedging-Konten verwendet, um die aufsichtsrechtlichen Anforderungen zu erfüllen, wonach ein Konto keine gegenläufigen Positionen für dasselbe Symbol haben darf, während gleichgerichtete Positionen erlaubt sind.

    Wenn diese Option deaktiviert ist, dürfen Konten keine gegenläufigen Positionen und Aufträge für dasselbe Finanzinstrument haben. Wenn das Konto zum Beispiel eine Kaufposition hat, kann der Nutzer keine Verkaufsposition eröffnen oder einen schwebenden Verkaufsauftrag erteilen. Wenn der Nutzer versucht, eine solche Operation durchzuführen, wird der Fehler TRADE_RETCODE_HEDGE_PROHIBITED zurückgegeben.

  6. Neue Eigenschaften in der ENUM_SYMBOL_INFO_DOUBLE Enumeration:
    • SYMBOL_SWAP_SUNDAY
    • SYMBOL_SWAP_MONDAY
    • SYMBOL_SWAP_TUESDAY
    • SYMBOL_SWAP_WEDNESDAY
    • SYMBOL_SWAP_THURSDAY
    • SYMBOL_SWAP_FRIDAY
    • SYMBOL_SWAP_SATURDAY

    Verwenden Sie die Werte, um Swap-Berechnungssätze für bestimmte Wochentage zu erhalten. 1 — einfacher Swap, 3 — dreifacher Swap, 0 — kein Swap.

  7. Die Ausführung der Funktionen CopyTicks and CopyTicksRange wurde korrigiert. Ein Fehler konnte dazu führen, dass beim Überschreiten von Mitternacht veraltete Daten zurückgegeben wurden. Der Fehler trat auf, wenn keine Ticks für das Finanzinstrument bereitgestellt wurden.
  8. Fehler in den Absturz-Logs behoben.
11 Februar 2022
MetaTrader 5 Plattform Build 3210: Neue Matrix-Methoden und Kontrolle über Indikator-Minimum/Maximum-Werte

    MQL5

    1. Min, Max, ArgMin, ArgMax und Summenfunktionen für Vektoren und Matrizen hinzugefügt. Verwenden Sie die Funktionen, um die minimalen und maximalen Werte, relevante Indizes und die Summe zu ermitteln.
    2. Unterstützung für Flat-Methoden für die Matrix wurde hinzugefügt. Mit diesen Methoden kann ein Matrizenelement über einen Index anstelle von zwei Indizes angesprochen werden.
      double matrix::Flat(ulong index) const;      // getter
      void matrix::Flat(ulong index,double value); // setter

      Pseudocode zur Berechnung der Adresse eines Matrixelements:

      ulong row=index / mat.Cols();
      ulong col=index % mat.Cols();
      
      mat[row,col]

      Für die "Matrix mat(3,3)" zum Beispiel kann der Zugriff auf die Elemente wie folgt geschrieben werden:

        lesen:        'x=mat.Flat(4)', das 'x=mat[1][1]' entspricht
        schreiben: 'mat.Flat(5, 42)', das 'mat[1][2]=42' entspricht

      Wenn die Funktion mit einem ungültigen Matrixindex aufgerufen wird, wird der kritische Ausführungsfehler OutOfRange ausgeworfen.

    3. Verbesserte Formatierung von Fließkommazahlen in den Eingabeparametern von MQL5-Programmen. Beim Lesen einiger reeller Zahlen wurden Zahlen mit vielen Nullen in den Eingabeparametern ersetzt, z.B. wurde 0.4 als 0.400000000002 dargestellt.
    4. Es wurden Fehler in der Math-Bibliothek Math.mqh behoben. Die Funktion MathSample aus dieser Bibliothek wurde überarbeitet, um dem traditionellen Verhalten ähnlicher mathematischer Bibliotheken beim Sampling mit Backtracking zu entsprechen.
    5. Der CopyTicks/CopyTicksRange-Fehler wurde behoben, der dazu führen konnte, dass beim Überschreiten von Mitternacht veraltete Daten zurückgegeben wurden, wenn keine Ticks für das Finanzinstrument bereitgestellt wurden.
    6. Es wurden die neuen Werte INDICATOR_FIXED_MINIMUM und INDICATOR_FIXED_MAXIMUM in die Enumeration ENUM_CUSTOMIND_PROPERTY_INTEGER aufgenommen.
      Mit Hilfe dieser Eigenschaften können Sie die minimalen und maximalen Indikatorwerte mit der Funktion IndicatorSetInteger fixieren oder wieder aufheben. Beim Aufruf von IndicatorSetInteger(INDICATOR_FIXED_MINIMUM/INDICATOR_FIXED_MAXIMUM, true) wird der aktuelle Minimal- oder Maximalwert verwendet.



    Tester

    1. Überarbeiteter Algorithmus zur Berechnung der Sharpe Ratio, um der traditionellen Formel zu entsprechen, bei der der Wert einem Einjahresintervall entspricht. Der vorherige Algorithmus basierte auf der Variabilität der erzielten PnL und ignorierte Kapitalschwankungen gegenüber offenen Positionen. Jetzt werden die Kapitalschwankungen in die Berechnung einbezogen, während die Sharpe Ratio auf klassische Weise interpretiert wird:
      • Sharpe Ratio < 0              Die Strategie ist unrentabel und nicht geeignet. Schlecht.
      • 0 < Sharpe Ratio  < 1,0   Das Risiko zahlt sich nicht aus. Solche Strategien können in Betracht gezogen werden, wenn es keine Alternativen gibt. Unbestimmt.
      • Sharpe Ratio ≥ 1,0          Wenn die Sharpe Ratio größer als eins ist. Dies kann bedeuten, dass sich das Risiko auszahlt und dass das Portfolio/die Strategie Ergebnisse vorweisen kann. Gut.
      • Sharpe Ratio ≥ 3,0          Ein hoher Wert bedeutet, dass die Wahrscheinlichkeit, bei jedem einzelnen Geschäft einen Verlust zu erleiden, sehr gering ist. Sehr gut.

    Terminal

    1. Optimierter Speicherverbrauch des Terminals.
    2. Verbesserter Plattformbetrieb mit einem Netzwerk-Subsystem, um die Leistung zu steigern und Netzwerkverzögerungen zu reduzieren.
    3. Die Anzeige der Nullebene des Gitters in den Indikatoren wurde entfernt, wenn das Raster-Rendering deaktiviert ist.


    28 Januar 2022
    MetaTrader 5 Build 3180: Vektoren und Matrizen in MQL5 und verbesserte Nutzerfreundlichkeit

    Terminal

    1. Wir laden alle Händler ein, an den Tests teilzunehmen, um die aktualisierten Funktionen der Plattform zu bewerten und Entwicklern bei der Fehlerbehebung zu helfen.

      Diese beiden Aktionen ändern das Chart eines Finanzinstruments in das des ausgewählten Instruments. Zuvor ließen sie das Chart-Fenster nicht aktiv werden. Dementsprechend konnten einige weitere Aktionen, wie das Aufrufen eines Handelsdialogs (F9) oder das Ändern der Skala (+/-) über Hotkeys, fälschlicherweise auf einen anderen Chart aktiv werden. Jetzt wird der Chart, dessen Symbol durch Ziehen verändert wurde, sofort für die weitere Arbeit ausgewählt.

    2. Beim Doppelklick auf einen Handelsvorgang in der Kontohistorie wird nun ein neues Auftragsfenster geöffnet. Ein Finanzinstrument aus dem Vorgang, auf den der Nutzer geklickt hat, wird sofort in den Dialog eingefügt, was einen schnelleren Handel ermöglicht. Ein ähnlicher Befehl wurde dem Kontextmenü hinzugefügt.




    3. Beim Öffnen neuer Charts werden nun auch die realen oder Tick-Volumina angezeigt. Diese Daten sind wichtig für die Analyse des Marktes. Allerdings sind sich nicht alle Händler der Verfügbarkeit dieser Daten auf der Plattform bewusst.

      Echte Handelsvolumina haben eine höhere Priorität. Wenn sie von einem Broker zur Verfügung gestellt werden, ist ihre Anzeige im Chart aktiviert. Andernfalls wird die Anzeige von Tick-Volumen aktiviert.

      Der Mechanismus wird nur verwendet, wenn der Chart mit der Standardvorlage default.tpl geöffnet wird. Volumina werden beim erneuten Öffnen eines Charts nicht mehr aktiviert, wenn ein Nutzer sie manuell in den Chart-Einstellungen deaktiviert hat. Nutzerdefinierte Vorlagen sind davon nicht betroffen.

    4. Die Anzeige der Nutzeroberfläche wurde optimiert und stark beschleunigt.
    5. Die Druckfunktion für Charts, die über das Menü "Datei" aufgerufen wird, wurde verbessert:
      • Fehler beim Speichern der Druckeinstellungen behoben.
      • Verbessertes Erscheinungsbild der gedruckten Seite: Vergrößerte Gitternetzlinien, Entfernung des Programmnamens, aktualisierte Schriftart der Kopfzeile
      • Vergrößerung des Druckdialogs zur korrekten Darstellung der Nutzeroberfläche

    6. Die Funktion des Volumenfelds im Schnellhandelspanel des Charts wurde korrigiert. Vor der Korrektur wurde der Wert auf den vorherigen Wert zurückgesetzt, nachdem ein neuer Wert eingegeben und die Tabulatortaste gedrückt wurde.
    7. Die Anzeige des Handelsverlaufs im Chart wurde korrigiert. Zuvor wurden die Operationen des vorherigen Kontos nicht aus den Charts entfernt, wenn zwischen den Konten gewechselt wurde.
    8. Die Zahlung für MQL5.com über PayPal wurde korrigiert.
    9. Das Einfrieren der Plattform bei der Anzeige eines Options-Volatilitäts-Charts wurde behoben.
    10. Die Überprüfung der Telefonnummer im Fenster für die Registrierung eines Echtgeldkontos wurde korrigiert. In einigen Fällen erlaubte die Plattform einem Nutzer nicht, mit der nächsten Registrierungsphase fortzufahren, nachdem eine korrekte Nummer eingegeben wurde.
    11. Die Überprüfung der Rechte beim Beitritt zu einem Gruppenchat mit MQL5.com-Mitgliedern wurde korrigiert. Zuvor konnte ein neu hinzugekommener Nutzer Nachrichten nur lesen, aber nicht schreiben.
    12. Der Text für im Chart fehlende Daten wurde geändert. Jetzt wird "Waiting for update" durch den Symbolnamen, Zeitrahmen und das Symbol ersetzt.
    13. Verbesserte Unterstützung für negative Preise, die in Build 2450 hinzugefügt wurden. Nullwerte können nun auch für die entsprechenden Market Watch Symbole angezeigt werden.
    14. Die Anzeige von Produktlogos im Market bei der Arbeit unter Wine wurde korrigiert.

    MQL5

    1. Wir erweitern die Unterstützung für Vektoren und Matrizen. Die neuen Funktionen erweitern die Möglichkeiten für Entwickler von Lösungen auf Basis neuronaler Netze erheblich.

      Mehrere Funktionen sind derzeit einsatzbereit:
      • Eye — konstruiert eine Matrix mit Einsen auf einer bestimmten Diagonale und Nullen an den anderen Stellen.
      • Identity — konstruiert eine Matrix mit einer bestimmten Größe mit Einsen auf der Hauptdiagonale und Nullen an den anderer Stelle.
      • Ones — konstruiert eine Matrix mit einer bestimmten Größe, die mit Einsen gefüllt ist.
      • Zeroes — konstruiert eine Matrix mit einer bestimmten Größe, die mit Nullen gefüllt ist.
      • Full — konstruiert eine Matrix mit einer bestimmten Größe, die mit anzugebenden Werten gefüllt ist.
      • Copy — konstruiert eine Kopie einer Matrix oder eines Vektors.
      • Diag — extrahiert eine Diagonale aus einer Matrix und füllt die angegebene Diagonale mit Werten aus einem Vektor.
      • Tri — konstruiert eine Matrix mit Einsen auf der angegebenen Diagonale und darunter, und Nullen an den anderen Stellen.
      • Row — gibt eine Matrixzeile als Vektor zurück und füllt die angegebene Zeile mit Werten aus dem Vektor.
      • Col — gibt eine Matrixspalte als Vektor zurück und füllt die angegebene Spalte mit Werten aus dem Vektor.
      • Rows — gibt die Anzahl der Zeilen in einer Matrix zurück.
      • Cols — gibt die Anzahl der Spalten in einer Matrix zurück.
      • Transpose — transponiert eine Matrix.
      • * — Produkt von Matrizen, Vektoren und Skalaren — Punktprodukt.
      • Power — erhöht eine Matrix auf die Potenz.
      • Kron — Kronecker-Produkt.
      • Cholesky — Cholesky-Zerlegung.
      • QR — QR-Faktorisierung einer Matrix.
      • SVD — Singulärzerlegung.
      • LU — LU-Zerlegung einer Matrix.
      • LUP — LUP-Zerlegung einer Matrix.
      • Norm — Berechnung der Matrixnorm.
      • Cond — berechnet die Bedingungszahl einer Matrix.
      • Spectrum — Berechnen des Spektrums einer Matrix.
      • Det — berechnet die Determinante einer Matrix.
      • Rang — berechnet den Rang einer Matrix.
      • SLogDet — berechnet das Vorzeichen und den Basislogarithmus der Determinante einer Matrix.
      • Trace — berechnet die Spur einer Matrix.
      • Solve — löst ein System linearer Gleichungen.
      • LstSq — löst ein System linearer Gleichungen mit der Methode der kleinsten Quadrate.
      • Inv — berechnet die Inverse einer Matrix.
      • PInv — Berechnung der Pseudo-Inverse einer Matrix nach der Moore-Penrose-Methode.
      • Compare — vergleicht zwei Matrizen mit Hilfe von Epsilon.

      Für weitere Details lesen Sie bitte die entsprechende MQL5 Dokumentation.

    2. Fehler beim Umgang mit Dateien und Datenbanken im Zusammenhang mit der Pfadlängenbegrenzung behoben. Insbesondere die Funktion DatabaseOpen erlaubte es, eine Pfadangabe größer als die zulässige Länge zu setzen, was zu einer fehlerhaften Datenbankerstellung führte. Jetzt gibt die Funktion den Fehlercode ERR_TOO_LONG_FILE_NAME korrekt zurück.
    3. Die Kontrolle der const Variablen wurde korrigiert. Zuvor hatte der Compiler den Fehler "Konstante Variable kann nicht als Referenz übergeben werden" gelegentlich nicht ausgeworfen.
    4. Fehlerhafte Compiler-Warnungen über die Verwendung einer nicht initialisierten Variable behoben.
    5. Die Funktion ChartWindowOnDropped für Indikatoren wurde korrigiert. Zuvor gab sie immer Null zurück.
    6. Die Unterstützung von Python 3.10 zum Modul Python Integration wurde hinzugefügt.

    VPS

    1. Die Darstellung des VPS-Elements im Navigator wurde korrigiert. Zuvor konnte es gelegentlich verschwinden, wenn zwischen Konten gewechselt wurde.

    MetaEditor

    1. Das Entpacken von komplexen Ausdrücken im Beobachtungsfenster des Debuggers wurde korrigiert.

    Tester

    1. Der Export von Testberichten in Dateien wurde korrigiert. Einige Werte konnten falsch gerundet werden, wenn eine Währung mit einer Genauigkeit von 0 Dezimalstellen als Einzahlungswährung verwendet wurde. Zum Beispiel: JPY.
    22 Oktober 2021
    MetaTrader 5 Build 3091: Verbesserungen

    Terminal

    1. Das Öffnen einer leeren Seite beim Kauf von MQL5-Diensten wurde behoben. Die Operationsergebnisse werden dem Nutzer jetzt sofort angezeigt.
    2. Die übermäßige Komprimierung von Dokumentenbildern, die Nutzer bei der Anforderung von echten Konten hochladen, wurde behoben. Dies hat die Qualität der automatischen KYC-Prüfungen verbessert und das gesamte Kontoeröffnungsverfahren vereinfacht.
    3. Die Funktion der Grafiken, die nach Abschluss der Prüfung geöffnet werden, wurde korrigiert.

    MQL5

    1. Unterstützung für SQLite 3.36.0 hinzugefügt.

    MetaEditor

    1. Hintergrundhervorhebung für passende Klammern hinzugefügt. Die Option kann in den Allgemeinen Einstellungen von MetaEditor aktiviert werden.
    2. Der Debugger für MQL5 Programme wurde verbessert.

    Fehler in den Absturz-Logs behoben.
    Zurück123456