Mises à jour : MetaTrader 5

L'historique des mises à jour des plateformes de bureau, mobile et web

16 décembre 2022
MetaTrader 5 build 3550 : Améliorations et corrections

Terminal

  1. Terminal : Mise à jour des traductions de l'interface utilisateur.
  2. Corrections basées sur les journaux d'incidents.

Terminal Web

9 décembre 2022
MetaTrader 5 build 3540 : Authentification 2FA/TOTP et amélioration du Market Watch dans le terminal Web

Terminal Web

  1. Ajout de l'authentification 2FA/TOTP à l'aide de Google Authenticator et d'applications similaires.

    L'authentification forte 2FA/TOTP protège un compte de trading contre tout accès non autorisé même si son identifiant et son mot de passe sont divulgués. L'authentification à l'aide de l'algorithme de mot de passe à usage unique (TOTP) basé sur le temps peut être mis en œuvre à l'aide de diverses applications mobiles. Les plus populaires d'entre elles sont Google Authenticator, Microsoft Authenticator, LastPass Authenticator et Authy. Vous pouvez maintenant vous connecter à votre compte dans le terminal client MetaTrader 5 en utilisant des mots de passe à usage unique générés par ces applications Authenticator.

    Pour activer l'option d'authentification à deux facteurs, connectez-vous à votre compte via le terminal Web MetaTrader 5. Cliquez ensuite sur votre compte dans le menu et sélectionnez "Activer 2FA/TOTP" dans la boîte de dialogue qui s'ouvre. Exécutez l'application Authenticator sur votre appareil mobile, cliquez sur "+" pour ajouter votre compte de trading et scannez le QR code depuis le terminal. Saisissez le code généré dans le champ "Mot de passe à usage unique" et cliquez sur "Activer la 2FA". Un secret sera enregistré pour votre compte sur le serveur de trading du courtier.


    Ajout de la prise en charge de l'authentification 2FA/TOTP à l'aide de Google Authenticator et d'applications similaires


    Le secret enregistré sera utilisé dans l'application Authenticator pour générer un code OTP chaque fois que vous vous connectez à votre compte. Chaque mot de passe est valide pendant 30 secondes. Après cela, un nouveau mot de passe est généré.


    Un OTP supplémentaire de l'application Authenticator sera nécessaire pour se connecter au compte


    Un code de sauvegarde est également affiché dans la boîte de dialogue du QR code pour la liaison avec le générateur. Sauvegardez-le dans un endroit sûr. Si vous perdez l'accès à votre appareil lié, le code vous permettra d'ajouter à nouveau votre compte à l'application Authenticator.

    Si vous décidez de supprimer le secret stocké de l'application Authenticator, vous devez d'abord désactiver l'authentification 2FA/TOTP à l'aide de la commande correspondante du menu contextuel du compte. Si la nouvelle méthode d'authentification 2FA/TOTP n'est pas disponible sur votre compte, veuillez contacter votre courtier.

  2. Augmentation de la quantité de données affichées dans le Market Watch. Maintenant, en plus des prix d'achat et de vente actuels et du pourcentage de changement de prix, vous pouvez voir :

    • Prix maximum et minimum de l'offre et de la demande pour la session de trading en cours
    • Prix d'ouverture de la session de trading actuelle et prix de clôture de la session de trading précédente

    Utilisez le menu contextuel pour personnaliser les informations affichées :


    Données supplémentaires du Market Watch


  3. Ajout de l'affichage de la notification de risque lorsqu'un paramètre correspondant est activé du côté du courtier. Certains régulateurs exigent que les traders lisent et acceptent la notification avant de négocier.
  4. Correction de l'affichage de la barre d'outils supérieure sur les modèles d'iPhone présentant une encoche en haut de l'écran. Auparavant, il pouvait occasionnellement couvrir les boutons du panneau.
  5. Correction de l'affichage des paramètres financiers finaux du compte (bénéfice, fonds propres, etc.) dans le navigateur Google Chrome. Parfois, ils n'étaient pas mis à jour.

Terminal Client

  1. Boîte de dialogué d’ouverture d’un compte de démo optimisée et grandement accélérée.
  2. Mise à jour des traductions de l'interface utilisateur.
  3. Corrections basées sur les journaux d'incidents.

MQL5

  1. Ajout de nouvelles méthodes à la classe COpenCL de la Bibliothèque Standard :

    • BufferFromMatrix - remplissage du tampon du périphérique avec des données provenant de la matrice
    • BufferToMatrix - lecture des données du tampon du périphérique dans la matrice
    • ContextCreate - création du contexte du périphérique (la première partie de la méthode Initialize)
    • ProgramCreate - création d'un programme basé sur le code source OpenCL (la deuxième partie de la méthode Initialize)
    • ContextClean - libération de toutes les données appartenant au contexte du périphérique (similaire à la méthode Shutdown mais sans supprimer le contexte)
    • GetDeviceInfoInteger - pour récupérer une propriété de type "integer" du périphérique
    • GetKernelInfoInteger - pour récupérer une propriété de type "integer" du noyau
    • GetDeviceInfo - pour récupérer n’importe quelle propriété de type "integer" du périphérique non présente dans l'énumération ENUM_OPENCL_PROPERTY_INTEGER

    Exemple d'utilisation de GetDeviceInfo :
    long preferred_workgroup_size_multiple = OpenCL.GetDeviceInfo(0x1067);
  2. Ajout des valeurs TERMINAL_CPU_NAME et TERMINAL_OS_VERSION dans l'énumération ENUM_TERMINAL_INFO_STRING. Ils permettent d’obtenir les noms du processeur et du système d'exploitation de l'utilisateur.
    void OnStart()
      {
       string  cpu, os;
    //---
       cpu = TerminalInfoString(TERMINAL_CPU_NAME);
       os = TerminalInfoString(TERMINAL_OS_VERSION);
       PrintFormat("CPU : %s, OS : %s", cpu, os);
      }
    
    Résultat :
    CPU : Intel Xeon E5-2630 v4 @ 2.20GHz, OS : Windows 10, version 19045
  3. Correction du fonctionnement du paramètre "table_or_sql" dans les fonctions DatabasePrint et DatabaseExport. Il est maintenant possible de passer un nom de table en plus d'une requête SQL.

MetaEditor

  1. Correction de la vérification du nombre maximum de colonnes affichables dans la base de données. Il est désormais possible d'afficher jusqu'à 64 colonnes.
  2. Correction du fonctionnement des points d'arrêt dans les constructions courtes comme IF[ if (condition) break; ].
25 novembre 2022
MetaTrader 5 build 3520 : Authentification 2FA/TOTP avec Google Authenticator

Terminal

  1. Ajout de l'authentification 2FA/TOTP à l'aide de Google Authenticator et d'applications similaires.

    L'authentification forte 2FA/TOTP protège un compte de trading contre tout accès non autorisé même si son identifiant et son mot de passe sont divulgués. L'authentification à l'aide de l'algorithme de mot de passe à usage unique (TOTP) basé sur le temps peut être mis en œuvre à l'aide de diverses applications mobiles. Les plus populaires d'entre elles sont Google Authenticator, Microsoft Authenticator, LastPass Authenticator et Authy. Vous pouvez maintenant vous connecter à votre compte dans le terminal client MetaTrader 5 en utilisant des mots de passe à usage unique générés par ces applications Authenticator.

    Pour activer l'option d'authentification à 2 facteurs, connectez-vous à votre compte et exécutez la commande "Activer la 2FA/TOTP" dans le menu contextuel du compte. Exécutez l'application Authenticator sur votre appareil mobile, cliquez sur "+" pour ajouter votre compte de trading et scannez le QR code depuis le terminal. Saisissez le code généré dans le champ "Mot de passe à usage unique" et cliquez sur "Activer la 2FA". Un secret sera enregistré pour votre compte sur le serveur de trading du courtier.


    Ajout de la prise en charge de l'authentification 2FA/TOTP à l'aide de Google Authenticator et d'applications similaires.

    Le secret enregistré sera utilisé dans l'application Authenticator pour générer un code OTP chaque fois que vous vous connectez à votre compte. Chaque mot de passe est valide pendant 30 secondes. Après cela, un nouveau mot de passe est généré.



    Un OTP supplémentaire de l'application Authenticator sera nécessaire pour se connecter au compte

    Si vous décidez de supprimer le secret stocké de l'application Authenticator, vous devez d'abord désactiver l'authentification 2FA/TOTP à l'aide de la commande correspondante du menu contextuel du compte. Si la nouvelle méthode d'authentification 2FA/TOTP n'est pas disponible sur votre compte, veuillez contacter votre courtier.

MQL5

  1. Correction du fonctionnement de la fonction CopyTicks pour les instruments de trading personnalisés. Lorsque vous travaillez avec des symboles personnalisés, les ticks initiaux de la session précédente peuvent être renvoyés au lieu des données demandées, sous certaines conditions.

  2. Ajout de nouvelles valeurs d'énumération pour obtenir le dernier code d'erreur OpenCL et la description textuelle.
    1. La valeur CL_LAST_ERROR (code 4094) a été ajoutée à l'énumération ENUM_OPENCL_PROPERTY_INTEGER

      Lors de la récupération de la dernière erreur OpenCL via CLGetInfoInteger, le paramètre handle est ignoré. Descriptions des erreurs : https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API. html#CL_SUCCESS.
      Pour un code d'erreur inconnu, la chaîne "erreur OpenCL inconnue N" est renvoyée, où N est le code d'erreur.

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

    2. La valeur CL_ERROR_DESCRIPTION (4093) a été ajoutée à l'énumération ENUM_OPENCL_PROPERTY_STRING .
      Une description d'erreur textuelle peut être obtenue à l'aide de CLGetInfoString. Descriptions des erreurs : https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API. html#CL_SUCCESS.

      Lors de l'utilisation de CL_ERROR_DESCRIPTION, un code d'erreur doit être transmis pour le paramètre handle dans CLGetInfoString. Si CL_LAST_ERROR est transmis à la place du code d'erreur, la fonction renverra la dernière description d'erreur.

      Exemple :
      //--- 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);
      Le nom de l'énumération interne est transmis comme description de l'erreur. Son explication peut être trouvée sur https://registry.khronos.org/OpenCL/specs/3.0-unified/html /OpenCL_API.html#CL_SUCCESS. Par exemple, la valeur CL_INVALID_KERNEL_ARGS signifie "Renvoyé lors de la mise en file d'attente d'un noyau lorsque certains arguments du noyau n'ont pas été définis ou sont invalides." (" Returned when enqueuing a kernel when some kernel arguments have not been set or are invalid." )

  3. Correction du fonctionnement de la méthode matrix::MatMul. Lorsque vous travaillez avec de grandes matrices, le terminal peut planter sur certaines tailles.

Correction des erreurs rapportées dans les journaux de crash.
18 novembre 2022
MetaTrader 5 build 3510 : Améliorations du Terminal Web

WebTerminal  MetaTrader 5

  1. Dans la version mobile, nous avons implémenté le tri de l'historique des transactions et le filtrage par profondeur. Utilisez les commandes du panneau supérieur pour personnaliser l'affichage de l'historique :


    Vue de l'historique des transactions personnalisable dans la version mobile


    Les opérations peuvent être triées selon les principaux paramètres, tels que la date, le ticket, le symbole et le volume.

  2. Amélioration de l'accès aux détails du compte de trading.

    • Dans la version de bureau, il est possible de cliquer sur les données du compte courant. Cliquez sur le compte pour afficher ses détails.
    • Dans la version mobile, le compte courant est affiché dans la section "Paramètres". Cliquez sur le compte pour afficher ses détails.


    Amélioration de l'accès aux données du compte de trading

  3. Correction de l'affichage du type de compte dans la fenêtre de gestion du compte.
  4. Les fonds propres et la marge libre s'affichent après le rafraîchissement de la page du terminal web dans les navigateurs mobiles.
  5. Correction de l'affichage de la barre inférieure dans le navigateur mobile Firefox.

Terminal

  1. Calculs des fonds propres et du graphique du solde dans le rapport de trading.

