Der neue MetaTrader 5 Build 5260: Verbesserungen in Algo Forge und neue Vererbungsregeln in MQL5

In diesem Build erweitern wir die OpenBLAS-Bibliothek für lineare Algebra in MQL5 mit einer neuen Reihe von Funktionen. Diese Methoden bieten den Entwicklern einen vollständigen Transformationszyklus, von der Vorbereitung der Matrix bis zur präzisen und stabilen Berechnung des Spektrums

5 September 2025

Terminal

  1. Die Anzeige der Margin-Einstellungen in den Spezifikationen für Handelssymbole wurde korrigiert. Bei der Verwendung eines variablen Hebels (z. B. berechnet auf der Grundlage des Positionsvolumens des Kontos) konnten früher die Margin-Parameter in den Kontraktspezifikationen falsch angezeigt werden.
  2. Die Sortierung des Orderbuchs für Symbole mit negativen Preisen wurde korrigiert. Aufträge mit positiven, negativen und Null-Preisen werden jetzt korrekt und in der richtigen Reihenfolge angezeigt. 
  3. Das Benutzerhandbuch des Terminals enthält jetzt einen neuen Abschnitt „Wie der Tester historische Daten herunterlädt“. Er fasst die wichtigsten Punkte zusammen, die zum Verständnis der Funktionsweise des Strategy Testers mit der Handelshistorie erforderlich sind. Um die Stabilität der Berechnungen zu gewährleisten, lädt der Tester immer einen „Pre-Start Puffer der Historie“:
    • D1 und darunter — ab dem Beginn des vorangegangenen Kalenderjahres. Damit steht mindestens 1 Jahr lang eine Historie zur Verfügung. Beispiel: Wenn das Startdatum des Tests der 01.03.2023 ist, lädt das Terminal die Daten vom 01.01.2022 herunter. Dies entspricht 14 Monaten vor Beginn des Tests.
    • W1 — mindestens 100 Wochen-Balken (~2 Jahre).
    • MN1 — mindestens 100 Wochen-Balken (~8 Jahre).

    Wenn die verfügbare Historie nicht ausreicht, verschiebt der Tester das tatsächliche Startdatum automatisch auf den nächstliegenden Zeitpunkt, der den Anforderungen entspricht.

    In solchen Fällen beginnt der Test später als zu dem vom Nutzer angegebenen Datum. Im Protokoll des Testers wird eine entsprechende Meldung angezeigt, z. B:

    start time changed to 2024.03.15 00:00 to provide data at beginning


