Nouvelle version de la Plateforme MetaTrader 5 Build 5260 : Améliorations dans Algo Forge et nouvelles règles d'héritage dans MQL5

Dans cette version, nous continuons à développer la bibliothèque d'algèbre linéaire OpenBLAS dans MQL5 avec un nouvel ensemble de fonctions. Ces méthodes offrent aux développeurs un cycle de transformation complet, de la préparation préliminaire des matrices au calcul précis et stable des spectres

5 septembre 2025

Terminal

  1. Correction de l'affichage des paramètres de marge dans les spécifications des symboles de trading. Auparavant, en cas d'utilisation d'un effet de levier flottant (par exemple, calculé sur la base du volume de la position du compte), les paramètres de marge dans les spécifications du contrat pouvaient être affichés de manière incorrecte.
  2. Correction du tri du carnet d'ordres pour les symboles dont les prix négatifs sont autorisés. Les ordres avec des prix positifs, négatifs et nuls sont désormais affichés correctement et dans l'ordre. 
  3. Le guide de l'utilisateur du terminal comprend désormais une nouvelle section Comment le Testeur télécharge les données historiques. Il résume les points clés nécessaires pour comprendre comment le Testeur de Stratégie fonctionne avec l'historique de trading. Pour garantir la stabilité des calculs, le testeur charge toujours une "mémoire tampon de l'historique avant le démarrage" :
    • D1 et moins — à partir du début de l'année civile précédente. Cela permet de disposer d'un historique d'au moins 1 an. Exemple : si la date de début du test est le 01/03/2023, le terminal téléchargera depuis le terminal les données depuis le 01/01/2022. Cela équivaut à 14 mois avant le début du test.
    • W1 — au moins 100 barres hebdomadaires (~2 ans).
    • MN1 — au moins 100 barres mensuelles (~8 ans).

    Si l'historique disponible est insuffisant, le testeur avance automatiquement la date de début réelle au point le plus proche répondant aux exigences.

    Dans ce cas, les tests commencent plus tard que la date spécifiée par l'utilisateur. Le journal du testeur affichera un message correspondant, par exemple :

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


MQL5 

  1. Ajout de 5 nouvelles méthodes OpenBLAS dans la section Matrix Balance, élargissant la fonctionnalité pour les matrices carrées. Le nouvel ensemble de fonctions fournit :
    • L’équilibrage des matrices pour une meilleure précision dans les calculs des valeurs propres
    • Les transformations arrière des vecteurs propres
    • La réduction à la forme de Hessenberg et à la décomposition de Schur, y compris la génération de matrices orthogonales

    Ces méthodes offrent aux développeurs un cycle de transformation complet, de la préparation préliminaire de la matrice au calcul précis et stable du spectre.

    Les méthodes sont basées sur des algorithmes LAPACK (GEBAL, GEBAK, GEHRD, ORGHR, HSEQR), ce qui garantit des performances et une fiabilité élevées :

    • MatrixBalance : Équilibre une matrice réelle ou complexe générale en permutant les lignes et les colonnes et en appliquant des transformations de similarité diagonale. L'équilibrage peut réduire la norme 1 de la matrice et améliorer la précision des valeurs propres et/ou des vecteurs propres calculés (fonction LAPACK GEBAL).
    • EigenVectorsBackward : Forme les vecteurs propres de droite ou de gauche d'une matrice générale réelle ou complexe par transformation à rebours des vecteurs propres calculés de la matrice équilibrée (fonction LAPACK GEBAK). 
    • ReduceToHessenbergBalanced : Réduit une matrice équilibrée générale réelle ou complexe à la forme de Hessenberg supérieure par une transformation de similarité orthogonale (fonction LAPACK GEHRD).
    • ReflectHessenbergBalancedToQ : Génère la matrice orthogonale Q qui est définie comme le produit des réflecteurs élémentaires d'ordre n générés par la réduction à la forme de Hessenberg (fonction LAPACK ORGHR).
    • EigenHessenbergBalancedSchurQ : Calcule les valeurs propres d'une matrice de Hessenberg et les matrices T et Z de la décomposition de Schur ; en option, calcule la factorisation de Schur d'une matrice d'entrée réduite à la forme de Hessenberg (fonction LAPACK HSEQR).


  2. Ajout de 2 nouvelles méthodes dans la section Valeurs propres. Les deux fonctions calculent efficacement les vecteurs propres après la décomposition de Schur, complétant ainsi l'ensemble des outils d'algèbre linéaire de MQL5 :

    • EigenVectorsTriangularZ : Calcule les vecteurs propres d'une matrice réelle quasi-triangulaire supérieure ou triangulaire supérieure complexe (forme de Schur). Utilise la décomposition A = Q - T - Qᴴ (fonction LAPACK TREVC). Offre une grande précision.
    • EigenVectorsTriangularZBlocked : Version en bloc pour le calcul des vecteurs propres d'une matrice réelle quasi-triangulaire supérieure ou triangulaire supérieure complexe (fonction LAPACK TREVC3). Plus rapide mais moins précis.


  3. Introduction d'un changement important dans l'héritage avec la nouvelle règle de dissimulation des méthodes

    Auparavant, si une classe ou une structure dérivée définissait une méthode portant le même nom que dans la classe de base, la surcharge était effectuée : toutes les versions (du parent et de l'enfant) étaient disponibles dans la classe dérivée. Or, les méthodes portant le même nom dans une classe dérivée cachent les méthodes de la classe de base (method hiding).

    Pour appeler une méthode cachée de la classe de base, vous devez spécifier explicitement sa portée lors de l'appel :
    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
      }
    Depuis un certain temps, le compilateur MQL5 émet un avertissement si une méthode de base cachée correspond mieux aux paramètres de l'appel que la méthode dérivée disponible. Exemple pour le code ci-dessus d.Print(10) :
    call resolves to 'void Derived::Print(string)' instead of 'void Base::Print(int)' due to new rules of method hiding
       see declaration of function 'Derived::Print'
       see declaration of function 'Base::Print'
    implicit conversion from 'number' to 'string'

  4. Ajout de l'opérateur using pour restaurer les surcharges des méthodes de la classe de base.

    Pour contrôler ce nouveau comportement, MQL5 introduit l'opérateur 'using'. Il permet de "tirer" toutes les surcharges d'une méthode du type de base dans la portée d'une classe ou d'une structure :
    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)
      }
    Si "using Base::Print ;" est supprimé, les appels à d.Print(42) et d.Print(3.14) seront indisponibles ; seul Derived::Print(string) subsistera.

    Dans cet exemple, vous pouvez également voir que les méthodes protégées de la classe de base deviennent accessibles dans la classe dérivée (leur visibilité passe de protégée à publique).

    Les développeurs disposent ainsi d'un contrôle plus souple et plus prévisible sur les hiérarchies de classes, ce qui leur permet de définir précisément quelles surcharges de méthodes de la classe de base doivent rester accessibles dans les types dérivés.