MQL5

  1. Nouveau comportement de la fonction typename(expr). La nouvelle version de la fonction renvoie le type complet avec les modificateurs et les dimensions (pour les tableaux) :
    class A
      {
      };
    
    void OnStart(void)
      {
       const A *const arr[][2][3]={};
       Print(typename(arr));
      }
    
    Résultat :
    "class A const * const [][2][3]"
Correction des erreurs rapportées dans les journaux de crash.


11 novembre 2022
MetaTrader 5 build 3500 : Améliorations et corrections

Terminal

  1. Une nouvelle commande a été ajoutée au menu contextuel des sections Trade et Historique, pour permettre l'accès au nouveau rapport de trading.


    Le rapport de trading fournit les données de performance suivantes :
    • Graphiques et tableaux de l’évolution mensuelle
    • Graphique des fonds
    • Graphique sous forme de radar permettant une évaluation rapide de l'état du compte
    • Statistiques de trading par instrument
    • Une variété de métriques supplémentaires pour l'analyse de toutes les transactions

  2. Correction du calcul du dépôt initial dans le rapport de trading.
  3. Correction du réglage des niveaux de Stop Loss et Take Profit lors de l'utilisation du panneau de trading rapide dans le graphique et dans le Market Watch. Les niveaux pouvaient être hérités de positions précédemment ouvertes, même lorsque l'héritage n'était pas nécessaire (la fonctionnalité correspondante est mise en œuvre pour les comptes basés sur le FIFO).
  4. Mise à jour des traductions de l'interface utilisateur.

MQL5

  1. Correction d'un bug du compilateur qui permettait l'accès à un champ de structure en utilisant une constante avec la valeur du nom du champ.
  2. Correction de la vérification des états des touches à l'aide de la fonction TerminalInfoInteger(TERMINAL_KEYSTATE_*).

Correction des erreurs rapportées dans les journaux de crash.

Nouvelle version du Terminal Web MetaTrader 5

  1. Correction de la clôture des positions lors des re-cotations.
  2. Correction de la reconnexion au serveur après la maximisation d'une fenêtre de navigateur restée inactive pendant une longue période.
  3. Correction de l’affichage des fonds de crédit.
  4. Autres améliorations et corrections.


4 novembre 2022
MetaTrader 5 build 3490 : Version du terminal Web mobile et nouvelles méthodes matricielles dans MQL5

Version mobile de la plateforme web

Le nouveau terminal Web offre le support complet des appareils mobiles. L'interface s'adaptera automatiquement à la taille de l'écran, permettant des opérations plus efficaces depuis les téléphones et tablettes iOS et Android :

Ajout du support des appareils mobiles dans le nouveau terminal web

En outre, le Terminal Web comporte de nombreuses corrections et améliorations.

Le nouveau terminal Web MetaTrader 5 prend en charge l'ensemble des fonctions de trading. Il permet aux utilisateurs de :

  • Travailler avec des comptes de démonstration et des comptes réels
  • Recevoir les cotations de n’importe quel symbole financier
  • Trader sur tous les marchés
  • Analyser les cotations des symboles à l'aide de plus de 30 indicateurs et de 20 objets graphiques.
  • Utiliser les données du Calendrier Economique pour l'analyse fondamentale


Terminal

  1. Fonctions étendues du gestionnaire des tâches. La nouvelle version permet un suivi plus précis des ressources consommées.

    • Ajout de l’affichage de la taille de la pile des threads.
    • Ajout de l'affichage du nombre de changements de contexte.
    • Ajout de la reconnaissance des threads de DLL du système et de tiers.
    • Ajout de l'affichage du temps de fonctionnement en mode noyau. Une augmentation de cette mesure par rapport au temps passé par l’utilisateur peut indiquer des problèmes au niveau du système : problèmes de pilotes, erreurs matérielles ou matériel lent. Pour plus de détails, veuillez lire la documentation de Microsoft.
    • Ajout de l'affichage du temps de fonctionnement en mode utilisateur.

    Gestionnaire OpenCL pour contrôler les périphériques disponibles


  2. Nouvel onglet OpenCL dans les paramètres du terminal pour la gestion des périphériques disponibles. Le nouveau gestionnaire OpenCL permet de spécifier explicitement les périphériques à utiliser pour les calculs.

    Gestionnaire OpenCL pour contrôler les périphériques disponibles

  3. Ajout de l'indication des niveaux de Stop Loss et de Take Profit dans le Depth of Market pour les comptes fonctionnant en mode FIFO (le mode peut être activé du côté du courtier).

    Selon la règle FIFO, les positions de chaque instrument ne peuvent être clôturées que dans l'ordre dans lequel elles ont été ouvertes. Pour assurer une fermeture de position conforme au FIFO par des niveaux de stops, la logique suivante a été implémentée du côté du terminal client :

    Si plusieurs positions existent pour le même instrument, le placement des niveaux de stop pour l'une des positions entraîne le placement des mêmes niveaux pour toutes les autres positions également. Par conséquent, si un niveau se déclenche, toutes les positions seront fermées dans un ordre conforme au FIFO.

    Désormais, lorsque l'utilisateur ouvre le Depth of Market d'un instrument pour lequel des positions sont déjà ouvertes, les niveaux des positions existantes (le cas échéant) sont automatiquement spécifiés dans les champs Stop Loss et Take Profit.

  4. Correction de la suppression des niveaux de Stop Loss et Take Profit à l'aide des boutons X dans la fenêtre Boîte à Outils\Trade. Une erreur pouvait se produire lorsque la fonction de trading rapide était désactivée. Un clic sur le bouton ouvre une boîte de dialogue de trading avec une valeur vide pour le niveau concerné.

  5. Correction des légendes des graphiques et des calculs des commissions finales dans le rapport de trading. La section pouvait afficher des bénéfices incorrects dans les statistiques du rapport et des valeurs incorrectes dans les infobulles des graphiques Equity et Balance.