MQL5

  1. Es wurden fünf neue OpenBLAS-Methoden im Abschnitt Matrix Balance hinzugefügt, die die Funktionalität für quadratische Matrizen erweitern. Der neue Satz von Funktionen bietet:
    • Matrix Balance für verbesserte Genauigkeit bei Eigenwertberechnungen.
    • Rücktransformationen von Eigenvektoren.
    • Reduktion auf die Hessenberg-Form und Schur-Zerlegung, einschließlich der Erzeugung einer orthogonalen Matrix.

    Diese Methoden bieten den Entwicklern einen vollständigen Transformationszyklus, von der Vorbereitung der Matrix bis zur präzisen und stabilen Berechnung des Spektrums.

    Die Methoden basieren auf LAPACK-Algorithmen (GEBAL, GEBAK, GEHRD, ORGHR, HSEQR), die eine hohe Leistungsfähigkeit und Zuverlässigkeit gewährleisten:

    • MatrixBalance: Saldiert eine allgemeine reelle oder komplexe Matrix durch Permutation von Zeilen und Spalten und Anwendung diagonaler Ähnlichkeitstransformationen. Der Ausgleich kann die 1-Norm der Matrix reduzieren und die Genauigkeit der berechneten Eigenwerte und/oder Eigenvektoren verbessern (LAPACK-Funktion GEBAL).
    • EigenVectorsBackward: Bildet die rechten oder linken Eigenvektoren einer reellen oder komplexen allgemeinen Matrix durch Rückwärtstransformation auf die berechneten Eigenvektoren der ausgeglichenen Matrix (LAPACK-Funktion GEBAK). 
    • ReduceToHessenbergBalanced: Reduziert eine reelle oder komplexe allgemeine symmetrische Matrix durch eine orthogonale Ähnlichkeitstransformation in die obere Hessenberg-Form (LAPACK-Funktion GEHRD).
    • ReflectHessenbergBalancedToQ: Erzeugt eine orthogonale Matrix Q, die definiert ist als das Produkt elementarer Reflektoren der Ordnung n, wie sie durch Reduktion auf die Hessenberg-Form erzeugt werden (LAPACK-Funktion ORGHR).
    • EigenHessenbergBalancedSchurQ: Berechnet die Eigenwerte einer Hessenberg-Matrix und die Matrizen T und Z aus der Schur-Zerlegung; optional wird die Schur-Faktorisierung einer auf die Hessenberg-Form reduzierten Eingabematrix berechnet (LAPACK-Funktion HSEQR).


  2. Zwei neue Methoden wurden im Abschnitt Eigenwerte hinzugefügt. Beide Funktionen berechnen auf effiziente Weise Eigenvektoren nach der Schur-Zerlegung und vervollständigen damit den vollständigen Satz an linearen Algebra-Werkzeugen in MQL5:

    • EigenVectorsTriangularZ: Berechnet Eigenvektoren einer reellen oberen quasi-dreieckigen oder komplexen oberen Dreiecksmatrix (Schur-Form). Verwendet die Zerlegung A = Q - T - Qᴴ (LAPACK-Funktion TREVC). Bietet hohe Genauigkeit.
    • EigenVectorsTriangularZBlocked: Blockversion zur Berechnung von Eigenvektoren einer reellen oberen quasi-dreieckigen oder komplexen oberen Dreiecksmatrix (LAPACK-Funktion TREVC3). Schneller, aber nicht so genau.


  3. Einführung einer wichtigen Änderung bei der Vererbung mit der neuen Regel zum Ausblenden von Methoden

    Wenn früher eine abgeleitete Klasse oder Struktur eine Methode mit demselben Namen wie in der Basisklasse definierte, wurde sie überladen: Alle Versionen (sowohl von der Eltern- als auch von der Kindklasse) waren in der abgeleiteten Klasse verfügbar. Jetzt verbergen Methoden mit demselben Namen in einer abgeleiteten Klasse die Methoden der Basisklasse (method hiding).

    Um eine verborgene Basisklassenmethode aufzurufen, müssen Sie ihren Anwendungsbereich beim Aufruf explizit angeben:
    class Base
      {
    public: 
       void Print(int x)   { ::Print("Base int: ", x); }
       void Print(double y){ ::Print("Base double: ", y); }
      };
    
    class Derived : public Base
      {
    public:
       void Print(string s){ ::Print("Derived string: ", s); }
      };
    
    void OnStart()
      {
       Derived d;
       d.Print("text");    // call of Derived::Print(string)
       d.Print(10);        // ATTENTION! Calling Derived::Print(string) since Base::Print is hidden (inaccessible)
       d.Base::Print(10);  // explicit call to hidden parent method
      }
    Seit einiger Zeit gibt der MQL5-Compiler eine Warnung aus, wenn eine ausgeblendete Basismethode besser zu den Aufrufparametern passt als die verfügbare, abgeleitete Methode. Beispiel für den obigen Code d.Print(10):
    Der Aufruf wird zu 'void Derived::Print(string)' anstelle von 'void Base::Print(int)' aufgrund der neuen Regeln für das Verstecken von Methoden
       siehe Deklaration der Funktion 'Derived::Print'
       siehe Deklaration der Funktion 'Base::Print'
    implizite Umwandlung von 'int' in 'string'

  4. Der Operator using zur Wiederherstellung von Überladungen von Basisklassenmethoden wurde hinzugefügt.

    Um das neue Verhalten zu steuern, führt MQL5 den Operator 'using' ein. Damit können Sie alle Überladungen einer Methode vom Basistyp in den Geltungsbereich einer Klasse oder Struktur „ziehen“:
    class Base
      {
    protected:
       void Print(int x)   { ::Print("Base int: ", x); }
       void Print(double y){ ::Print("Base double: ", y); }
      };
    
    class Derived : public Base
      {
    public:
       void Print(string s){ ::Print("Derived string: ", s); }
       using Base::Print;  // return Print overloads from Base
      };
    
    void OnStart()
      {
       Derived d;
       d.Print("text");   // Derived::Print(string)
       d.Print(42);       // Base::Print(int)
       d.Print(3.14);     // Base::Print(double)
      }
    Wenn 'using Base::Print;' entfernt wird, sind die Aufrufe von d.Print(42) und d.Print(3.14) nicht mehr verfügbar; nur Derived::Print(string) bleibt übrig.

    Außerdem können Sie in diesem Beispiel sehen, dass geschützte Methoden der Basisklasse in der abgeleiteten Klasse zugänglich werden (ihre Sichtbarkeit ändert sich von geschützt zu öffentlich).

    Dies gibt Entwicklern eine flexiblere und vorhersehbare Kontrolle über Klassenhierarchien und ermöglicht es ihnen, genau zu definieren, welche Überladungen von Basisklassenmethoden in abgeleiteten Typen zugänglich bleiben sollen.