MetaEditor

  1. Calculs de hachage SHA-1 accélérés pour les opérations Git dans Algo Forge. L'amélioration des performances est supérieure à 40% pour les opérations en masse.
  2. Correction des vérifications de modification de fichiers pour les opérations Git. Si seule l'heure de modification change mais que le contenu du fichier reste le même, le fichier n'est plus considéré comme modifié. Cela permet d'éliminer les fausses détections et d'éviter les conflits avec les dépôts distants.


Algo Forge

Publication du Guide de l'Utilisateur MQL5 Algo Forge. Il met en évidence tous les avantages clés de Git sans complexité inutile :
  1. un stockage fiable de l'historique des versions et des branchements,
  2. l'expérimentation rapide et la fusion sûre des modifications,
  3. créer votre propre dépôt ou forker les projets d'autres développeurs en un seul clic,
  4. une collaboration transparente au sein de l'équipe avec un suivi des contributions,
  5. un catalogue de projets ouverts offrant la possibilité d'apprendre des autres.


    Cloner le projet d'un autre développeur
    Ouvrez le projet que vous souhaitez cloner sur forge.mql5.io et cliquez sur Fork. Saisissez un nom et une description pour le fork et enregistrez.

    Cloner un projet

    Dans MetaEditor, en utilisant le même compte MQL5, exécutez la commande Rafraîchir dans le Navigateur. Votre fork apparaîtra dans le dossier Projets partagés. Téléchargez-le depuis Algo Forge en utilisant Git Clone. Vous recevrez non seulement les fichiers du projet, mais aussi l'historique complet des livraisons et toutes les branches. Cela signifie que vous pouvez continuer à travailler sur le fork tout en conservant l'historique complet du projet cloné.  

    Commande Git Clone dans Algo Forge


Terminal Web

  1. Correction de l'affichage des sessions de trading et de cotation dans les spécifications des symboles.
  2. Correction de l'affichage des titlehttps://www.metatrader5.com/fr/terminal/help/trading/market_watch#specificationtitleparamètres de marge dans les spécifications des symboles.
  3. Correction de l'affichage des sessions de trading et de cotation dans les spécifications des symboles.
  4. Ajout de la prise en charge du type de compte Championnat. Ces comptes sont affichés en bleu, alors que les comptes de démonstration apparaissent en vert.
  5. Correction de l'exactitude des calculs de marge de l'effet de levier dans certaines conditions. 
  6. Correction d'un problème lors de l'ouverture d'un nouveau compte où le bouton "Suivant" ne permettait pas toujours de passer à l'étape suivante.
  7. Correction d'un problème où il n'était pas possible de placer un ordre limité entre les prix Bid et Ask pour une exécution en Bourse.
  8. Correction de l'affichage des prix d'exécution des ordres. Une fois l'ordre envoyé, les résultats de son exécution apparaissent dans la fenêtre : une opération réussie ou la raison pour laquelle l'ordre n'a pas été exécuté. Dans certains cas, le prix d'exécution était incorrectement indiqué comme étant "0".
  9. Correction d'un problème où le bouton de fermeture de la position rapide ne s'affichait pas.

    Bouton de fermeture de position

  10. Correction de l'affichage des devises des comptes de trading dans la fenêtre de sélection des comptes.