MQL5

  1. Ajout des méthodes CopyTicks et CopyTicksRange pour les vecteurs et pour les matrices. Elles permettent de copier facilement des tableaux de données de ticks en vecteurs et matrices.
    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);
    Le type de données copié est spécifié dans le paramètre 'flags' à l'aide de l'énumération ENUM_COPY_TICKS. Les valeurs suivantes sont disponibles :
    COPY_TICKS_INFO    = 1,       // ticks résultant du changement des prix Bid et/ou Ask
    COPY_TICKS_TRADE   = 2,       // ticks résultant du changement des du prix Last et du Volume
    COPY_TICKS_ALL     = 3,       // tous les ticks ont changé
    COPY_TICKS_TIME_MS = 1<<8,    // heure en millisecondes
    COPY_TICKS_BID     = 1<<9,    // prix Bid
    COPY_TICKS_ASK     = 1<<10,   // prix Ask
    COPY_TICKS_LAST    = 1<<11,   // prix Last
    COPY_TICKS_VOLUME  = 1<<12,   // volume
    COPY_TICKS_FLAGS   = 1<<13,   // flags du tick
    Si plusieurs types de données sont sélectionnés (uniquement disponible pour les matrices), l'ordre des lignes dans la matrice correspondra à l'ordre des valeurs dans l'énumération.

  2. Fonctionnalités des méthodes matrix::Assign et vector::Assign améliorées.

    On peut maintenant attribuer à la matrice un tableau ou un vecteur unidimensionnel :
    Le résultat sera une matrice de 1 ligne.

    De plus, une matrice peut maintenant être assignée à un vecteur (un lissage de la matrice sera effectué) :
    bool vector::Assign(const matrix &mat);
  3. Ajout des méthodes Swap pour les vecteurs et les matrices.
    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[]);
    Chaque tableau, vecteur ou matrice fait référence à un buffer mémoire contenant les éléments de cet objet. La méthode Swap échange en fait les pointeurs vers ces buffers sans écrire les éléments en mémoire. Par conséquent, une matrice reste une matrice, et un vecteur reste un vecteur. L'échange d'une matrice et d'un vecteur donnera une matrice à 1 rangée avec des éléments de vecteur et un vecteur avec des éléments de matrice dans une représentation plate (voir la méthode Flat).
    //+------------------------------------------------------------------+
    //| Fonction de démarrage du programme de script                     |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //---
      matrix a= {{1, 2, 3}, {4, 5, 6}};
      Print("a avant Swap: \n", a);
      matrix b= {{5, 10, 15, 20}, {25, 30, 35, 40}, {45, 50, 55, 60}};
      Print("b après Swap: \n", b);  
    //--- échange les pointeurs des matrices
      a.Swap(b);
      Print("a avant Swap: \n", a);
      Print("b après Swap: \n", b);
      /*
      a avant Swap:
      [[1,2,3]
      [4,5,6]]
      b avant Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      
      a après Swap:
      [[5,10,15,20]
      [25,30,35,40]
      [45,50,55,60]]
      b après Swap:
      [[1,2,3]
      [4,5,6]]
      */
      vector v=vector::Full(10, 7);
      Print("v avant Swap: \n", v);
      Print("b avant Swap: \n", b);
      v.Swap(b);
      Print("v après  Swap: \n", v);
      Print("b après  Swap: \n", b);
      /*
      v avant Swap:
      [7,7,7,7,7,7,7,7,7,7]
      b avant  Swap:
      [[1,2,3]
      [4,5,6]]
      
      v après Swap:
      [1,2,3,4,5,6]
      b après  Swap:
      [[7,7,7,7,7,7,7,7,7,7]]
      */
     }
    La méthode Swap() permet également d'effectuer des opérations avec des tableaux dynamiques (les tableaux de taille fixe ne peuvent pas être passés en paramètre). Le tableau peut être de n'importe quelle dimension mais d'une taille convenue, ce qui signifie que la taille totale d'une matrice ou d'un vecteur doit être un multiple de la dimension 0 du tableau. La dimension 0 du tableau est le nombre d'éléments contenus au 1er indice. Par exemple, pour un tableau dynamique à 3 dimensions "double array[][2][3]", la dimension 0 est le produit de la taille des 2ème et 3ème dimensions : 2 x 3 = 6. Ainsi, un tel tableau ne peut être utilisé dans la méthode Swap qu'avec des matrices et des vecteurs dont la taille totale est un multiple de 6 : 6, 12, 18, 24, etc.

    Prenons l'exemple suivant :
    //+------------------------------------------------------------------+
    //| Fonction de démarrage du script                                  |
    //+------------------------------------------------------------------+
    void OnStart()
     {
    //--- remplit la matrice 1x10 avec la valeur 7.0
      matrix m= matrix::Full(1, 10, 7.0);
      Print("matrix avant Swap :\n", m);
    //--- essaye d'échanger la matrice et le tableau
      double array_small[2][5]= {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
      Print("array_small avant Swap :");
      ArrayPrint(array_small);
      if(m.Swap(array_small))
       {
        Print("array_small après Swap :");
        ArrayPrint(array_small);
        Print("matrix après Swap : \n", m);
       }
      else // la taille de la matrice n'est pas un multiple de la première dimension du tableau
       {
        Print("Echec de m.Swap(array_small). Erreur ", GetLastError());
       }
      /*
      matrix avant Swap :
      [[7,7,7,7,7,7,7,7,7,7]]
      array_small avant Swap :
               [,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
      Echec de m.Swap(array_small). Erreur 4006
      */
    //--- utilise une matrice plus grande et réessaye l'opération de swap
      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 avant Swap :");
      ArrayPrint(array_static);
      if(m.Swap(array_static))
       {
        Print("array_static après Swap :");
        ArrayPrint(array_static);
        Print("matrix après Swap : \n", m);
       }
      else // un tableau statique ne peut pas être utilisé pour permuter avec une matrice
       {
        Print("Echec de m.Swap(array_static). Erreur ", GetLastError());
       }
      /*
      array_static avant Swap:
             [,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
      Echec de m.Swap(array_static). Erreur 4006
      */
    //--- une autre tentative d'échanger un tableau et une matrice
      double array_dynamic[][10];    // tableau dynamique
      ArrayResize(array_dynamic, 3); // définit la taille de la première dimension
      ArrayCopy(array_dynamic, array_static);
    //--- utilise maintenant un tableau dynamique pour le swap
      if(m.Swap(array_dynamic))
       {
        Print("array_dynamic après Swap :");
        ArrayPrint(array_dynamic);
        Print("matrix après Swap : \n", m);
       }
      else //  aucune erreur
       {
        Print("Echec de m.Swap(array_dynamic). Erreur ", GetLastError());
       }
      /*
      array_dynamic après Swap :
            [,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 après Swap :
      [[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. Ajout de la méthode LossGradient pour les vecteurs et les matrices. Cette méthode calcule un vecteur ou une matrice de dérivées partielles de la fonction de perte sur les valeurs prédites. En algèbre linéaire, un tel vecteur est appelé gradient et est utilisé dans l'apprentissage automatique.
    vector vector::LossGradient(const vector &expected,ENUM_LOSS_FUNCTION loss) const;
    matrix matrix::LossGradient(const matrix &expected,ENUM_LOSS_FUNCTION loss) const;
  5. Permet l'utilisation de FOREIGN KEYS dans SQLite pour renforcer les relations entre les tables dans les requêtes SQL.   Exemple :
    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. Sélection fixe de la méthode de classe appropriée en fonction de la constance de la méthode et de l'objet.

MetaEditor

  1. Augmentation de la longueur autorisée des commentaires dans commits du Dépôt MQL5. Des commentaires détaillés lors de la validation des changements dans le référentiel sont considérés comme une bonne pratique lorsque l'on travaille sur de grands projets, mais auparavant la longueur des commentaires était limitée à 128 caractères. La longueur autorisée est désormais de 260 caractères maximum.

MetaTester

  1. Sensibilité accrue du sélecteur de vitesse de test en mode visuel.

Correction des erreurs rapportées dans les journaux de crash.

17 septembre 2022
MetaTrader 5 build 3440 : Nouveau rapport sur le compte de trading

Terminal

  1. Ajout d'un nouveau rapport sur les performances de trading des comptes. Il est similaire aux rapports de la section Signals déjà connus, en termes de disponibilité des statistiques et de présentation des données. Les données de performance suivantes seront disponibles dans la plateforme :
    • Graphiques et tableaux visualisant les mesures de croissance mensuelles
    • Graphique des fonds
    • Graphique sous forme de radar permettant une évaluation rapide de l'état du compte
    • Statistiques de trading par instrument
    • Une variété de métriques supplémentaires pour l'analyse de toutes les transactions

    Le rapport peut être consulté directement depuis la plateforme, sans qu'il soit nécessaire de l'exporter vers un fichier. Pour l'ouvrir, sélectionnez Rapports dans le menu Affichage.




  2. Correction du remplissage du tableau des options pour les contrats de type Call et Put dont la quantité ou le type de symbole ne correspond pas.
  3. Correction de la sélection de la position dans la boîte de dialogue Trade pendant les opérations de type Close by. L'erreur pouvait se produire pour les listes d'ordres opposés triées par toute colonne autre que le ticket.
  4. Journalisation accélérée de la plateforme.
  5. Correction de l'affichage des commentaires sur les graphiques des symboles personnalisés.

MQL5

  1. Correction du fonctionnement de la fonction CArrayList::LastIndexOf. Auparavant, elle retournait toujours -1 au lieu de l'index du dernier élément trouvé.
  2. Ajout d'une nouvelle méthode de matrice et de vecteur - Assign. Elle remplace les éléments de la matrice/du vecteur par les données de la matrice, du vecteur ou du tableau transmis.
    bool vector<TDst>::Assign(const vector<TSrc> &assign);
    bool matrix<TDst>::Assign(const matrix<TSrc> &assign);
    
    Exemple :
      //--- 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. Ajout d'une nouvelle méthode de matrice et de vecteur - CopyRates. Elle copie les tableaux de données de prix en vecteurs et matrices.
    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);
    Le type de données copiées est spécifié dans le paramètre rates_mask en utilisant l'énumération ENUM_COPY_RATES. Les valeurs suivantes sont disponibles :
    COPY_RATES_OPEN
    COPY_RATES_HIGH
    COPY_RATES_LOW
    COPY_RATES_CLOSE
    COPY_RATES_TIME
    COPY_RATE_VOLUME_TICK
    COPY_RATES_VOLUME_REAL
    COPY_RATES_SPREAD
    COPY_RATES_OHLC
    COPY_RATES_OHLCT
    Les deux dernières valeurs permettent la sélection simultanée de plusieurs paramètres des barres : Ouverture, Plus Haut, Plus Bas, Clôture et l’heure.

    Si plusieurs types de données sont sélectionnés (uniquement disponible pour les matrices), l'ordre des lignes de la matrice correspondra à l'ordre des valeurs dans l'énumération.

  4. Correction de l'affichage des objets de type "Etiquette de Texte". Lors de l'utilisation des propriétés OBJPROP_XOFFSET et OBJPROP_YOFFSET, un mauvais fragment d'image pouvait être affiché sur le graphique.

  5. Correction d'une erreur lors de la modification d'un paramètre constant transmis à une fonction en tant que référence de pointeur d'objet.

    Le spécificateur const déclare une variable comme étant une constante pour éviter qu'elle ne soit modifiée pendant l'exécution du programme. Il ne permet qu'une seule initialisation de la variable lors de sa déclaration. Exemple de variables constantes dans la fonction 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
       );
    

    L'exemple ci-dessous contient une erreur de compilation qui a permis un casting implicite de pointeur pour les paramètres de référence :

    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 );
      }
    Le compilateur détectera ces opérations illégales et renverra une erreur correspondante.

MetaEditor

  1. Correction de l'affichage des références à des nombres complexes dans le débogueur.
  2. Amélioration du MQL5 Cloud Protector. La protection des fichiers pouvait auparavant échouer dans certaines conditions.
  3. Correction des erreurs rapportées dans les journaux de crash.

Nouveau version du Terminal Web MetaTrader 5

Nous avons publié une nouvelle version du Terminal Web MetaTrader 5 avec une nouvelle interface et un noyau repensé. La nouvelle interface est similaire à la version du terminal pour iPad :

Nouveau Terminal Web MetaTrader 5


Cette nouvelle version dispose également de nombreuses nouvelles fonctions :

  • Possibilité de demander un comptes réel via le formulaire d'inscription détaillé et les options d’envoi des documents
  • Prise en charge des abonnements aux flux de données des prix et possibilité de recevoir des cotations différées
  • Plus d'objets d’analyse avec des options de gestion pratiques
  • Entrées et sorties du marché affichées sur les graphiques
  • Evénements du Calendrier Economique affichés sur les graphiques
  • Configuration pratique des instruments dans le Market Watch, ainsi que les données quotidiennes de changement de prix
  • Interface simplifiée pour aider les débutants à démarrer avec le terminal : suppression du menu contextuel du graphique et du menu supérieur. Toutes les commandes de contrôle du graphique, les objets et les indicateurs sont disponibles sur le côté gauche et dans les panneaux supérieurs. Les autres commandes sont accessibles via le menu hamburger
  • Mode sombre de l'interface

Essayez dès maintenant le nouveau terminal Web sur www.mql5.com. Il sera bientôt disponible pour vos courtiers.

4 août 2022
MetaTrader 5 build 3390 : Type ’float’ dans OpenCL et dans les fonctions mathématiques, méthodes d'Activation et de Perte pour l'apprentissage automatique

Terminal

  1. Ajout de l'ouverture automatique d'un tutoriel lors de la première connexion à un compte de trading. Il aidera les débutants à apprendre les bases du trading et à explorer les nombreuses fonctionnalités de la plateforme. Le tutoriel est divisé en plusieurs sections, chacune fournissant de brèves informations sur un sujet spécifique. La progression de l'entraînement est indiquée par une ligne bleue.

    Ajout de l'ouverture automatique d'un tutoriel lors de la première connexion à un compte de trading.


  2. Correction des opérations en masse 'Fermer les positions gagnantes'/'Fermer les positions perdantes'. Auparavant, la plateforme utilisait des positions opposées si elles existaient. Par exemple, si vous aviez 2 positions longues perdantes pour l’EURUSD et 1 position courte gagnante sur l’EURUSD, les 3 positions auraient été fermées par l’opération en masse ’Fermer les positions perdantes’. Les positions longues (Buy) et courtes (Sell) seraient fermées par une opération ’Close by’. La position longue (Buy) restante serait fermée par une opération normale. Les commandes fonctionnement correctement maintenant : elles ne ferment que les positions sélectionnées, qu’elles soient profitables ou perdantes.
  3. Correction de l’affichage des prix historiques négatifs. Ces prix apparaîtront correctement sur toutes les périodes.
  4. Optimisation et réduction significative de la consommation des ressources du système par le terminal.
  5. Base de données fondamentale mise à jour pour les instruments de trading. Le nombre d'agrégateurs de données disponibles pour les instruments boursiers a été étendu à 15. Les utilisateurs auront accès aux informations de plus nombreux tickers via les agrégateurs économiques les plus populaires.

    Base de données fondamentale mise à jour pour les instruments de trading.

    Près de 7 000 titres et plus de 2 000 ETF sont cotés sur le marché boursier mondial. Les bourses proposent en plus des contrats à terme et d'autres produits dérivés. La plateforme MetaTrader 5 offre un accès à une énorme base de données d'instruments boursiers. Pour accéder aux données fondamentales correspondantes, les utilisateurs peuvent basculer en un clic sur le site Web de l'agrégateur sélectionné, directement depuis le Market Watch. De façon plus pratique, la plateforme propose directement une sélection de sources d'information pour chaque instrument financier.

  6. Correction de l’indication des Stop Loss et Take Profit dans la fenêtre de placement d’un nouvel ordre. Pour les comptes FIFO, les niveaux de stop seront automatiquement définis selon les niveaux de stop des positions ouvertes sur le même instrument. La procédure est requise conformément à la règle FIFO.

MQL5

  1. Les fonctions mathématiques peuvent maintenant fonctionner avec des matrices et des vecteurs.

    Nous continuons à améliorer les capacités de la plateforme MetaTrader 5 pour le trading algorithmique et l'apprentissage automatique. Nous avions auparavant ajouté de nouveaux types de données : matrices et vecteurs, qui éliminent le besoin d'utiliser des tableaux pour le traitement des données. Plus de 70 méthodes ont été ajoutées à MQL5 pour les opérations avec ces types de données. Les nouvelles méthodes permettent des calculs algébriques linéaire et des calculs statistiques en une seule opération. La multiplication, la transformation et les systèmes d'équations peuvent être mis en œuvre facilement, sans lignes de code supplémentaires. La dernière mise à jour ajoute des fonctions mathématiques.

    Les fonctions mathématiques ont été conçues à l'origine pour effectuer des opérations spécifiques sur des valeurs scalaires. À partir de cette construction, la plupart des fonctions peuvent être appliquées aux matrices et aux vecteurs. Parmi celles-ci, nous trouvons MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh et MathTanh . Ces opérations impliquent une manipulation élément par élément des matrices ou des vecteurs. Exemple :
    //---
      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]]
      */
    Pour MathMod et MathPow, le deuxième élément peut être soit un scalaire, soit une matrice/vecteur de la bonne taille.

    L'exemple suivant montre comment calculer l'écart type en appliquant des fonctions mathématiques à un vecteur.
    //+------------------------------------------------------------------+
    //| 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. Dans les fonctions templates, ajout de la prise en charge des notations matrix<double>, matrix<float>, vector<double>, vector<float> au lieu des types matrix, matrixf, vector et vectorf correspondants.
  3. Améliorations des fonctions mathématiques pour les opérations utilisant le type float. La possibilité nouvellement implémentée d'appliquer des fonctions mathématiques à des matrices et des vecteurs de ’float’ a permis une amélioration des fonctions mathématiques appliquées aux scalaires de type ’float’. Ces paramètres de fonction étaient auparavant automatiquement transformés en type 'double'. L'implémentation correspondante de la fonction mathématique était ensuite appelée et le résultat était retransformé en type 'float'. Les opérations sont désormais implémentées sans conversion de type supplémentaire.

    L'exemple suivant montre la différence dans les calculs mathématiques du sinus :

    //+------------------------------------------------------------------+
    //| 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. Ajout des méthodes Activation et Derivative pour les matrices et les vecteurs :
    AF_ELU               Unité Linéaire Exponentielle
    AF_EXP               Exponentiel
    AF_GELU              Unité Linéaire d'Erreur Gaussienne
    AF_HARD_SIGMOID      Sigmoïde Dure
    AF_LINEAR            Linéaire
    AF_LRELU             Unité Linéaire Rectifiée Perméable
    AF_RELU              Unité Linéaire Rectifiée
    AF_SELU              Unité Linéaire Exponentielle Mise à l'Echelle
    AF_SIGMOID           Sigmoïde
    AF_SOFTMAX           Softmax
    AF_SOFTPLUS          Softplus
    AF_SOFTSIGN          Softsign
    AF_SWISH             Bruissement
    AF_TANH              Tangente Hyperbolique
    AF_TRELU             Unité Linéaire Rectifiée Avec Seuil
    La fonction d'activation du réseau de neurones détermine comment la somme pondérée des signaux d'entrée est convertie en un signal de sortie de nœud au niveau du réseau. La sélection de la fonction d'activation a un impact important sur les performances du réseau de neurones. Différentes parties du modèle peuvent utiliser différentes fonctions d'activation. En plus de toutes les fonctions connues, MQL5 propose des fonctions dérivées. Les fonctions dérivées permettent un calcul rapide des ajustements en fonction de l'erreur obtenue lors de l'apprentissage.

  5.  Ajout de la fonction Loss pour les matrices et les vecteurs. Elle a les paramètres suivants :
    LOSS_MSE            Erreur Quadratique Moyenne
    LOSS_MAE            Erreur Absolue Moyenne
    LOSS_CCE            Inter-entropie Catégorielle
    LOSS_BCE            Inter-entropie Binaire
    LOSS_MAPE           Erreur Moyenne en Pourcentage Absolu
    LOSS_MSLE           Erreur Logarithmique Quadratique Moyenne
    LOSS_KLD            Divergence Kullback-Leibler
    LOSS_COSINE         Similarité/Proximité Cosinus
    LOSS_POISSONS        Poisson
    LOSS_HINGE          Charnière
    LOSS_SQ_HINGE       Charnière Au carré
    LOSS_CAT_HINGE      Charnière Catégorielle
    LOSS_LOG_COSH       Logarithme du Cosinus Hyperbolique
    LOSS_HUBER          Huber

    La fonction de perte évalue dans quelle mesure le modèle prédit les valeurs réelles. La construction du modèle vise à minimiser de la valeur de la fonction à chaque étape. L'approche dépend de l'ensemble de données donné. La fonction de perte peut également dépendre du poids et du décalage. La fonction de perte est unidimensionnelle. Elle n'est pas un vecteur car elle fournit une évaluation générale du réseau de neurones.

  6. Ajout des méthodes matrix::CompareByDigits et vector::CompareByDigits pour les matrices et vecteurs. Elles comparent les éléments de 2 matrices/vecteurs jusqu’aux chiffres significatifs.

  7. Ajout du support des fonction MathMin et MathMax pour les chaînes de caractères. Les fonctions utiliseront une comparaison lexicographique : les lettres sont comparées alphabétiquement, et sont sensibles à la casse (majuscule/minuscule).

  8. Le nombre maximum d'objets OpenCL a été augmenté de 256 à 65 536. Les descripteurs d'objet OpenCL sont créés dans un programme MQL5 à l'aide des fonctions CLContextCreate, CLBufferCreate et CLProgramCreate. La limite précédente de 256 descripteurs n'était pas suffisante pour une utilisation efficace des méthodes d'apprentissage automatique.

  9. Ajout de la possibilité d'utiliser OpenCL sur une carte graphique sans prise en charge du type ’double’. Auparavant, seuls les GPU prenant en charge le type ’double’ étaient autorisés dans les programmes MQL5, bien que de nombreuses tâches permettent des calculs utilisant le type ’float’. Le type ’float’ est considéré comme un type natif pour le calcul parallèle, car il prend moins de place. Par conséquent, cette ancienne exigence a été levée.

    Pour définir l'utilisation obligatoire des GPU avec la prise en charge du type ’double’ pour des tâches spécifiques, utilisez CL_USE_GPU_DOUBLE_ONLY dans l'appel à 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. Correction du fonctionnement de la fonction CustomBookAdd. Auparavant, une valeur différente de zéro dans le paramètre MqlBookInfo::volume_real empêchait la fonction de créer un snapshot du Market Depth. Le contrôle s'effectue désormais de la façon suivante :
    Les données transmises sont d’abord validées : le type, le prix et le volume doivent être précisés pour chaque élément. MqlBookInfo.volume et MqlBookInfo.volume_real ne doivent pas non plus être nuls ou négatifs. Si les deux volumes sont négatifs, cela est considéré comme une erreur. Vous pouvez spécifier l'un des types de volume, ou les deux, et le système utilisera celui qui est indiqué ou celui qui est positif :

       volume=-1 && volume_real=2 — volume_real=2 sera utilisé,

       volume=3 && volume_real=0 — volume=3 sera utilisé.

    Le volume avec une meilleure précision MqlBookInfo.volume_real a une priorité plus élevée que MqlBookInfo.volume. Par conséquent, si les deux valeurs sont spécifiées et valides, volume_real sera utilisé.

    Si l'un des éléments du Market Depth est décrit de manière incorrecte, le système rejettera complètement l'état transféré.

  11. Correction du fonctionnement de la fonction CalendarValueLast. En raison d'une erreur, des appels successifs à la fonction après des changements dans le Calendrier Economique (le paramètre 'change' a reçu une nouvelle valeur après l'appel) pouvaient ne pas prendre en compte certains événements avec l'utilisation du filtre sur devise.
    CalendarValueLast(change, result, "", "EUR")
  12. Correction du comportement de la fonction ArrayBSearch . Si plusieurs éléments identiques sont trouvés, un lien vers le premier résultat est renvoyé, plutôt qu'un lien aléatoire.
  13. Correction des vérifications de la visibilité des templates de fonctions dans une classe. En raison d'une erreur, les fonctions de modèle de classe déclarées comme private/protected semblaient être considérées comme public.

MetaEditor

  1. Correction des erreurs et du comportement de MetaAssist.
  2. Ajout de la prise en charge de la macro %terminal% qui indique le chemin d'accès au répertoire d'installation du terminal. Par exemple, %terminal%\MQL5\Experts. 

    Ajout de la prise en charge de la macro %terminal% qui indique le chemin d'accès au répertoire d'installation du terminal.

  3. Amélioration de l'affichage des tableaux dans le débogueur.
  4. Augmentation de la taille du buffer pour copier les valeurs du débogueur.
  5. Améliorations des conseils en cas d'erreur.
  6. Ajout d'une indication des chemins relatifs dans le fichier de projet *.mproj. Les chemins absolus étaient utilisés auparavant, ce qui entraînait des erreurs de compilation en cas de déplacement du projet.
  7. Ajout de l'intégration automatique des ressources BMP en tant que tableaux de bitmap 32 bits disponibles de façon globale dans les projets. Cela élimine le besoin d'appeler ResourceReadImage à l'intérieur du code pour lire une ressource graphique.
    'levels.bmp' as 'uint levels[18990]'
    
  8. Amélioration de la lecture des formats de fichiers BMP étendus.
  9. Mises à jour des traductions de l'interface utilisateur.
  10. Correction des erreurs signalées dans les journaux de plantage.
2 juin 2022
MetaTrader 5 build 3320 : Améliorations et correctifs

Terminal

  1. Info-bulles étendues pour les objets des trades affichés sur les graphiques :
    • Les transactions de sortie du marché affichent désormais les bénéfices.
    • L'indication correspondante est affichée pour les transactions exécutées à la suite de l'activation du Take Profit ou du Stop Loss.

    Des info-bulles similaires sont disponibles pour les lignes joignant les transactions d'entrée et de sortie.

    Info-bulles étendues pour les objets de transaction


  2. Amélioration des performances du système graphique.
  3. Ajout de la journalisation des opérations en masse avec des ordres et des positions ouvertes. Lorsqu'une telle commande est exécutée, une entrée est ajoutée dans le journal, par exemple : "la fermeture en masse de XXX positions a commencé".
  4. Correction de la fermeture en masse des positions opposées.
  5. Correction de la mise à jour des objets sur le graphique affichant l'historique des transactions. L'erreur s'est produite lors de la modification du symbole du graphique.

MQL5

  1. Des travaux sur les fonctions matricielles et vectorielles sont en cours : la prise en charge de 'float' et 'complex' est en cours d'implémentation.
  2. Opérateur "!" (LNOT) pour un pointeur vérifie sa validité via un appel implicite CheckPointer. L'opérateur "==" doit être utilisé pour une vérification NULL rapide. Par exemple : ptr==NULL ou ptr!=NULL.

MetaTester

  1. Correction de l'affichage des objets de transaction sur les graphiques de test.
  2. Amélioration des performances graphiques du système.

MetaEditor

  • Traductions de l'interface utilisateur mises à jour.

Correction des erreurs signalées dans les journaux de plantage.

20 mai 2022
MetaTrader 5 build 3300 : Compilation rapide et navigation dans le code améliorée dans MetaEditor

Terminal 

  1. Ajout de la possibilité de redimensionner l'objet graphique Rectangle en faisant glisser l'un de ses quatre coins.


  2. Rendu plus rapide de l'interface graphique.
  3. Prise en charge améliorée des adresses IPv6.
  4. Correction de la calcul de la hauteur du champ de date inférieur et du calcul de la largeur du champ de prix de droite lors du premier lancement de la plateforme.

MQL5

  1.  Ajout d'une fonction pour travailler avec les matrices et les vecteurs :  RegressionMetric. Elle définit la métrique pour l'évaluation de la régression.
     double vector.RegressionError(const enum lr_error);
     double matrix.RegressionError(const enum lr_error);
     vector matrix.RegressionError(const enum lr_error,const int axis);
    Les variables suivantes peuvent être utilisées comme métriques :
    enum REGRESSION_ERROR
      {
       REGRESSION_MAE,     // Erreur absolue moyenne
       REGRESSION_MSE,     // Erreur quadratique moyenne
       REGRESSION_RMSE,    // Erreur quadratique racine moyenne
       REGRESSION_R2,      // R au carré
       REGRESSION_MAPE,    // Erreur absolue moyenne en pourcentage
       REGRESSION_MSPE,    // Erreur de pourcentage carré moyen
       REGRESSION_RMSLE    // Erreur logarithmique quadratique moyenne
      };
  2. Ajout de la possibilité d'écrire des tableaux avec une taille de données supérieure à INT_MAX (tableaux de structures).

MetaEditor

  1. Améliorations de la barre d'onglets :
    • Le panneau n'est pas masqué même si une seule fenêtre est ouverte. Ainsi, les commandes du menu contextuel de l'onglet sont toujours visibles pour l'utilisateur.
    • Le bouton de fermeture 'X' a été ajouté à chaque onglet. De plus, les onglets peuvent être fermés à l'aide du bouton central de la souris ou via le menu contextuel.


  2. Ajout d'une commande pour une compilation rapide du programme. Ce mode ignore l'optimisation du code, ce qui accélère considérablement la création d'un fichier exécutable EX5. Utilisez ce mode pendant la phase de développement actif, lorsque vous devez vérifier rapidement le code écrit. Lors de la compilation finale du programme, activez le mode d'optimisation maximale pour des performances améliorées.

    Le paramètre "Optimisation maximale" dans les paramètres du projet remplit la même fonction.

    Toutes les opérations de compilation-relation sont disponibles dans le menu "Build".

  3. Améliorations de la gestion du code :
    • Des commandes distinctes ont été implémentées pour sauter aux définitions et aux déclarations. Auparavant, le menu avait une commande qui ouvrait un sous-menu de sélection. Les nouvelles commandes permettent un passage plus rapide aux parties de code nécessaires.
    • Ajout de la substitution des mots clés reconnus par la touche "Tab", en plus de "Entrée".


  4. Ajout de la possibilité d'afficher automatiquement les variables locales dans la liste de surveillancedu débogueur. L'affichage peut être activé par la commande de menu contextuel "Local". Au fur et à mesure que l'opération de débogage progresse dans le code, les variables de la portée actuelle sont automatiquement affichées dans la liste.



  5. Améliorations de la liste de surveillance du débogueur pour les vecteurs et les matrices.
  6. Correction des chemins dans les fichiers de projet. Une erreur peut entraîner la disparition des fichiers des projets.

Testeur

  1. Amélioration de l'arrêt des agents testeurs à l'arrêt de la plateforme.
  2. Le cinquième nœud MQL5 Cloud Network a été ajouté. Il est situé à Hong-Kong. Le nouveau nœud accélère l'optimisation des robots via le réseau dans les régions les plus proches.

Correction des erreurs signalées dans les journaux de plantage.

29 avril 2022
MetaTrader 5 build 3280 : Améliorations et corrections grâce aux retours des traders

Terminal

  1. Correction du remplissage des niveaux de Trailing Stop standard dans le menu contextuel des ordres et positions ouverts.



  2. Traductions de l'interface utilisateur mises à jour.

Correction d'erreurs rapportées dans les journaux de crash
21 avril 2022
MetaTrader 5 build 3270: Améliorations et correctifs

Terminal

  1. Améliorations intégrées du chat.
    • Conception mise à jour. Les messages apparaissent maintenant sans bulles encerclante pour optimiser l'affichage et l'utilisation de l'espace. Ajout d'avatars et de séparateurs de date.
    • Les commandes Copier et Supprimer ont été ajoutées au menu des messages.
    • Corrections de bugs et améliorations de la stabilité.



  2. Correction des commandes de fermeture de position en masse. Une erreur pouvait se produire sur les comptes avec le système de comptabilisation des positions de couverture.
  3. Correction de la comptabilisation de certains types de transactions lors de la génération de l'historique des positions.

Correction des erreurs signalées dans les journaux de plantage.
15 avril 2022
MetaTrader 5 build 3260 : Opérations en masse, fonctions matricielles et vectorielles, et améliorations du chat

Terminal

  1. Ajout de commandes pour la fermeture groupée des positions et l'annulation d'ordres en attente.

    Une nouvelle commande "Opérations en masse" a été ajoutée au menu contextuel de l'onglet Trade. La liste des commandes disponibles est formée automatiquement, en fonction de l'opération sélectionnée et de votre type de compte.



    Les commandes suivantes sont toujours disponibles dans le menu :
    • Fermeture de toutes les positions Sur les comptes de couverture, le système essaie de fermer les positions par des positions opposées (Close By), puis il ferme les positions restantes en suivant une procédure régulière.
    • Fermer toutes les positions rentables ou toutes les positions perdantes
    • Supprimer toutes les commandes en attente
    • Supprimer les ordres en attente de certains types : Limit, Stop, Stop Limit

    Si vous sélectionnez une position, des commandes supplémentaires apparaissent dans le menu :
    • Fermer toutes les positions du symbole
    • Fermer toutes les positions dans le même sens (sur les comptes de couverture)
    • Fermer les positions opposées pour le même symbole (sur les comptes de couverture)
    • Inversion de position (sur les comptes de compensation)

    Si vous sélectionnez un ordre en attente, des commandes supplémentaires apparaissent dans le menu :
    • Supprimer tous les ordres en attente pour le même symbole
    • Supprimer tous les ordres en attente du même type pour le même symbole

    Ces commandes ne sont disponibles que si le Trading En Un Clic est activé dans les paramètres de la plateforme : Outils \ Options \ Trade.
  2. Fonctionnalités graphiques internes améliorées :
    • Ajout de la possibilité de répondre aux messages. Le texte du message source sera cité dans la réponse.
    • Ajout de la possibilité de créer des messages avec différents types de contenu, tels que des images avec du texte et du texte avec des pièces jointes, entre autres.
    • Correction de l'affichage du séparateur entre les messages lus et non lus.
    • Corrections d'erreurs et améliorations de la stabilité.



  3. Fonctionnement optimisé et accéléré du système graphique du terminal. Le rendu de l'interface nécessitera moins de ressources.
  4. Correction du calcul des variations de prix quotidiennes pour les contrats à terme. Si le courtier fournit un prix de compensation, ce prix sera utilisé pour les calculs.
    ((Last - Prix de compensation)/Prix de compensation)*100
    Une description détaillée de tous les types de calcul est disponible dans la Documentation.

  5. Correction d'erreurs lors des achats de services MQL5 :
    • Les systèmes de paiement peuvent renvoyer des erreurs pour des opérations réussies sous certaines conditions.
    • Un prix incorrect pouvait être affiché dans les étapes intermédiaires de location du produit sur le Market.

  6. Correction du fonctionnement du bouton "Démarrer" dans la page des produits Market achetés/téléchargés. Maintenant, le bouton lance correctement l'application sur le premier graphique ouvert.
  7. Correction de la comptabilisation de certains types de transactions lors de la génération de l'historique des positions.

MQL5

  1. Ajout de nouvelles fonctions pour travailler avec matrices et vecteurs :
    • Median — renvoie la médiane des éléments de la matrice ou du vecteur
    • Quantile — renvoie le qième quantile des éléments matriciels/vectoriels ou des éléments le long de l'axe spécifié
    • Percentile — renvoie le q-ième centile des éléments matriciels/vectoriels ou des éléments le long de l'axe spécifié
    • Std — calcule l'écart type des éléments matriciels ou vectoriels
    • Var — calcule la variance des éléments matriciels ou vectoriels
    • CorrCoef — calcule le coefficient de corrélation matrice/vecteur
    • Correlate — calcule la corrélation croisée de deux vecteurs
    • Convolve — renvoie la convolution discrète et linéaire de deux vecteurs
    • Cov — calcule la matrice de covariance

  2. Nous avons commencé à ajouter des méthodes intégrées pour les tableaux numériques. Les nouvelles méthodes améliorent la convivialité, la compacité du code et la compatibilité du code avec d'autres langages.

    Les 3 méthodes suivantes sont déjà disponibles :
    • ArgSort — trie les tableaux selon la dimension spécifiée ; le dernier est utilisé par défaut (axe=-1).
    • Range — renvoie le nombre d'éléments dans la dimension de tableau spécifiée. Analogue de ArrayRange.
    • Size — retourne le nombre d'éléments du tableau. Analogue de ArraySize.

    Exemple :
    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];
    //--- Trie le tableau
       arr.ArgSort(indexes,-1,0);
       Print("indexes");  
       ArrayPrint(indexes);
      }
    
    // Résultat :
    // 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. Nous avons commencé à ajouter des méthodes intégrées pour les chaînes.

    Les méthodes suivantes sont actuellement disponibles :
    • BufferSize — renvoie la taille de la mémoire tampon allouée pour la chaîne.
    • Compare — compare deux chaînes et renvoie le résultat de la comparaison sous la forme d'un entier.
    • Length — renvoie le nombre de caractères dans une chaîne.
    • Find — recherche une sous-chaîne dans une chaîne.
    • Upper — met une chaîne en majuscule.
    • Lower — convertit une chaîne en minuscules.
    • Replace — remplace une sous-chaîne.
    • Reserve — réserve un tampon pour une chaîne.

    Toutes les méthodes sont analogues aux fonctions de chaîne.

      Exemple :
      void OnStart()
        {
         string test="some string";
         PrintFormat("La longueur de la chaîne est %d",test.Length());
        }
      
      // Résultat :
      // La longueur de la chaîne est 11
    • Ajout de la valeur SYMBOL_SUBSCRIPTION_DELAY dans l'énumération ENUM_SYMBOL_INFO_INTEGER pour le retard de livraison des cotations pour des symboles spécifiques.

      Elle n'est utilisée que pour les symboles de trading basés sur l'abonnement. Le délai s'applique généralement aux données fournies en mode d'essai.

      La propriété ne peut être demandée que pour les symboles sélectionnés dans le Market Watch. Sinon, l'erreur ERR_MARKET_NOT_SELECTED (4302) sera renvoyée.

    • Ajout de la propriété ACCOUNT_HEDGE_ALLOWED dans l'énumération ENUM_ACCOUNT_INFO_INTEGER – permet l'ouverture de positions opposées et d'ordres en attente. La propriété est uniquement utilisée pour les comptes de couverture afin de se conformer à des exigences réglementaires spécifiques, selon lesquelles un compte ne peut pas avoir de positions opposées pour le même symbole, alors que des positions dans la même direction sont autorisées.

      Si cette option est désactivée, les comptes ne sont pas autorisés à avoir des positions et des ordres de sens opposé pour le même instrument financier. Par exemple, si le compte a une position d'achat, l'utilisateur ne peut pas ouvrir une position de vente ou passer un ordre de vente en attente. Si l'utilisateur tente d'effectuer une telle opération, l'erreur TRADE_RETCODE_HEDGE_PROHIBITED sera renvoyée.

    • Nouvelles propriétés dans l'énumération ENUM_SYMBOL_INFO_DOUBLE :
      • SYMBOL_SWAP_SUNDAY
      • SYMBOL_SWAP_MONDAY
      • SYMBOL_SWAP_TUESDAY
      • SYMBOL_SWAP_WEDNESDAY
      • SYMBOL_SWAP_THURSDAY
      • SYMBOL_SWAP_FRIDAY
      • SYMBOL_SWAP_SATURDAY

      Utilisez les valeurs pour obtenir des taux de calcul de swap pour des jours spécifiques de la semaine. 1 — swap simple, 3 — swap triple, 0 — aucun swap.

    • Correction du fonctionnement des fonctions CopyTicks et CopyTicksRange. Une erreur pouvait entraîner le retour de données obsolètes lors du passage à minuit. L'erreur s'est produite lorsqu'aucun tick n'a été fourni pour l'instrument financier.
    • Correction des erreurs signalées dans les journaux de plantage.
    11 février 2022
    MetaTrader 5 build 3210 : Nouvelles méthodes matricielles et contrôle des valeurs minimales/maximales des indicateurs

    MQL5

    1. Ajout des fonctions Min, Max, ArgMin, ArgMax et Sum pour les vecteurs et les matrices. Utilisez ces fonctions pour trouver les valeurs minimales et maximales, les indices pertinents et la somme.
    2. Ajout du support des méthodes Flat pour la matrice. Avec ces méthodes, un élément de matrice peut être atteint via un index au lieu de deux.
      double matrix::Flat(ulong index) const;      // getter
      void matrix::Flat(ulong index,double value); // setter

      Pseudocode pour calculer l'adresse d'un élément matriciel :

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

      Par exemple, pour 'matrix mat(3,3)', l'accès aux éléments peut s'écrire comme suit :

        lecture : 'x=mat.Flat(4)', qui équivaut à 'x=mat[1][1]'
        écriture : 'mat.Flat(5, 42)', équivaut à 'mat[1][2]=42'

      Si la fonction est appelée avec un index de matrice non valide, l'erreur d'exécution critique OutOfRange sera générée.

    3. Formatage amélioré des nombres à virgule flottante dans les paramètres d'entrée du programme MQL5. Lors de la lecture de certains nombres réels, des nombres avec de nombreux zéros ont été remplacés dans les paramètres d'entrée, par exemple, 0,4 était représenté par 0,400000000002.
    4. Correction d'erreurs dans la bibliothèque mathématiqueMath\Stat\Math.mqh. La fonction MathSample de cette bibliothèque a été révisée pour correspondre au comportement traditionnel des bibliothèques mathématiques similaires lors de l'échantillonnage avec retour en arrière.
    5. Correction de l'erreur CopyTicks/CopyTicksRange qui pouvait entraîner le retour de données obsolètes lors du franchissement de minuit, lorsqu'aucun tick n'est fourni pour l'instrument financier.
    6. Ajout de nouvelles valeurs INDICATOR_FIXED_MINIMUM et INDICATOR_FIXED_MAXIMUM dans l'énumération ENUM_CUSTOMIND_PROPERTY_INTEGER.
      À l'aide de ces propriétés, vous pouvez fixer ou défixer les valeurs d'indicateur minimales et maximales à l'aide de la fonction IndicatorSetInteger. Lors de l'appel de IndicatorSetInteger(INDICATOR_FIXED_MINIMUM/INDICATOR_FIXED_MAXIMUM, true), la valeur minimale ou maximale actuelle est utilisée.



    Testeur

    1. Algorithme de calcul du ratio de Sharpe révisé pour correspondre à la formule traditionnelle, dans laquelle la valeur correspond à un intervalle d'un an. L'algorithme précédent était basé sur la variabilité du PnL obtenu et ignorait les fluctuations des actions par rapport aux positions ouvertes. Désormais, le calcul inclut les mouvements des actions, tandis que le ratio de Sharpe est interprété de manière classique :
      • Ratio de Sharpe < 0              La stratégie n'est pas rentable et n'est pas adaptée. Mauvais.
      • 0 < Ratio de Sharpe  < 1,0    Le risque ne paie pas. De telles stratégies peuvent être envisagées lorsqu'il n'y a pas d'alternative. Indéfini.
      • Ratio de Sharpe ≥ 1,0          Si le ratio de Sharpe est supérieur à un. Cela peut signifier que le risque est payant et que le portefeuille/stratégie peut donner des résultats. Bon.
      • Ratio de Sharpe ≥ 3,0          Une valeur élevée indique que la probabilité d'obtenir une perte dans chaque transaction particulière est très faible. Très bien.

    Terminal

    1. Optimisation de la consommation mémoire du terminal.
    2. Fonctionnement amélioré de la plateforme avec un sous-système réseau pour améliorer les performances et réduire les retards du réseau.
    3. Suppression de l'affichage du niveau zéro de la grille dans les indicateurs lorsque le rendu de la grille est désactivé.


    28 janvier 2022
    MetaTrader 5 build 3180: Vecteurs et matrices en MQL5 et utilisation améliorée

    Terminal

    1. Ajout de l'activation de la fenêtre graphique lors du déplacement d'un symbole du Market Watch ou d'une opération de trading de l'historique du compte vers celui-ci.

      Ces deux actions changent l'instrument financier du graphique en celui sélectionné. Auparavant, ils ne laissaient pas la fenêtre du graphique devenir active. En conséquence, certaines actions supplémentaires, telles que l'appel d'une boîte de dialogue de trading (F9) ou la modification de l'échelle (+/-) à l'aide de raccourcis clavier, pouvaient être appliquées par erreur à un autre graphique. Maintenant, le graphique, dont le symbole a été modifié par le glisser, est immédiatement sélectionné pour un travail ultérieur.

    2. Ajout de l'ouverture d'une nouvelle fenêtre d'ordre lors d'un double-clic sur une opération de trading dans l'historique du compte. Un instrument financier de l'opération sur laquelle un utilisateur a cliqué est immédiatement inséré dans la boîte de dialogue, ce qui permet un trading plus rapide. Une commande similaire a été ajoutée au menu contextuel.




    3. Ajout d'une inclusion intelligente des volumes réels ou des ticks lors de l'ouverture de nouveaux graphiques. Ces données sont importantes lors de l'analyse du marché. Cependant, tous les traders ne sont pas au courant de sa disponibilité sur la plateforme.

      Les volumes de trading réels ont une priorité plus élevée. S'ils sont fournis par un courtier, leur affichage est activé sur le graphique. Sinon, l'affichage des volumes de ticks est activé.

      Le mécanisme n'est utilisé que si le graphique est ouvert avec le modèledefault.tpl. Les volumes ne sont plus activés lors de la réouverture d'un graphique si un utilisateur les a désactivés manuellement dans les paramètres du graphique. Les modèles personnalisés ne sont pas affectés.

    4. Optimisation et accélération considérable de l'affichage de l'interface utilisateur.
    5. Amélioration de la fonction d'impression des graphiques appelée via le menu Fichier :
      • Correction de l'enregistrement des paramètres d'impression
      • Amélioration de l'apparence de la page imprimée : augmentation des lignes de grille, suppression du nom du programme, mise à jour de la police d'en-tête
      • Agrandissement de la boîte de dialogue d'impression pour un affichage correct de l'interface

    6. Correction du fonctionnement du champ de volume dans le panneau de trading rapide du graphique. Avant le correctif, la valeur était réinitialisée à la précédente valeur après avoir entré une nouvelle valeur et appuyé sur Tab.
    7. Correction de l'affichage de l'historique de trading sur le graphique. Auparavant, les opérations du compte précédent n'étaient pas supprimées des graphiques lors du passage d'un compte à l'autre.
    8. Correction du paiement pour MQL5.com via PayPal.
    9. Correction du blocage de la plateforme lors de l'affichage d'un graphique de volatilité des options.
    10. Vérification du numéro de téléphone fixe dans la fenêtre d'enregistrement du compte réel. Dans certains cas, la plateforme ne permettait pas à un utilisateur de passer à l'étape d'inscription suivante après avoir saisi un numéro correct.
    11. Correction de la vérification des droits lors de la participation à une discussion de groupe avec des membres de MQL5.com. Auparavant, un utilisateur nouvellement rejoint ne pouvait que lire les messages sans pouvoir en écrire.
    12. Modification du texte du graphique en cas d'absence de données. Désormais, "En attente de mise à jour" est remplacé par un nom de symbole, une période et un symbole.
    13. Meilleure prise en charge des prix négatifs ajoutés dans le build 2450. Les valeurs zéro peuvent désormais également être affichées pour les symboles du Market Watch appropriés.
    14. Correction de l'affichage des logos des produits dans le Market lorsque l'on travaillait sous Wine.

    MQL5

    1. Nous continuons à ajouter la prise en charge des vecteurs et des matrices. Les nouvelles fonctions élargissent considérablement les possibilités pour les développeurs de solutions basées sur des réseaux neuronaux.

      Plusieurs fonctions sont actuellement prêtes à l'emploi :
      • Eye - construit une matrice avec des 1 sur une diagonale spécifiée et des 0 ailleurs.
      • Identity - construit une matrice ayant une taille spécifiée avec des 1 sur la diagonale principale et des 0 ailleurs.
      • Ones — construit une matrice ayant une taille spécifiée remplie de 1.
      • Zeroes — construit une matrice ayant une taille spécifiée remplie de 0.
      • Full — construit une matrice ayant une taille spécifiée remplie de valeurs spécifiées.
      • Copy — construit une copie d'une matrice ou d'un vecteur.
      • Diag — extrait une diagonale d'une matrice et remplit la diagonale spécifiée avec les valeurs d'un vecteur.
      • Tri - construit une matrice avec des 1 sur une diagonale spécifiée et en dessous, et des 0 ailleurs.
      • Row — renvoie une ligne de matrice sous forme de vecteur et remplit la ligne spécifiée avec les valeurs du vecteur.
      • Col — renvoie une colonne de matrice sous forme de vecteur et remplit la colonne spécifiée avec les valeurs du vecteur.
      • Rows — renvoie le nombre de lignes dans une matrice.
      • Cols — renvoie le nombre de colonnes dans une matrice.
      • Transpose — transpose une matrice.
      • * — produit de matrices, vecteurs et scalaires — produit scalaire.
      • Power — élève une matrice à une puissance.
      • Kron — produit de Kronecker.
      • Cholesky — décomposition de Cholesky.
      • QR — Factorisation QR d'une matrice.
      • SVD — décomposition singulière.
      • LU — décomposition LU d'une matrice.
      • LUP — décomposition LUP d'une matrice.
      • Norm — calcule la norme de la matrice.
      • Cond — calcule le nombre conditionnel d'une matrice.
      • Spectrum - calcule le spectre d'une matrice
      • Det — calcule le déterminant d'une matrice.
      • Rank - calcule le rang de la matrice.
      • SLogDet — calcule le signe et le logarithme de base du déterminant d'une matrice.
      • Trace - calcule la trace de la matrice.
      • Solve — résoud un système d'équations linéaires.
      • LstSq — résoud un système d'équations linéaires en utilisant la méthode des moindres carrés.
      • Inv — calcule l'inverse d'une matrice.
      • PInv — calcule la pseudo-inverse d'une matrice par la méthode de Moore-Penrose.
      • Compare — compare deux matrices à l'aide d'epsilon.

      Pour plus de détails, veuillez lire la documentation MQL5correspondante.

    2. Correction d'erreurs lors de la gestion des fichiers et des bases de données liées à la limitation de la longueur du chemin. En particulier, la fonction DatabaseOpen permettait de définir un chemin plus grand que celui acceptable, provoquant une création incorrecte de la base de données. Maintenant, la fonction renvoie correctement le code d'erreur ERR_TOO_LONG_FILE_NAME.
    3. Correction du contrôle de la constance variable. Auparavant, le compilateur pouvait parfois ignorer l'erreur "La variable constante ne peut pas être transmise comme référence".
    4. Correction des avertissements erronés du compilateur concernant l'utilisation d'une variable non initialisée.
    5. Correction du fonctionnement de la fonction ChartWindowOnDropped pour les indicateurs. Auparavant, il retournait toujours zéro.
    6. Ajout de la prise en charge de Python 3.10 à l'intégration du module Python.

    VPS

    1. Correction de l'affichage de l'élément VPS dans le navigateur. Auparavant, il pouvait parfois disparaître lors du passage d'un compte à l'autre.

    MetaEditor

    1. Correction du déroulement des expressions complexes dans la fenêtre d'observation de débogage.

    Testeur

    1. Correction de l'exportation des rapports de test vers des fichiers. Certaines valeurs n'étaient pas arrondies correctement si une devise avec une précision de 0 décimales était utilisée comme devise de dépôt. Par exemple, JPY.
    22 octobre 2021
    MetaTrader 5 build 3091 : Améliorations

    Terminal

    1. Correction de l'ouverture d'une page vide lors de l'achat de services MQL5. Désormais, les résultats de l'opération sont immédiatement affichés pour l'utilisateur.
    2. Correction de la compression excessive des images de documents que les utilisateurs téléchargent lorsqu'ils demandent des comptes réels. Cela a amélioré la qualité des contrôles KYC automatiques et a facilité l'ensemble de la procédure d'ouverture de compte.
    3. Correction du fonctionnement des graphiques qui s'ouvrent à la fin du test.

    MQL5

    1. Ajout de la prise en charge de SQLite 3.36.0.

    MetaEditor

    1.  Ajout de la mise en surbrillance de l'arrière-plan des parenthèses correspondantes. L'option peut être activée via les paramètres générauxde MetaEditor.Amélioration du débogueurde programme MQL5.
    2. Amélioration du débogueurde programme MQL5.
    Correction des erreurs signalées dans les journaux de crash.
    21 octobre 2021
    MetaTrader 5 build 3090 : Améliorations et correctifs

    Terminal 

    1. Correction d'une erreur qui pouvait faire disparaître les symboles de trading personnalisés dans certaines conditions.
    2. Amélioration des icônes de menu et de barre d'outils.
    3. Trois nouvelles langues ont été ajoutées à MQL5.com : français, italien et turc.

      Désormais, la plus grande communauté de traders algorithmiques MQL5.community est disponible en 11 langues. Nous avons déjà localisé l'interface du site Web, la documentation et les sujets importants du forum. Les articles et le Calendrier Economique dans les nouvelles langues seront également bientôt disponibles.

    4. Correction des erreurs signalées dans les journaux de crash.

    MQL5

    1. Correction de bugs dans la fonction StringConcatenate.
    2. Correction du paramètre de la valeur _LastError lors de l'utilisation de la fonction FileSave. La variable peut contenir une valeur nulle au lieu de la description de l'erreur de fonction dans certaines conditions.
    3. Correction de l'importation de données depuis les ressources vers des tableaux de type double.

    MetaTester

    1. Correction d'une erreur qui provoquait le blocage de la fenêtre du graphique pendant les tests visuels.
    Documentation mise à jour.

    14 octobre 2021
    MetaTrader 5 build 3081 : Améliorations des services MQL5 et mises à jour de l'interface

    Terminal

    1. Amélioration de la navigation dans les services de la MQL5.Community

      Les sections Market, Signals et VPS ont été déplacées de l'espace de travail principal de la plateforme vers le navigateur. Le nouveau positionnement offre un accès facile aux produits souhaités et permet une gestion efficace des achats et des abonnements. Des sections "Comment ça marche" ont été ajoutées à chaque service, pour fournir les informations d'utilisation de base.


      Navigation améliorée des services MQL5.community


    2. Toutes les icônes de menu et de barre d'outils ont été entièrement repensées. L'interface du terminal est devenue plus conviviale :

      • Suppression de petits éléments des icônes
      • Réduction du nombre de couleurs utilisées pour éviter le bruit de couleur
      • Moins de dégradés sont utilisés pour améliorer la lisibilité
      • Des métaphores plus simples sont utilisées


      Tous les menus, barres d'outils et boîtes de dialogue ont été repensés dans la plateforme


    3. Ajout de l'affichage des coûts résultant de l'exécution de la transaction. Les informations pertinentes sont affichées dans l'historique des transactions. Cette fonctionnalité est utilisée par les courtiers réglementés par la NFA.


      L'historique du compte affiche désormais les coûts de transaction>


      Si votre courtier active le calcul des coûts sur le serveur, la nouvelle colonne Coûts apparaîtra dans l'historique de trading de votre compte. La colonne indique le coût d'exécution de la transaction par rapport au prix médian actuel du symbole (coût de spread médian).

    4. Lancement de la version coréenne de MQL5.com.

      Il s'agit du huitième langage disponible sur MQL5.community, la plus grande communauté de traders algorithmiques. L'interface du site Web, les articles, le calendrier économique et les sujets importants du forum sont déjà disponibles en coréen. La documentation MQL5 sera bientôt traduite.

    5. Correction du chargement des instruments de trading personnalisés. Dans certains cas, les paramètres de symboles nouvellement créés peuvent remplacer les paramètres de symboles existants.
    6. Correction de l'affichage sur le graphique de l'historique de trading du signal. Auparavant, l'option correspondante permettait l'affichage de toutes les transactions pour tous les instruments financiers, et pas seulement pour les symboles du graphique.
    7. Ajout de l'export de la colonne Frais au rapport d'historique de trading. Auparavant, la valeur n'était affichée que dans l'historique, mais elle ne pouvait pas être enregistrée dans un fichier.
    8. Fonctionnement optimisé et accéléré des panels de trading en un clic dans le Market Watch et sur les graphiques.
    9. Correction de l'utilisation du champ Ratios de Marge pour les instruments de trading personnalisés. Les valeurs peuvent être remises à zéro sous certaines conditions.
    10. Nous continuons de mettre en œuvre le service d'abonnement grâce auquel les traders peuvent acheter des services de trading supplémentaires auprès de courtiers Correction d'erreurs dans la fenêtre d'abonnement aux cotations.
    11. Correction de l'affichage de l'objet analytique Ligne de Tendance. Auparavant, la ligne pouvait disparaître lors de la mise à l'échelle ou du redimensionnement de la fenêtre graphique.
    12. Correction de l'affichage de l'objet analytique Rectangle. L'objet pouvait disparaître si l'un des points d'ancrage se trouvait au-delà de la zone de visibilité du graphique.
    13. Corrections et améliorations de la vitesse de fonctionnement liées au fonctionnement des graphiques intégrés de la MQL5.community.
    14. Correction de l'arrondi du paramètre Valeur dans la liste des positions ouvertes. La partie fractionnaire pouvait être masquée dans les versions précédentes.
    15. Correction de la vérification du téléphone mobile lors du processus d'ouverture de compte. Les numéros de téléphone pourraient être identifiés comme incorrects pour certains opérateurs chinois.
    16. Ajout de la prise en charge des mots de passe de compte MQL5 de plus de 32 caractères.
    17. Correction de l'export de certificats lors de l'utilisation de Wine. Cette option est utilisée pour les comptes avec authentification étendue, lors de la migration de tels comptes du bureau vers le mobile.
    18. Correction des boutons ouvrant les services MQL5 dans le panneau inférieur de la fenêtre Boîte à Outils. Les boutons étaient inactifs lorsque la fenêtre était non fixée.
    19. Ajout d'une limitation sur la taille du menu "Fichier \ Nouveau graphique". Désormais, le menu ne peut pas contenir plus de 128 sous-menus avec des groupes de symboles, chacun n'ayant pas plus de 32 symboles. La limitation accélère le fonctionnement du terminal et évite le gel lors de l'ajout d'un grand nombre de symboles de trading (2 000 ou plus) au Market Watch.

    MQL5

    1. Nous continuons à ajouter la prise en charge des vecteurs et des matrices. Les nouvelles fonctions élargiront considérablement les possibilités pour les développeurs de solutions basées sur les réseaux neuronaux.
    2. Ajout des valeurs DEAL_SL et DEAL_TP dans l'énumération ENUM_DEAL_PROPERTY_DOUBLE : les niveaux Stop Loss et Take Profit d'une transaction.

      Les valeurs pertinentes pour les transactions d'entrée et de renversement sont définies conformément au Stop Loss/Take Profit des ordres, qui a initié ces transactions. Les valeurs Stop Loss/Take Profit des positions appropriées au moment de la clôture de la position sont utilisées pour les transactions de sortie.

    3. Ajout de la valeur MQL_HANDLES_USED dans l'énumération ENUM_MQL_INFO_INTEGER — le nombre d'objets de classe actifs (handles) dans un programme MQL. Ceux-ci incluent à la fois des objets dynamiques (créés via new) et non dynamiques, des variables globales/locales ou des membres de classe. Plus un programme utilise de handles, plus il consomme de ressources.

    4. Ajout de nouvelles méthodes pour travailler avec la structure MqlCalendarValue qui décrit un événement de calendrier économique :

      • HasActualValue(void) — renvoie true si la valeur réelle est définie ; sinon renvoie false
      • HasForecastValue(void) — renvoie true si la valeur prévisionnelle est définie ; sinon renvoie false
      • HasPreviousValue(void) — renvoie true si la valeur précédente est définie ; sinon renvoie false
      • HasRevisedValue(void) — renvoie true si la valeur révisée est définie ; sinon renvoie false
      • GetActualValue(void) — renvoie la valeur réelle d'un événement (double) ou nan si la valeur pertinente n'est pas définie
      • GetForecastValue(void) — renvoie la valeur prévisionnelle d'un événement (double) ou nan si la valeur pertinente n'est pas définie
      • GetPreviousValue(void) — renvoie la valeur précédente d'un événement (double) ou nan si la valeur pertinente n'est pas définie
      • GetRevisedValue(void) — renvoie la valeur révisée d'un événement (double) ou nan si la valeur pertinente n'est pas définie

    5. Correction du débogage des programmes MQL5 qui utilisent des bibliothèques sous forme de fichiers EX5.
    6. Compilation accélérée de programmes contenant de grands tableaux initialisés par une séquence.
    7. Correction de l'exécution de la fonction CopyTicksRange avec des données de symboles de trading personnalisées. La fonction pourrait renvoyer des données hors de la période demandée.
    8. Correction de la vérification de la disponibilité de tous les paramètres du modèle lors de la spécialisation par paramètres. La compilation de code avec des templates de débogage peut provoquer une "erreur de génération de code" dans certaines conditions.

    Signals

    1. Ajout de la possibilité de renouveler automatiquement les abonnements à un Signal.

      Votre abonnement ne se terminera pas brusquement, car le système le renouvellera automatiquement pour un mois supplémentaire via le mode de paiement que vous avez précédemment utilisé pour l'achat de l'abonnement initial.


      Activer le renouvellement automatique de votre abonnement au Signal


      Si vous avez effectué votre paiement précédent à l'aide d'une carte et que le paiement de renouvellement échoue, le système essaiera d'effectuer un paiement à partir du solde de votre compte MQL5.

      Ne vous inquiétez pas des changements de prix d'abonnement. Si le prix augmente, le renouvellement automatique sera annulé. Vous recevrez une notification pertinente par e-mail.

      Vous pouvez activer ou désactiver l'option de renouvellement automatique à tout moment via la section Mes abonnements sur MQL5.com.


      Gérez les renouvellements automatiques à partir de la section Mes abonnements sur MQL5.com


    2. Correction de l'affichage de la vitrine Signals. Maintenant, le système identifie correctement la compatibilité des signaux avec le compte courant.

    Market

    1. Ajout de la recherche de produits par nom d'auteur et login dans la vitrine du Market. Auparavant, le service ne prenait en charge que la recherche par nom de produit et description.

    VPS

    1. Amélioration de l'option de renouvellement automatique de l'abonnement.

      Auparavant, le paiement du renouvellement ne pouvait être effectué qu'à partir du solde du compte MQL5. L'utilisateur devait s'assurer que le montant correspondant était disponible sur son compte.

      Désormais, il n'est plus nécessaire de recharger le compte MQL5. Le système renouvellera l'abonnement en utilisant le même mode de paiement que celui que vous avez utilisé pour l'abonnement initial. Si vous avez payé le VPS avec une carte et activé l'option de renouvellement automatique, le système utilisera le même mode de paiement pour la nouvelle période d'abonnement. Si le paiement échoue, le système essaiera d'effectuer un paiement à partir du solde de votre compte MQL5.


      Utilisez des cartes et d'autres méthodes de paiement pour le renouvellement automatique


      Avec la nouvelle option, vous pouvez être sûr que vos abonnements aux Expert Advisors et aux signaux ne s'arrêteront pas en raison de la fin de la période VPS. De plus, il n'est pas nécessaire de vérifier et de recharger votre solde manuellement.
      L'option ne sera utilisée que pour les nouveaux abonnements. Les paiements pour le renouvellement des abonnements existants seront effectués à partir du solde du compte MQL5.

    Tester

    1. Correction d'erreurs de test visuel. Dans certaines conditions, les graphiques peuvent ne pas afficher les indicateurs utilisés dans les Expert Advisors.

    MetaEditor

    1. Correction du saut à la déclaration de fonction ou de variable en utilisant Alt+G. L'action pouvait échouer si la déclaration était en dessous de la ligne d'appel.
    2. Ajout de l'affichage du type d'objet pour les références aux objets de classe dans le débogueur.
    3. Ajout de la possibilité d'afficher l'union dans la liste des expressions surveillées.

    MetaTrader 5 iPhone/iPad, MetaTrader 5 Android

    1. Ajout de l'affichage d'une clause de non-responsabilité lors du démarrage de l'application. Veuillez la lire attentivement. De plus, certains courtiers peuvent créer automatiquement un compte de démonstration lors du premier démarrage de l'application. Dans ce cas, vous verrez les termes pertinents.


      Avis de non-responsabilité ajoutés dans MetaTrader 5 pour iPhone/iPad

    2. Ajout de la possibilité de connecter un compte à surveiller dans le service Signals directement depuis l'application mobile. Cela peut être fait en sélectionnant "Surveillance du compte" dans le menu. Pour plus de commodité, le numéro de compte et le nom du courtier sont automatiquement ajoutés à la fenêtre d'inscription. Vous devez également spécifier le nom du signal et un mot de passe d'investisseur.

      Connectez votre compte au monitoring pour accéder à des statistiques de trading avancées, pour partager les résultats avec d'autres traders ou pour commencer à vendre vos signaux.

    3. Ajout de la prise en charge de Huawei AppGallery et des services HMS pour les terminaux mobiles fonctionnant sous Android OS. Les propriétaires de smartphones Huawei peuvent installer l'application à partir du magasin concerné et utiliser les notifications push.

    Documentation mise à jour.



    18 juin 2021
    MetaTrader 5 build 2980: Notifications push pour les opérations de trading

    Terminal

    1. Ajout de la possibilité de recevoir des notifications push du serveur. Vous serez informé des opérations de trading exécutées même si votre terminal est fermé.



      Dans les versions précédentes, les notifications sur un appareil mobile ne pouvaient être envoyées qu'à partir du terminal de bureau du trader. Lors de l'exécution d'une opération de trading, le terminal envoyait la notification correspondante à l'identifiant MetaQuotes spécifié dans les paramètres. Les notifications ne pouvaient être envoyées qu'à partir d'un terminal en cours d'exécution. Cette exigence a été levée. Si un Take Profit se déclenche sur le serveur alors que votre ordinateur est éteint, vous recevrez une notification concernant une position fermée du serveur.

      Pour commencer à recevoir des notifications du serveur, vous devez :
      • Avoir un compte réel car les notifications du serveur ne fonctionnent pas pour les comptes de démonstration
      • Installer MetaTrader 5 pour iOS ou Android sur votre smartphone
      • Ouvrir la section Messages dans le terminal mobile, recherchez votre ID MetaQuotes et spécifiez-le dans les paramètres du terminal de bureau
      • Activer les notifications du serveur dans les paramètres du terminal de bureau

      La disponibilité des notifications du serveur doit être fournie par votre courtier
      Trois types de notification sont pris en charge : les ordres, les transactions et les opérations sur le solde. Lorsque vous activez l'option, les types de notification disponibles seront affichés dans le journal du terminal :
      '1222': abonné aux transactions, ordres, notifications de solde du serveur de trading

    2. Mise à jour de la vitrine MetaTrader VPS. La section VPS est devenue plus pratique :
      • L'interface s'adapte à n'importe quelle largeur d'écran.
      • La vitrine prend moins de place verticalement pour s'intégrer dans l'espace de travail.
      • Les informations nécessaires n'apparaissent que lorsqu'elles sont nécessaires. Les détails du paiement n'apparaissent qu'une fois que vous avez sélectionné un plan de paiement.



    3. Dans le panneau Strategy Tester, ajout de commandes pour basculer rapidement vers les services MQL5 et vers la fenêtre Boîte à Outils. Les commandes ne sont affichées que dans la section Présentation, tandis que dans d'autres onglets, le panneau est utilisé pour gérer les tests.



    4. Ajout de la sauvegarde des états des fenêtres pour les services MQL5. Si vous laissez le Market ouvert avant de fermer le terminal, la fenêtre correspondante s'ouvrira au prochain lancement du terminal.
    5. Correction de la synchronisation périodique de l'état du compte MQL5. La copie du signal peut échouer dans certaines conditions en raison d'une erreur.
    6. Correction de l'affichage d'une sélection de produits Market recommandés.
    7. Correction du menu contextuel des signaux dans le Navigateur. Vous pouvez utiliser le menu pour visualiser le signal auquel vous êtes abonné ou pour vous désabonner d'un signal.

    MQL5

    1. Correction d'une erreur de l'opérateur "-" dans l'implémentation des nombres complexes dans la bibliothèque standard (fichier MQL5\Include\Math\Alglib\complex.mqh).
    2. MQL5 : Vous pouvez désormais utiliser n'importe quelle expression dans les séquences d'initialisation, pas seulement les constantes. Cela améliore la convivialité et la compatibilité avec le code C++.
      struct POINT
        {
         int x,y;
        };
      
      int GetYFunc(y)
        {
         return(y * y);
        }
      
      void SomeFunction(int x1,int x2,int y)
        {
         POINT pt={ x1+x2, GetYFunc(y) };
         ProcessPoint(pt);
        };
    3. Correction d'une erreur qui se produisait lors de la compilation des unions avec d'énormes tableaux de données.
    4. Correction du fonctionnement de la fonction StringToCharArray. Maintenant, il convertit l'intégralité de la chaîne passée en un tableau de char au lieu de s'arrêter au premier caractère nulde fin.
    5. Ajout d'un contrôle pour la présence explicite d'un appel de constructeur pour les classes/structures si leur classe parent n'a pas de constructeur par défaut.

    MetaEditor

    1. Ajout de l'affichage d'un lieu d'appel pour les fonctions en ligne dans le rapport de profilage.

      Dans l'exemple ci-dessous, l'appel à la fonction func(); est maintenant mis en évidence comme suit :




      La fonction func elle-même n'est pas mise en évidence puisque son code complet est placé dans OnStart.

    2. Ajout de la possibilité de créer des projetsvides. Il s'agit d'une fonctionnalité utile pour les projets de développement non standard avec des structures de fichiers spécifiques pour lesquelles les modèles par défaut ne conviennent pas.




      Un fichier de paramètres vide "mqproj" sera créé dans ce cas. Les fichiers de code source doivent être créés manuellement.

    3. Implémentation d'un lancement plus rapide de MetaEditor.
    4. Correction de l'affichage des données dans la liste des expressions observées lors du débogage. La liste peut afficher des valeurs de variables incorrectes dans certaines conditions.
    5. Correction de l'ajout automatique de l'extension ".py" aux fichiers de script Python créés à l'aide de l'assistant MQL.
    Documentation mise à jour.


    21 mai 2021
    MetaTrader 5 build 2940: Positionnement des vitrines des Services MQL5 dans l'espace de travail et conception mise à jour

    Terminal

    1. Les services de trading, y compris le Market, les Signals et le Virtual Hosting sont désormais affichés de manière pratique dans la zone de travail principale de la plateforme.

      Dans les versions antérieures, les zones d'achat des services MQL5 étaient situées dans la petite fenêtre Boîte à outils sous la fenêtre principale. Le nouvel emplacement permet l'affichage de vitrines complètes avec des options d'achat pratiques. La suppression des onglets inutiles de la zone inférieure offre plus d'espace pour d'autres fonctions de la plateforme.




      L'accès aux services supplémentaires n'interfère pas avec les principales fonctions, telles que le trading et l'analyse graphique.
      • Les onglets de service sont situés à la fin de la barre, après tous les onglets du graphique.
      • Les fenêtres de service inutilisées peuvent être fermées. Pour les rouvrir, utilisez le Navigateur, la barre d'outils ou le menu "Services".

      Nous avons également complètement repensé les services. Le design est devenu plus élégant et léger. Les signaux comportent des données supplémentaires, qui n'étaient auparavant disponibles que via la vitrine du site Web de la MQL5.community : un diagramme polaire avec les principales caractéristiques, les mesures de fiabilité et d'activité et d'autres variables.



    2. Ajout de la prise en charge des adresses IPv6.
      IPv4 qui est utilisé dans tous les réseaux a été créé il y a plus de 30 ans. Il contient des adresses IP de 32 bits, qui sont représentées par quatre nombres de 8 bits séparés par des points. Cet algorithme produit plus de quatre milliards d'adresses IP uniques. Cependant, le nombre croissant d'utilisateurs et d'appareils a accéléré l'épuisement du pool d'adresses disponibles.

      Pour éviter le problème d'épuisement, certains produits offrent une prise en charge supplémentaire de la norme IPv6 moderne. Ce protocole utilise une adresse de 128 bits, représentée par x:x:x:x:x:x:x:x, où chaque x est une valeur hexadécimale de six éléments d'adresse de 16 bits. Théoriquement, ce format autorise 5x10^28 adresses uniques. En plus d'un vaste espace d'adressage, ce protocole présente d'autres avantages par rapport à l'ancienne version. Pour plus de détails, veuillez consulter les articles spécialisés.

      La plateforme MetaTrader 5 est entièrement prête pour IPv6. Si votre courtier ou fournisseur passe au nouveau protocole, la prise en charge du protocole sera activée de manière transparente dans la plateforme, sans qu'aucune action supplémentaire ne soit requise de votre part.

    3. Terminal : Nous continuons à implémenter la fonctionnalité du gestionnaire de tâches présentée dans le build 2815. Nous avons ajouté une indication explicite pour les graphiques, sur lesquels le débogage ou le profilage du programme MQL est en cours d'exécution.




    4. Implémentation d'un lancement de plateforme plus rapide sous Wine sur les ordinateurs macOS et Linux. Optimisation générale et corrections de bugs :
      • Amélioration de l'affichage des menus, des barres d'outils et des boîtes de dialogue.
      • Correction d'erreurs dans l'affichage des sections "Market", "Signaux" et "VPS". En particulier, nous avons corrigé le chargement des logos de produits sur la vitrine du "Market".
      • Mise à jour du package pour une installation facile de MetaTrader 5 sur les ordinateurs macOS. Avec ce package, la plateforme peut être installée de la même manière que toute autre application.
        Le package comprend des composants supplémentaires qui permettent un fonctionnement plus stable et plus rapide. Il est fortement conseillé à tous les utilisateurs de packages de réinstaller MetaTrader 5 en téléchargeant la dernière version sur https://download.mql5.com/cdn/web/metaquotes.ltd/mt5/MetaTrader5.pkg.zip
      Si vous utilisez CrossOver, veuillez réinstaller complètement MetaTrader 5 pour obtenir la dernière version de la plateforme 64 bits.
    5. Correction de l'action de raccourci clavier "Ctrl + F9". Il active l'onglet Trade dans la Boîte à Outils.

    MQL5

    1. Nous continuons à limiter la circulation des technologies plus anciennes, y compris les composants 32 bits.
      • Les terminaux 32 bits ne sont plus autorisés à charger des programmes depuis le Market.
      • Les terminaux 32 bits ne peuvent pas se connecter au service d'hébergement.
      • La version 32 bits de MetaEditor ne prend pas en charge la protection supplémentaire des fichiers via MQL5 Cloud Protector.
      • Les programmes MQL5 compilés sous les anciennes versions de MetaEditor (publiées il y a 5 ans ou plus) ne peuvent pas fonctionner dans la nouvelle version du terminal.

      La prise en charge de la version de la plateforme 32 bits a été interrompue il y a un an, après la sortie de la version 2361. Nous vous recommandons fortement de passer à la version 64 bits de MetaTrader 5 afin d'accéder à toutes les fonctionnalités de la plateforme sans aucune limitation.
      En outre, nous recommandons à tous les Vendeurs, qui ont précédemment téléchargé des versions de produit 32 bits sur le marché, de les recompiler à l'aide du dernier MetaEditor 64 bits et de télécharger les nouvelles versions. La possibilité d'exécuter des programmes MQL5 32 bits dans les terminaux sera bientôt complètement désactivée.
    2. Ajout de la prise en charge des opérations avec des nombres complexes.
      Ajout d'un nouveau type intégré "complex".
      struct complex
        {
         double             real;   // Partie réelle
         double             imag;   // Partie imaginaire
        };
      Le type "complex" peut être passé par valeur comme paramètre pour les fonctions MQL5 (contrairement aux structures ordinaires, qui ne sont passées que par référence). Pour les fonctions importées à partir de DLL, le type "complex" doit être passé uniquement par référence.

      Le suffixe 'i' est utilisé pour décrire des constantes complexes :
      complex square(complex c)
        {
         return(c*c);
        }
        
      void OnStart()
        {
         Print(square(1+2i));  // Une constante est passée en paramètre
        }
      
      // "(-3,4)" will be output, which is a string representation of the complex number 
      Seules les opérations simples sont actuellement disponibles pour les nombres complexes : =, +, -, *, /, +=, -=, *=, /=, ==, !=.

      La prise en charge de fonctions mathématiques supplémentaires sera ajoutée ultérieurement, permettant le calcul de la valeur absolue, du sinus, du cosinus et autres.

    3. Nouveau code d'erreur TRADE_RETCODE_HEDGE_PROHIBITED - l'ouverture d'une position ou la passation d'un ordre en attente n'est pas autorisée car les positions de couverture sont interdites. L'erreur est renvoyée si un utilisateur tente d'exécuter une opération de trading au cas où la couverture est désactivée pour le compte et qu'un ordre ou une position opposée existe déjà pour le même symbole.

    MetaEditor

    1. Correction du débogage et de la terminaison du profilage en mode non visuel.
    2. Correction du profilage de l'indicateur sur des données réelles. Un tel profilage pourrait ne pas démarrer dans certaines conditions.

    VPS

    1. Correction de la migration de l'environnement vers un VPS. Une erreur peut se produire pour les Expert Advisors contenant des indicateurs en tant que ressources.

    Signaux

    1. Le mode de trading fixe vérifie les signaux copiés. Le trading de symboles peut être limité du côté du courtier, c'est-à-dire que le courtier peut définir des conditions 'long uniquement', 'court uniquement' ou 'clôture uniquement'. Dans les versions antérieures, la synchronisation exigeait des conditions de trading complètes et la copie n'était donc pas autorisée dans tous les autres cas. Après la mise à jour, les conditions partiellement limitées seront considérées comme "trading". Cette capacité sera particulièrement utile pour les clients des courtiers en actions qui souhaitent copier des signaux.

    Testeur

    1. Correction des vérifications des sessions de trading pendant les tests. L'exécution de l'opération de trading pouvait échouer pendant le test dans certaines conditions, auquel cas l'erreur "marché fermé" était renvoyée même si l'opération avait été lancée au cours d'une session de trading.
    Documentation mise à jour.
    12345678910111213