MetaEditor

  1. Beschleunigte SHA-1-Hash-Berechnungen für Git-Operationen in Algo Forge. Leistungsverbesserungen von über 40 % bei Massenoperationen.
  2. Die Datei-Änderungsprüfungen für Git-Operationen wurden korrigiert. Wenn sich nur die Änderungszeit ändert, der Inhalt der Datei aber gleich bleibt, wird die Datei nicht mehr als geändert behandelt. Dadurch werden falsche Erkennungen vermieden und Konflikte mit entfernten Repositories verhindert.


Algo Forge

  1. Veröffentlicht Algo Forge Benutzerhandbuch. Es hebt alle wichtigen Vorteile von Git hervor, ohne unnötige Komplexität:
    • zuverlässige Speicherung der Versionsgeschichte und Verzweigung,
    • schnelles Experimentieren und sicheres Zusammenführen von Änderungen,
    • erstellen Sie Ihr eigenes Repository oder forken Sie die Projekte anderer Entwickler mit einem Klick,
    • transparente Teamarbeit mit nachvollziehbaren Beiträgen,
    • einen Katalog offener Projekte mit der Möglichkeit, von anderen zu lernen.


    Klonen des Projekts eines anderen Entwicklers
    Öffnen Sie das Projekt, das Sie klonen möchten, auf forge.mql5.io und klicken Sie auf Fork. Geben Sie einen Namen und eine Beschreibung für den Klon ein und speichern Sie ihn.

    Klonen eines Projekts

    Führen Sie in MetaEditor unter Verwendung desselben MQL5-Kontos den Befehl Aktualisieren im Navigator aus. Ihre Fork wird im Ordner Shared Projects angezeigt. Laden Sie es von Algo Forge mit Git Clone herunter. Sie erhalten nicht nur die Projektdateien, sondern auch den vollständigen Commit-Verlauf und alle Zweige. Das bedeutet, dass Sie an dem Fork weiterarbeiten können und gleichzeitig die gesamte Historie des geklonten Projekts zur Verfügung haben.  

    Git-Klon-Befehl in Algo Forge


Web-Terminal

  1. Die Anzeige von Handels- und Quotierungssitzungen in den Spezifikationen des Symbols wurde korrigiert.
  2. Die Anzeige der Margin-Einstellungen in den Symbolspezifikationen wurde korrigiert.
  3. Die Anzeige von Handels- und Quotierungssitzungen in den Spezifikationen des Symbols wurde korrigiert.
  4. Unterstützung für den Kontotyp Wettbewerb wurde hinzugefügt. Solche Konten werden in blau angezeigt, während Demokonten in grün erscheinen.
  5. Die Genauigkeit der Berechnungen der Hebelmarge wurde unter bestimmten Bedingungen korrigiert. 
  6. Bei der Eröffnung eines neuen Kontos wurde ein Problem behoben, bei dem die Schaltfläche Weiter manchmal nicht zum nächsten Schritt führte.
  7. Es wurde ein Problem behoben, bei dem es nicht möglich war, eine Limit-Order zwischen Geld- und Briefkursen für die Ausführung von Exchange zu platzieren.
  8. Die Anzeige der Preise für die Auftragsausführung wurde korrigiert. Sobald ein Auftrag gesendet wurde, erscheint das Ergebnis der Ausführung, erfolgreich oder fehlgeschlagen. In einigen Fällen wurde der Ausführungspreis fälschlicherweise als „0“ angezeigt.
  9. Ein Problem wurde behoben, bei dem die Schaltfläche zum schnellen Schließen der Position nicht angezeigt wurde.

    Schaltfläche „Position schließen“

  10. Die Anzeige der Handelskontowährungen im Kontoauswahlfenster wurde korrigiert.