Mises à jour : MetaTrader 5

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

7 mars 2024
MetaTrader 5 build 4230 : Plus d'applications intégrées et un support ONNX étendu

Terminal

  1. Ajout de 28 nouveaux Expert Advisors et de 12 nouveaux indicateurs à la plateforme standard. Les applications sont disponibles dans les sections 'Expert Advisors\Free Robots' et 'Indicators\Free Indicators' du Navigateur. Chaque programme est disponible sous forme de code source avec des commentaires détaillés pour vous aider à apprendre le langage MQL5.

    Les robots mettent en œuvre des stratégies de trading basées sur des indicateurs techniques et des motifs de chandeliers, tels que « 3 Corbeaux noirs - 3 Soldats blancs », « Engulfing haussier - Engulfing baissier», « Harami haussier - Harami baissier » et autres. Les nouveaux indicateurs sont des implémentations des canaux populaires classiques : Camarilla, DeMark, Donchian, Fibonacci et Keltner, entre autres.



  2. Les préparatifs sont en cours pour le lancement des abonnements aux données de marché du Nasdaq. À partir de la plateforme, les traders pourront accéder à des cotations en temps réel et à des historiques de prix détaillés pour des centaines d'instruments financiers de l'une des plus grandes bourses. Les abonnements seront disponibles pour tout utilisateur disposant d'un compte de démo sur le serveur MetaQuotes-Demo et d'un compte MQL5.community.



    Pour commencer, il vous suffit d'acheter un abonnement et d'ajouter les symboles que vous voulez au Market Watch. Vous pouvez utiliser ces symboles comme des instruments normaux : ouvrez des graphiques, analysez-les à l'aide d'objets et d'indicateurs et exécutez des Expert Advisors dans le testeur de stratégie. L'accès à toutes les informations est mis en œuvre comme pour les instruments financiers ordinaires avec lesquels vous travaillez avec un courtier.

  3. Amélioration de la section relative à la marge dans la spécification de l'instrument. La section présente désormais les taux de marge et les valeurs calculées pour chaque instrument.



    Correction d'erreurs dans l'affichage des marges pour certains types de symboles.

  4. Ajout d'un lien vers le canal Telegram de MQL5 dans le menu Aide. Des contenus intéressants pour les développeurs sont régulièrement partagés sur la chaîne, notamment des revues de nouveaux articles de programmation et des robots et indicateurs gratuits issus de la Base de Code. Abonnez-vous à la chaîne pour rester informé et ne pas manquer d'informations importantes.



  5. Prise en charge du paramètre ShutdownTerminal dans la section [StartUp] des fichiers de configuration personnalisés. Ce paramètre permet de lancer la plateforme pour exécuter des tâches ponctuelles à l'aide de scripts. Vous avez par exemple un script qui prend une capture d'écran du graphique. Vous pouvez créer un fichier de configuration qui lance ce script en même temps que la plateforme. Si vous ajoutez la valeur "Yes" à ShutdownTerminal dans ce fichier, la plateforme s'arrêtera automatiquement dès que le script sera terminé.
  6. Protection renforcée des protocoles réseau et des produits du Market.
  7. Désactivation de la prise en charge du service Signals pour les comptes de démonstration. Pour accéder à des statistiques améliorées sur vos comptes de formation, utilisez le nouveau rapport de trading. Il présente de nombreuses mesures caractérisant la rentabilité et les risques de votre stratégie, notamment des graphiques de croissance, d'équilibre et de capitaux propres, des diagrammes de répartition des transactions par direction et par instrument, et bien plus encore.
  8. Correction de l'affichage des liens vers les contrats de courtage dans le menu d'Aide.
  9. Amélioration de la sélection du meilleur serveur lors de la location d’un VPS.
  10. Correction de l'actualisation de la page des abonnements lors du passage d'une section à l'autre dans le Navigateur.
  11. Correction de la mise à jour de la liste des accords lors de l'ouverture d'un compte préliminaire.
  12. Mise à jour des traductions de l'interface utilisateur.

MQL5

  1. Ajout de la propriété MQL_STARTED_FROM_CONFIG dans l'énumération ENUM_MQL_INFO_INTEGER. Renvoie un résultat positif si le script/Expert Advisor a été lancé à partir de la section StartUp du fichier de configuration. Cela signifie que le script/Expert Advisor a été spécifié dans le fichier de configuration avec lequel le terminal a été lancé.
  2. Nous continuons à développer le support pour les modèles ONNX.

    Les tâches d'apprentissage automatique ne nécessitent pas toujours une plus grande précision de calcul. Pour accélérer les calculs, certains modèles utilisent des types de données de moindre précision tels que Float16 et même Float8. Pour permettre aux utilisateurs de saisir les bonnes données dans les modèles, les fonctions suivantes ont été ajoutées à MQL5 :
    bool ArrayToFP16(ushort & dst_array[], const float & src_array[], ENUM_FLOAT16_FORMAT fmt);
    bool ArrayToFP16(ushort & dst_array[], const double & src_array[], ENUM_FLOAT16_FORMAT fmt);
    bool ArrayToFP8(uchar & dst_array[], const float & src_array[], ENUM_FLOAT8_FORMAT fmt);
    bool ArrayToFP8(uchar & dst_array[], const double & src_array[], ENUM_FLOAT8_FORMAT fmt);
    
    bool ArrayFromFP16(float & dst_array[], const ushort & src_array[] ,ENUM_FLOAT16_FORMAT fmt) ;
    bool ArrayFromFP16(double & dst_array[],const ushort & src_array[],ENUM_FLOAT16_FORMAT fmt) ;
    bool ArrayFromFP8(float & dst_array[],const uchar & src_array[],ENUM_FLOAT8_FORMAT fmt) ;
    bool ArrayFromFP8(double & dst_array[], const uchar & src_array[], ENUM_FLOAT8_FORMAT fmt);
    Étant donné que les formats de nombres réels pour 16 et 8 bits peuvent être différents, le paramètre "fmt" des fonctions de conversion doit indiquer quel format de nombres doit être traité. Pour les versions 16 bits, la nouvelle énumération NUM_FLOAT16_FORMAT est utilisée, avec les valeurs suivantes :


    Pour les versions 8 bits, la nouvelle énumération ENUM_FLOAT8_FORMAT est utilisée, avec les valeurs suivantes :

    • FLOAT_FP8_E4M3FN : Nombre à virgule flottante de 8 bits, 4 bits pour l'exposant et 3 bits pour la mantisse. Généralement utilisés comme coefficients.
    • FLOAT_FP8_E4M3FNUZ : Nombre à virgule flottante de 8 bits, 4 bits pour l'exposant et 3 bits pour la mantisse. Prend en charge NaN, ne prend pas en charge le zéro négatif et Inf. Généralement utilisés comme coefficients.
    • FLOAT_FP8_E5M2FN : Nombre à virgule flottante de 8 bits, 5 bits pour l'exposant et 2 bits pour la mantisse. Prend en charge NaN et Inf. Généralement utilisé pour les dégradés (gradients).
    • FLOAT_FP8_E5M2FNUZ : Nombre à virgule flottante de 8 bits, 5 bits pour l'exposant et 2 bits pour la mantisse. Prend en charge NaN, ne prend pas en charge le zéro négatif et Inf. Également utilisé pour les dégradés (gradients).

  3. Ajout de nouvelles méthodes matricielles et vectorielles utilisées dans l'apprentissage automatique :

    • PrecisionRecall calcule les valeurs pour construire une courbe de rappel de précision. Comme pour ClassificationScore, cette méthode est appliquée à un vecteur de valeurs réelles.
    • ReceiverOperatingCharacteristic calcule les valeurs pour construire la courbe ROC (Receiver Operating Characteristic). Comme pour ClassificationScore, cette méthode est appliquée à un vecteur de valeurs réelles.

  4. Mise à jour du Runtime ONNX vers la version 1.17. Pour plus de détails sur la version, veuillez consulter GitHub.
  5. Mise à jour du package d'intégration Python vers la version 5.0.4200, ajout de la prise en charge de Python 3.12. Mettez à jour votre package en utilisant la commande "pip install --upgrade MetaTrader5" pour télécharger les derniers changements.
  6. Correction du fonctionnement de la fonction OrderCalcMargin dans certains cas.
  7. Ajout de la propriété DEAL_REASON_CORPORATE_ACTION dans l'énumération ENUM_DEAL_REASON. Il s'agit d'une opération réalisée à la suite d'une action de l'entreprise : fusion ou changement de nom d'un titre, transfert d'un client vers un autre compte, etc.
  8. Ajout de la prise en charge de la comparaison de vecteurs et de matrices complexes pour la méthode Compare. La comparaison consiste à estimer la distance entre des nombres complexes. La distance est calculée comme sqrt(pow(r1-r2, 2) + pow(i1-i2, 2) et est un nombre réel qui peut déjà être comparé à epsilon.
  9. Correction de la conversion des variables de type couleur en texte au format RVB.
  10. Correction du retour du résultat de l'obtention des vecteurs propres dans la méthode Eig dans le cas d'une valeur propre complexe. Ajout d'une surcharge de méthode pour l'évaluation complexe.

MetaEditor

  1. Ajout d'un lien vers le livre récemment publié "Programmation MQL5 pour les Traders" dans le menu Aide\MQL5.community. Le livre a également été ajouté au système de recherche, ce qui vous permet de trouver les informations nécessaires directement à partir de MetaEditor :




  2. Amélioration de la recherche intégrée :

    • La section des résultats de la recherche dans la fenêtre de la Boîte à Outils a été divisée en 2 onglets : "Recherche" pour les résultats de recherche en ligne (documentation, articles, livres, etc.) et "Recherche dans les fichiers" pour les résultats locaux.
    • Un champ de recherche spécifique a été ajouté à la section des résultats. Vous pouvez l'utiliser à la place de la barre de recherche dans la barre d'outils principale de MetaEditor.

  3. Prise en charge des modes AVX, AVX2 et AVX512 lors de la compilation des commandes à partir de la ligne de commande. Pour compiler, ajoutez l'une des clés suivantes dans votre commande : /avx, /avx2 ou /avx512.
  4. Le moteur SQLite pour les opérations avec les base de données a été mis à jour à la version 3.45.
  5. Désactivation de la prise en charge d'Internet Explorer. Désormais, seul Microsoft Edge WebView2 est utilisé pour afficher les pages HTML. Par rapport à l'ancien MSHTML, le nouveau composant élargit considérablement les possibilités d'affichage du contenu en donnant accès aux technologies les plus récentes. L'utilisation de WebView2 améliore l'apparence de certaines sections de MetaEditor, augmente les performances et crée une interface plus réactive.
  6. Correction du blocage qui se produisait dans de rares cas lors de l'autocomplétion de fonctions.
  7. Correction du blocage qui se produisait dans de rares cas lors de l'autocomplétion de fonctions.

Testeur

  1. Correction des calculs de triple swaps si le jour de début du test tombe sur le jour du triple swap.

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

Terminal Web MetaTrader 5

Amélioration de l'affichage des exigences de marge dans les spécifications des contrats. En plus des ratios et des paramètres initiaux pour les calculs, les spécifications affichent désormais les valeurs finales de la marge. Si le montant de la marge dépend du volume de la position, les niveaux correspondants seront affichés dans la boîte de dialogue.



La marge est calculée sur la base du prix de l'instrument au moment de l'ouverture de la fenêtre de spécification et n'est pas mise à jour en temps réel. Les valeurs doivent donc être considérées comme indicatives. Pour recalculer les valeurs sur la base des prix actuels, ré-ouvrez la spécification de l'instrument.
18 janvier 2024
MetaTrader 5 Build 4150 : Export de rapports de trading et nouvelles méthodes d'apprentissage automatique dans MQL5

Terminal

  1. Ajout de l'export des rapports de trading vers des fichiers HTML et PDF. Grâce à cette option, vous pouvez facilement partager vos résultats avec vos collègues et vos investisseurs. De nouvelles commandes d'export sont disponibles dans le menu Fichier et dans le menu Rapport.




  2. Ajout de la possibilité d'enregistrer l'état actuel de la fenêtre du Market Watch dans un fichier CSV. Pour cela, sélectionnez Exporter dans le menu contextuel. Le fichier enregistre les mesures sélectionnées au moment de l'export. Pour enregistrer davantage de données, activez des colonnes supplémentaires dans le menu contextuel.




  3. Amélioration de l'affichage des exigences de marge dans les spécifications des contrats. Désormais, au lieu de ratios et de paramètres initiaux pour les calculs, les spécifications affichent les valeurs finales de la marge. Si le montant de la marge dépend du volume de la position, les niveaux correspondants seront affichés dans la boîte de dialogue.



    La marge est calculée sur la base du prix de l'instrument au moment de l'ouverture de la fenêtre de spécification et n'est pas mise à jour en temps réel. Les valeurs doivent donc être considérées comme indicatives. Pour recalculer les valeurs sur la base des prix actuels, ré-ouvrez la spécification de l'instrument.

  4. Désactivation de la prise en charge du service Signals pour les comptes de démonstration. Pour accéder à des statistiques améliorées sur vos comptes de formation, utilisez le nouveau rapport de trading. Il présente de nombreuses mesures caractérisant la rentabilité et les risques de votre stratégie, notamment des graphiques de croissance, d'équilibre et de capitaux propres, des diagrammes de répartition des transactions par direction et par instrument, et bien d'autres choses encore.
  5. Correction de l'affichage de la valeur du profit/perte potentiel lors de la modification du Take Profit et du Stop Loss pour les ordres Stop Limit.
  6. Corrections et améliorations liées au fonctionnement du système de Paiement.
  7. Correction de la duplication des vérifications lors du chargement d'un ensemble de symboles dans le Market Watch à partir d'un fichier *.set.
  8. Correction de l'installateur web pour Parallels. Désormais, lors de l'utilisation de ce système de virtualisation sur macOS avec M1/M2/M3, la plateforme sera installée correctement.
  9. Mise à jour des traductions de l'interface utilisateur.
  10. Correction des erreurs rapportées dans les journaux de crash.

MQL5

  1. Ajout de nouvelles méthodes pour les opérations avec les matrices et les vecteurs, qui sont utilisées dans l'apprentissage automatique.

    • ConfusionMatrix : Calcule la matrice d'erreur. La méthode est appliquée au vecteur des valeurs prédites.
    • ConfusionMatrixMultilabel : Calcule la matrice d'erreur pour chaque étiquette. La méthode est appliquée au vecteur des valeurs prédites.
    • ClassificationMetric : Calcule la métrique de classification pour évaluer la qualité des données prédites par rapport aux données réelles. La méthode est appliquée au vecteur des valeurs prédites.
    • ClassificationScore : Calcule la métrique de classification pour évaluer la qualité des données prédites par rapport aux données réelles. La méthode est appliquée au vecteur des valeurs réelles.
     
  2. Correction de l'enregistrement des données dans un fichier texte au format UTF-8 à l'aide de la fonction FileWrite.
  3. Fonctions Signal* désactivées et obsolètes. Elles renverront désormais des ensembles de signaux vides.

MetaEditor

  1. Augmentation du taux d'échantillonnage pour le profilage. Le profileur capture désormais les états de l'application 10 000 fois par seconde, ce qui permet une mesure plus précise des taux d'exécution des fonctions.
  2. Mise à jour des modèles disponibles dans l'assistant de codage automatique Copilot. Ajout du modèle ChatGPT-4 Turbo, suppression des implémentations obsolètes.
  3. Correction d'erreurs lors du remplacement de mots dans un fragment de texte sélectionné.

Testeur

  1. Correction du gel des tests en amont, qui pouvait se produire en mode d'optimisation générique.
  2. Optimisation et accélération des opérations grâce à l'historique de trading des programmes MQL5.
  3. Calculs des bénéfices fixes pour les opérations de clôture. Une erreur pouvait se produire pour les instruments de trading qui ne correspondent pas au symbole principal du test.

Terminal Web

  1. Correction de la mise à jour des propriétés des symboles de trading en cas de modification des propriétés correspondantes du côté du courtier.
  2. Correction de l'affichage du corps des bougies sur le graphique. Le graphique pouvait ne pas afficher les petits corps.
  3. Correction du fonctionnement du champ Pays dans le formulaire d'ouverture de compte.
20 octobre 2023
MetaTrader 5 build 4040: Améliorations et corrections

Terminal

  1. Améliorations du Nouveau rapport d'activité. Correction de l'affichage de la première valeur sur le graphique de croissance et des calculs de drawdown.



  2. Lors de l'ouverture d'un compte, les traders reçoivent plusieurs messages par le biais du système de courrier électronique interne. Ils fournissent des références et des informations utiles sur les capacités de la plateforme et les services intégrés. Nous avons mis à jour et amélioré ces emails. Nous les avons traduits en 50 langues et nous avons complètement renouvelé leur conception.
  3. Optimisation des pages de dépôts sur les comptes et de retraits.
  4. Correction de l'erreur de changement de volume lors du passage d’une nouvel ordre. Avec certaines combinaisons de paramètres d'instruments de trading, le champ n'était pas modifiable.
  5. Correction de l'affichage des liens vers les contrats de courtage dans la boîte de dialogue d'ouverture du compte de démonstration.
  6. Mise à jour des traductions de l'interface utilisateur.

MQL5

  1. Correction d'une erreur qui pouvait entraîner un crash du programme MQL5 au démarrage dans certaines conditions.

Terminal Web MetaTrader 5

  1. Correction de l'affichage des valeurs de Stop Loss et Take Profit dans l'historique des transactions.
  2. Amélioration de la journalisation. De nouveaux messages affichent des informations sur les connexions réussies et échouées.
  3. Correction du fonctionnement du menu contextuel dans le Market Watch.
  4. Correction de l'affichage des notifications des résultats des opérations lors du trading depuis le Market Depth.
  5. Correction d'une erreur qui provoquait la suppression de la sous-fenêtre de l'indicateur du graphique lors de l'ouverture de la boîte de dialogue de trading.
  6. Correction du glissement des niveaux de trading sur le graphique affichés au-dessus des objets d’analyse.
29 septembre 2023
MetaTrader 5 build 4000 : Améliorations apportées au rapport d'activité et au Terminal Web

Terminal

  1. Ajout de l'affichage de la croissance financière mensuelle dans les nouveaux rapports d'activité. Pour visualiser les indicateurs, accédez au Rapport de synthèse et sélectionnez le mode Solde.



  2. Correction et amélioration de l'affichage du nouveau rapport de trading.
  3. Mise à jour du Runtime ONNX vers la version 1.16. Pour les détails de la version, consulter GitHub.
  4. Mise à jour des traductions de l'interface utilisateur.

Terminal Web MetaTrader 5

  1. Correction de l'affichage des boîtes de dialogue de changement de mot de passe et d'ouverture de compte.
  2. Correction de l'affichage des valeurs de Stop Loss et de Take Profit dans l'historique. Une erreur pouvait survenir après la modification des niveaux concernés.
  3. Ajout d'un défilement dans la boîte de dialogue d'avertissement de risque.
  4. Mise à jour des traductions de l'interface utilisateur.
  5. Autres améliorations et corrections.
21 septembre 2023
MetaTrader 5 Build 3980 : Améliorations et corrections

Terminal

  1. Améliorations du nouveau rapport de trading. Correction de l'affichage de la valeur totale des swaps et du tableau des profits par symboles.
  2. Pages de dépôt et de retrait optimisées. Pour plus de détails sur l'intégration de la nouvelle plateforme avec les systèmes de paiement, veuillez lire les notes de mise à jour de la version 3950.
  3. Optimisation des recalculs des opérations financières sur l'ensemble de la plateforme, y compris dans le testeur de stratégie. Désormais, les bénéfices, les marges et de nombreux autres paramètres sont calculés plus rapidement.
  4. Mise à jour des traductions de l'interface utilisateur.

MQL5

  1. Ajout des méthodes Conjugate pour les types complex, vector<complex> et matrix<complex>. Elles implémentent les opérations de conjugaison de complexes.
    //+------------------------------------------------------------------+
    //| Fonction de démarrage du programme de script                     |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       complex a=1+1i;
       complex b=a.Conjugate();
       Print(a, "  ", b);
       /*
       (1,1) (1,-1)
       */
    
       vectorc va= {0.1+0.1i, 0.2+0.2i, 0.3+0.3i};
       vectorc vb=va.Conjugate() ;
       Print(va, "  ", vb);
       /*
       [(0.1,0.1),(0.2,0.2),(0.3,0.3)]  [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
       */
    
       matrixc ma(2, 3);
       ma.Row(va, 0);
       ma.Row(vb, 1);
       matrixc mb=ma.Conjugate();
       Print(ma);
       Print(mb);
       /*
       [[(0.1,0.1),(0.2,0.2),(0.3,0.3)]
        [[(0.1,0.1),(0.2,0.2),(0.3,0.3)]
    
       [[(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
        [[(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]
       */
       
       ma=mb.Transpose().Conjugate();
       Print(ma);
       /*
       [[(0.1,0.1),(0.1,-0.1)]
        [(0.2,0.2),(0.2,-0.2)]
        [(0.3,0.3),(0.3,-0.3)]]
       */
      }
  2. Ajout du traitement des sorties du modèle ONNX du type "Séquence de cartes".

    Pour les modèles ONNX qui fournissent des séquences de cartes dans la couche de sortie (ONNX_TYPE_SEQUENCE de ONNX_TYPE_MAP), un tableau dynamique ou fixe de structures doit être transmis comme paramètre de sortie. Les deux premiers champs de cette structure doivent correspondre aux types de clé et de valeur ONNX_TYPE_MAP et être des tableaux fixes ou dynamiques.

    Considérons le modèle iris.onnx créé par le code Python suivant :
    from sys import argv
    data_path=argv[0]
    last_index=data_path.rfind("\\")+1
    data_path=data_path[0:last_index]
    
    from sklearn.datasets import load_iris
    iris_dataset = load_iris()
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
    from sklearn.neighbors import KNeighborsClassifier
    knn = KNeighborsClassifier(n_neighbors=1)
    knn.fit(X_train, y_train)
    
    # Conversion en format ONNX
    from skl2onnx import convert_sklearn
    from skl2onnx.common.data_types import FloatTensorType
    initial_type = [('float_input', FloatTensorType([None, 4]))]
    onx = convert_sklearn(knn, initial_types=initial_type)
    path = data_path+"iris.onnx"
    with open(path, "wb") as f:
        f.write(onx.SerializeToString())
    Ouvre le fichier onnx créé dans MetaEditor :

    Visualisation du modèle ONNX dans MetaEditor


    La séquence Map est transmise dans "output_probability". Elle possède une clé de type INT64 (qui correspond au type long dans MQL5) et une valeur de type float. Pour obtenir les données de cette sortie, il faut déclarer la structure suivante :
    struct MyMap
      {
       long              key[];
       float             value[];
      };
    Nous avons utilisé ici des tableaux dynamiques avec les types correspondants. Dans ce cas, nous pouvons utiliser des tableaux fixes car la carte de ce modèle contient toujours 3 paires clé+valeur.

    Étant donné que la séquence Map est renvoyée, un tableau de structures de ce type doit être transmis en paramètre pour récupérer les données de la sortie output_probability. Ce tableau peut être dynamique ou fixe, en fonction des propriétés d'un modèle particulier. Exemple :
    //--- déclaration du tableau pour récupérer les données de la couche de sortie output_probability
    MyMap output_probability[] ;
    
    ...
    
    //--- modèle en cours d'exécution
    OnnxRun(model,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);

MetaEditor

  1. Correction de l'affichage des types de sortie dans le visualisateur de modèle ONNX.

Terminal Web

  1. Ajout d'une section "Contacter le Courtier" dans le menu principal du Terminal Web.
  2. Ajout d'une gestion des erreurs pour les authentifications SSL. Ce type d'authentification n'est pas pris en charge par le Terminal Web. Des mots de passe à usage unique peuvent être utilisés à la place.
  3. Correction du lien de téléchargement de la plateforme de bureau dans le menu principal.
  4. Correction de la boîte de dialogue de gestion des comptes. Si le courtier ne propose pas l'option pour ouvrir un compte de démo ou un compte réel, l'élément correspondant du menu sera masqué.
14 septembre 2023
MetaTrader 5 Build 3950 : Dépôts/retraits dans le terminal et mise à jour du rapport de trading

Terminal

  1. Added support for balance operations for depositing/withdrawing funds from a trading account directly in the client terminal.

    We have added integration of the most popular payment systems directly into the MetaTrader 5 platform, which allows brokers to provide traders with a new level of service. When depositing or topping up, simply select the method that suits you best and complete the transaction. For more convenience, traders can save selected cards so as not to enter card details each time. Brokers do not store payment details and card numbers. The payment data entered by a user is sent over a secure channel to the user-selected payment system.

    The new functionality provides traders with the opportunity to manage funds in one click without leaving the client terminal.



  2. Completely revamped the trading history report. Now it is more easy to view. We have revised the approach to presenting information and converted dry statistical reports into interactive graphs and diagrams. The work is still in progress, but you can evaluate the changes already.

    To view trading statistics, click Reports in the View menu.






    The report is divided into four tabs, each containing aggregated information:

    • Résumé - Résumé des opérations : données du compte, pertes et profits globaux, dépôts et retraits, solde, graphiques de croissance et de dividendes, etc.
    • Profit/perte - données sur les transactions rentables et perdantes. Le paramètre est divisé en fonction des types d'opérations (manuelles, algorithmiques et de copie). Les résultats peuvent être analysés en termes de transactions ou d'argent par mois et par année.
    • Long/Short - ratio dynamique des achats et des ventes à des périodes déterminées, ainsi que la rentabilité des achats et des ventes.
    • Symboles - analyse des transactions par instruments financiers. Vous y verrez les symboles sur lesquels vous gagnez ou perdez, la fréquence à laquelle vous les négociez, les graphiques des transactions et les volumes monétaires pour ces symboles.


    De nouveaux rapports vous permettent d'évaluer visuellement les résultats des transactions sous divers aspects en cliquant simplement sur les onglets. Les histogrammes, les graphiques et les diagrammes sont interactifs et fournissent des informations supplémentaires au passage du curseur de la souris. Nos concepteurs se sont efforcés de rendre les rapports aussi simples et clairs que possible. Essayez-les !

  3. Added the usage of AVX2 instructions in case they are supported by CPU. This allows for more efficient use of CPU capabilities the terminal is launched on. Now, when installing or updating, the terminal determines the CPU architecture on its own and installs the most optimal version. During the launch, the terminal sends a message (AVX/AVX2) to the log displaying the set of instructions the terminal is built for.
    Terminal	MetaTrader 5 x64 build 3914 started for MetaQuotes Software Corp.
    Terminal	Windows 10 build 19045, 20 x Intel Xeon  E5-2630 v4 @ 2.20GHz, AVX, 41 / 63 Gb memory, 58 / 280 Gb disk, UAC, GMT+2
    

    Advanced Vector Extensions (AVX) is an extension of the x86 instruction set for Intel and AMD microprocessors proposed back in 2008. Further development has led to the appearance of AVX2 and AVX-512 (2013).

  4. In addition to the two versions of MetaTrader 5 terminals on X64 and AVX, we have released the third version of the desktop terminal compiled with direct support for AVX2 commands. At the same time, ONNX models now also work with support for AVX2 commands.
  5. Added display of links to the broker's necessary regulatory documents. You can now obtain all the necessary legal information from your broker directly in the client terminal in Help / Terms & Conditions.



  6. Fixed 2FA authorization in case of the additional use of the extended authorization using certificates.
  7. Fixed display of internal mail messages when working on MacOS.
  8. Fixed display of the Signals window when working in Wine.
  9. Released new MetaTrader 4 and 5 installers for Linux.
  10. Added commands for visiting Linux and Mac terminal version download pages in Help. For traders' convenience, we have created a special section of the website with terminal versions for all platforms, as well as for trading in a browser.



  11. Fixed embedding images into internal mail.
  12. Released new MetaTrader 5 terminal installers for Mac with support for M1/M2 processors. Due to the transition to Wine 8.0.1, we strongly recommend that you remove old versions and install new ones. When using Wine versions older than 8.0.0, a message about the need for an update is displayed in the terminal log.
  13. Added "VPS Hosting Speed Up" in the network scan menu indicating the ping to your trading server. This allows you to clearly see how your network delays decrease when renting a built-in VPS.



  14. Strengthened the requirements for minimum password complexity, namely:

    • password length — at least 8 characters
    • the password must contain at least 1 character in upper and lower case, at least 1 digit and at least 1 special character.

  15. Usable links in terminal logs. Now when double-clicking on lines with https links, users are sent to their browsers and the link is opened.
  16. Fixed search for trading instruments in Market Watch. Now the symbol is first searched by name, and then by other fields: description, ISIN, etc.
  17. Fixed accounting for profit on trades when calculating the balance in account trading history reports. In some cases, the instrument type was not taken into account in the calculations.

VPS Hosting

  1. Added the ability to send and run EX5 programs compiled under the x64/AVX/AVX2 command set. Programs for AVX512 are not supported on the built-in VPS.
  2. Increased the number of locations for renting the built-in VPS up to 27. Now the selection of the closest server has become even wider.

MQL5

  1. Added control of compilation settings, including selection of extended processor instruction sets — AVX, AVX2, AVX512 and FMA3.

    Modern CPUs have a set of advanced instructions that significantly speed up mathematical calculations, but the vast majority of modern programs do not use these capabilities. We have added support for these instructions to the MQL5 language compiler, which allows for more efficient and faster code generation.

    We have also added the ability to choose which type of instructions to compile an MQL5 program with. You can specify both general settings for single programs in MetaEditor Options, and apply personal ones in project settings:



  2. Added the ENUM_AVERAGE_MODE and ENUM_CLASSIFICATION_METRIC enumerations to the Matrix and Vector Methods.
  3. Added Set method for vectors.
  4. Revised OpenCL initialization - now it is initialized by the first actual use, not by loading an MQL5 program containing OpenCL functions.
  5. Fixed an error when calling the SocketIsConnected function.
  6. Fixed delay in calling the OnDeinit method when unloading custom indicators.
  7. Fixed a compiler error, which caused incorrect calculation of the string length in the indicator_label property leading to incorrect display of tooltips for graphical objects.
  8. Fixed the use of multi-line comments in the macro body. An example of a macro where the error occurred:
    #define MACRO1 /*
    #define MACRO2 */
    void OnStart()
    {
    #ifdef MACRO2
        Print( 2 );
    #else
        Print( 1 );
    #endif
    }
  9. Fixed the order of parameters of the MathAtan2 function. The order now matches the similar function in C++.
  10. Added the new TERMINAL_CPU_ARCHITECTURE value to the ENUM_TERMINAL_INFO_STRING enumeration. Also, added the  __CPU_ARCHITECTURE__ macro — obtaining the CPU architecture of the computer the terminal is running on. Example of use:
    void OnStart()
      {
       Print("CPU name:         ",TerminalInfoString(TERMINAL_CPU_NAME));
       Print("CPU cores:        ",TerminalInfoInteger(TERMINAL_CPU_CORES));
       Print("CPU architecture: ",TerminalInfoString(TERMINAL_CPU_ARCHITECTURE));  
       Print("");
       Print("EX5 architecture: ",__CPU_ARCHITECTURE__);                            
      }
    
    CPU name:         12th Gen Intel Core i9-12900K
    CPU cores:        24
    CPU architecture: AVX2 + FMA3
    
    EX5 architecture: AVX

  11. Changed the extern modifier behavior. Now declaration of a variable with the extern modifier is a variable pre-declaration.

    New restrictions:
    1. La pré-déclaration de la variable ne doit pas contenir d'initialisation. Par exemple, lors de la compilation du code ci-dessous, nous obtenons l'erreur "X - extern variable initialization is not allowed" :
      extern int X=0;
      
      void OnStart()
        {
        }

    2. La variable "extern" doit être déclarée dans le programme sans le mot-clé "extern". Par exemple, lors de la compilation du code ci-dessous, nous obtenons l'erreur "unresolved extern variable X" :
      extern int X;
      
      void OnStart()
        {
        }

    3. Lors de l'utilisation de "extern", il est important de faire attention à l'ordre d'initialisation, car il est possible d'accéder à une variable avant qu'elle ne soit initialisée. Par exemple, le code suivant donnera "Y=0 X=5" dans le journal puisque l'initialisation de la variable Y a lieu avant l'initialisation de la variable X :
      extern int X;
      int        Y=X;
      
      void OnStart(void)
        {
         Print("Y=",Y," X=",X);
        }
        
      int X=_Digits;

MetaEditor

  1. Added the usage of AVX2 instructions in case they are supported by CPU.
  2. Fixed an error occasionally causing freezes during compilation.
  3. Improved display of local variables when debugging.

Tester

  1. Added the usage of AVX2 instructions in case they are supported by CPU.

Updated user interface translations.

Fixed errors reported in crash logs.


MetaTrader 5 Web Terminal build 3950

  1. Added display of the Ask price to the chart settings.




  2. Accelerated initial terminal loading.
  3. Added the ability to change the password.
  4. Added the ability to delete and save the password.
  5. Added a custom period for displaying trading history.
  6. Fixed forced password change.
  7. Fixed calculation of diff — the distance between the open price and TP/SL levels.





  8. Fixed ticks stop error when closing all orders/deals.
  9. Fixed display of Economic calendar events. Sometimes, they were not displayed on the chart despite the option being enabled.
  10. Fixed indicator reset when changing a chart symbol.
  11. Fixed an error in the form of opening a real account when confirming the phone/email.
  12. Added new translations and corrected existing ones.

8 juin 2023
MetaTrader 5 build 3800 : Ordres Book or Cancel, assistant IA de codage et support ONNX amélioré

Terminal

  1. Prise en charge de la nouvelle politique de remplissage — Passive / Book or Cancel (BOC).


    Politique d'exécution des nouveaux ordres — Passive / Book or Cancel


    La politique BOC indique qu'un ordre ne peut être placé que dans la Profondeur du Marché (carnet d'ordres). Si l’ordre peut être exécuté immédiatement après avoir été passé, cet ordre est annulé. Cette politique garantit que le prix de l'ordre passé sera inférieur au prix actuel du marché. Le BOC est utilisé pour mettre en œuvre le trading passif : il est garanti que l'ordre ne peut pas être exécuté immédiatement lorsqu'il est passé et qu'il n'affecte donc pas la liquidité actuelle. Cette politique de remplissage n'est prise en charge que pour les ordres limit et stop limit en mode d'Exécution Boursière (Exchange Execution).

    La disponibilité de la nouvelle politique de remplissage dépend du courtier.

  2. La plateforme utilise maintenant Microsoft Edge WebView2 pour afficher le contenu HTML.

    Par rapport à l'ancien MSHTML, le nouveau composant élargit considérablement les capacités d'affichage du contenu en donnant accès aux technologies modernes. L'utilisation de WebView2 améliore l'apparence de certaines sections de la plateforme, augmente les performances et crée une interface plus réactive. Le nouveau composant affectera en particulier les sections Market, Signals et VPS.
    La prise en charge complète de WebView2 a été introduite dans Windows 10. Nous recommandons vivement à tous les utilisateurs de passer à la dernière version du système d'exploitation et d'installer toutes les mises à jour disponibles. La plateforme continuera à utiliser MSHTML sous Windows 7 et Wine, mais les nouvelles fonctionnalités ne seront pas disponibles. La version minimale recommandée du système d'exploitation est Windows 10 21H2 (build 19044, novembre 2021).

  3. Amélioration du système de sécurité du Market. Afin d'exécuter le produit, l'utilisateur doit maintenant être autorisé dans la plateforme avec le même compte MQL5 avec lequel le produit a été acheté. Le compte doit être spécifié dans la section Outils \ Options \ Communauté :


    Spécifiez votre compte MQL5 dans les paramètres de la plateforme


    Si aucun compte ou un compte non valide est spécifié, le produit ne démarrera pas et le message suivant sera écrit dans le journal de la plateforme :
    ’NomDuProduit' nécessite un compte MQL5 actif dans Outils->Options->Communauté
  4. Ajout de la commande Vue d'ensemble au menu contextuel de la section historique. La commande ouvre un rapport de trading pour le compte :


    Commande pour accéder au rapport de trading


  5. Correction des erreurs d'affichage dans la boîte de dialogue d'authentification à deux facteurs. Si le terminal possède plusieurs comptes portant le même numéro mais ouverts auprès de courtiers différents, le formulaire de connexion au compte peut ne pas afficher le champ du mot de passe à usage unique.
  6. Mise en œuvre d'un rendu plus rapide des indicateurs avec le style d'affichage DRAW_COLOR_CANDLES.
  7. Correction des erreurs de création de rapports de trading. Les valeurs des bénéfices et des capitaux propres sur le graphique peuvent être affichées de manière incorrecte dans certaines conditions.
  8. Ajout de l'affichage des coûts dans le rapport de trading. La valeur indique les coûts totaux encourus lors de la réalisation des transactions par rapport au prix moyen actuel du symbole (coût de l'écart au point moyen). Il s'agit du montant que le trader a perdu à cause du spread. La disponibilité de cette valeur dépend du courtier.
  9. Traductions de l’interface mises à jour.
  10. Amélioration de la stabilité sous Wine, en particulier sur les systèmes macOS. Nous recommandons d'enlever complètement les anciens terminaux et de les réinstaller :


  11. Améliorations des procédures d'installation des paquets et de téléchargement des mises à jour. Analyse améliorée de la disponibilité de AVX sur l'ordinateur de l'utilisateur lors de la sélection d'un paquet de distribution.
  12. Activation de la prise en charge de TLS 1.3 dans les protocoles web. TLS 1.0 est considéré comme obsolète et peu sûr. Il a donc été désactivé.
  13. Correction de la comptabilisation des commissions des agents dans les rapports sur l'historique des transactions. Les transactions concernées pouvaient être ignorées lors du calcul du bénéfice final.
  14. Correction de l'impossibilité de modifier le serveur dans la boîte de dialogue de connexion au compte. Le problème pouvait se produire lorsque le terminal contenait plusieurs comptes portant le même numéro et provenant de différents courtiers.
À partir de cette version, les installateurs ne fonctionneront qu'avec les versions 64 bits de la plateforme. La prise en charge des versions 32 bits sera interrompue. Les versions 32 bits installées précédemment fonctionneront jusqu'au 1er janvier 2024.

MQL5

  1. Ajout d'une nouvelle valeur STAT_COMPLEX_CRITERION dans l'énumération ENUM_STATISTICS. Utilisez la propriété pour obtenir la valeur du critère complexe calculé à la suite de l'optimisation.
  2. Méthode RegressionMetric améliorée utilisée pour calculer la métrique de régression sur la base de la matrice ou du vecteur transmis. Ajout des paramètres vector_true et matrix_true pour passer les valeurs réelles qui évaluent la qualité des données prédites.
    double vector::RegressionMetric(
       const vector& vector_true,            // valeurs vraies
       const ENUM_REGRESSION_METRIC  metric  // métrique
       );
     
    double matrix::RegressionMetric(
       const matrix& matrix_true,            // valeurs vraies
       const ENUM_REGRESSION_METRIC metric   // métrique
       );
     
    vector matrix::RegressionMetric(
       const matrix& matrix_true,            // valeurs vraies
       const ENUM_REGRESSION_METRIC metric,  // métrique
       const int                      axis   // axe
       );
  3. Ajout de la méthode LinearRegression. Elle renvoie un vecteur/matrice contenant les valeurs de régression linéaire calculées pour le vecteur/matrice transmis.
    vector::LinearRegression();
     
    matrice matrix::LinearRegression(
       ENUM_MATRIX_AXIS axis=AXIS_NONE // axe le long duquel la régression est calculée 
       
    Exemple :
    vecteur vector_a;
    //--- remplit le vecteur avec les prix
    vector_a.CopyRates(_Symbol, _Period, COPY_RATES_CLOSE,1, 100);
    //--- obtient une régression linéaire
    vecteur vector_r=vecteur_a.LinearRegression();
    Les résultats sont visualisés dans un graphique :


    Visualisation du résultat retourné par la méthode LinearRegression


  4. Ajout de la méthode HasNan, qui renvoie le nombre de valeurs NaN dans une matrice/un vecteur.
    ulong vector::HasNan();
    ulong matrix::HasNan();
    Lors de la comparaison d’une paire d'éléments ayant des valeurs NaN, les méthodes Compare et CompareByDigits considèrent ces éléments comme égaux, alors que dans le cas d'une comparaison habituelle de nombres à virgule flottante, NaN != NaN.

  5. Modification de la structure OnnxTypeInfo utilisée pour les opérations avec les modèles ONNX (Open Neural Network Exchange) :

    struct OnnxTypeInfo
      {
       ENUM_ONNX_TYPE       type;            // type du paramètre
       OnnxTensorTypeInfo   tensor;          // description du tenseur
       OnnxMapTypeInfo      map;             // description de la carte
       OnnxSequenceTypeInfo sequence;        // description de la séquence
      };

    Le type de données est spécifié dans la structure à l'aide de nouvelles sous-structures :

    • OnnxTensorTypeInfo - tenseur
    • OnnxMapTypeInfo - carte
    • OnnxSequenceTypeInfo - séquence

    struct OnnxTensorTypeInfo
      {
       ENUM_ONNX_DATATYPE   data_type;       // type de données dans le tenseur
       long                 dimensions[];    // nombre d'éléments
      };
    
    struct OnnxMapTypeInfo
      {
       ENUM_ONNX_DATA_TYPE  key_type;        // type de la clé
       OnnxTypeInfo         type_info;       // type de la valeur
      };
    
    struct OnnxSequenceTypeInfo
      {
       OnnxTypeInfo         type_info;       // type de données dans la séquence
      };
    En fonction de OnnxTypeInfo::type (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP ou ONNX_TYPE_SEQUENCE), la sous-structure concernée est remplie.

  6. Amélioration de la prise en charge des modèles ONNX.
  7. Ajout des méthodes CopyIndicatorBuffer qui permettent d'obtenir les données du buffer de l'indicateur dans un vecteur.
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,ulong start_pos,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,ulong count);
    bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,datetime stop_time);
  8. Correction des opérations avec des tableaux à 2 dimensions ou plus dans les méthodes FrameAdd et FrameNext.
  9. Correction de la méthode CRedBlackTree::Remove de la Bibliothèque Standard.
  10. Mise en œuvre de correctifs dans la bibliothèque Fuzzy Logic.

MetaEditor

  1. Intégration accrue avec l'assistant de codage automatique avancé Copilot. Son fonctionnement est basé sur les modèles OpenAI. Saisissez un commentaire ou une partie d'une fonction et envoyez le prompt. Le réseau neuronal analysera le message et proposera des options de codage pour mettre en œuvre l'idée.


    Assistant de codage Copilot


    Selon le type de fichier, la chaîne "MQL5 language", "Python language" ou "C++ language" est automatiquement insérée au début de chaque invite. Ainsi, le réseau neuronal fournira le résultat dans la langue requise.

    Copilot est actuellement gratuit et est déjà activé dans l'éditeur. Plusieurs options sont disponibles sous Outils \ Options \ Copilot :


    Paramètres de Copilot


    Paramètres de paiement :

    • Utiliser votre compte MQL5 : cette option est actuellement disponible gratuitement. Par la suite, vous pourrez payer l'abonnement directement à partir du solde de votre compte MQL5.
    • Utilisez une clé OpenAI si vous avez souscrit un abonnement et que vous disposez de la clé correspondante.

    Paramètres de l'invite :

    • Modèle — un réseau neuronal qui traitera vos demandes. text-davinci-003 et gpt-3.5-turbo sont actuellement disponibles. La prise en charge de gpt-4 sera bientôt ajoutée.
    • Nombre maximal de jetons - nombre d'unités de texte que le modèle peut renvoyer en réponse à une invite.
    • Variabilité - affecte la rigueur avec laquelle le réseau neuronal suivra l'invite. Plus la valeur est grande, plus le résultat est aléatoire. Cette option correspond au paramètre température dans les modèles OpenAI.

  2. Ajout de la possibilité de visualiser les propriétés des modèles ONNX.

    Vous pouvez visualiser le contenu du fichier *.onnx directement dans l'éditeur. Par exemple, recherchez le projet ONNX.Price.Prediction dans Boîte à Outils \ Projets Publics et sélectionnez Rejoindre dans le menu contextuel. Le projet sera téléchargé sur votre ordinateur et apparaîtra dans le Navigateur.


    Ouvrez les modèles ONNX directement dans MetaEditor


  3. Ajout de la possibilité de visualiser les modèles d'apprentissage automatique et les réseaux neuronaux à l'aide de Netron. Cette visionneuse prend en charge les modèles les plus courants, notamment ONNX, TensorFlow Lite, Caffe, Keras et ncnn entre autres.

    Pour visualiser un modèle, sélectionnez son fichier dans le Navigateur et cliquez sur "Ouvrir dans Netron". Si cet utilitaire n'est pas installé, la page GitHub s'ouvrira, à partir de laquelle vous pourrez télécharger le programme d'installation correspondant à votre système d'exploitation. Par exemple, utilisez Netron-Setup-X.X.X.exe pour Windows. Si le programme est installé, le modèle s'ouvrira immédiatement pour être visualisé à partir du Navigateur.


    Visualiser des modèles d'apprentissage automatique avec Netron


    Formats pris en charge :

    • armnn, caffemodel, circle, ckpt, cmf, dlc, dnn, h5, har, hd5, hdf5, hn, keras, kmodel,
    • lite, mar, meta, mge, mlmodel, mlnet, mlpackage, mnn, model, nb, ngf, nn, nnp,
    • om, onnx, ort, paddle, param, pb, pbtxt, pdiparams, pdmodel, pdopt, pdparams, prototxt, pt, pth, ptl,
    • rknn, t7, tfl, tflite, tmfile, tm, tnnproto, torchscript, uff, xmodel

  4. Traductions de l’interface mises à jour.

Tester

  1. Correction du calcul de la métrique "Perte moyenne par position" (Average losing trade) dans le rapport de test. Le calcul pouvait auparavant inclure par erreur des opérations d'entrée si des commissions étaient facturées pour ces opérations.
  2. Amélioration des options des commission personnalisées dans le testeur de stratégie. Pour définir un symbole, indiquez son nom plutôt que le chemin d'accès complet.
  3. Mise à jour des icônes dans le testeur de stratégie. De nouvelles métaphores les rendront plus faciles à comprendre.

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

Terminal Web

  1. Amélioration de la section relative à l'historique des trades :

    • Ajout de l'affichage des opérations de solde dans l'historique des transactions, telles que les dépôts et les retraits, les commissions et les ajustements.
    • Ajout de l'affichage des totaux dans l'historique des transactions : solde, profit, commission, dépôts, retraits et nombre d'ordres entre autres.
    • Ajout de la possibilité de trier les opérations et de filtrer l'historique par profondeur dans la version mobile.


    Mise à jour de l'historique de trading


  2. Amélioration des spécifications des contrats des symboles. Les informations suivantes ont été ajoutées : limite de volume, taille et valeur du tick, marge initiale et marge couverte.
  3. Amélioration des schémas de couleurs :

    • Les ordres en attente sont affichés en gris sur le graphique. La couleur de la position dépend de la direction : rouge pour les Ventes et bleu pour les Achats. Les nouvelles couleurs facilitent la navigation, en particulier lorsque de nombreuses opérations sont affichées sur le graphique.
    • Lors de la visualisation ou de la modification d'une position, seule cette position et ses niveaux sont mis en évidence. Toutes les autres positions et tous les autres ordres deviennent gris et leurs niveaux sont masqués dans l'échelle des prix. Il est ainsi maintenant plus facile de gérer des opérations distinctes.
    • La couleur du Stop Loss est passée du rouge à l'orange pour éviter toute confusion avec les positions de vente.
    • Amélioration des icônes sur la carte indiquant l'heure de fermeture de la position. Une icône verte est utilisée pour les positions fermées par un Take Profit et une icône rouge est utilisée pour celles fermées par un Stop Loss.

  4. Ajout de traductions de l'interface en arabe, bulgare, vietnamien, grec, indonésien, malais, néerlandais, persan, polonais, thaï, ukrainien et hindi. Le terminal web est désormais disponible en 24 langues.
  5. Correction des traductions de l'interface utilisateur en turc.
  6. Correction de la modification et de la suppression des ordres en attente dans la version mobile du Terminal Web.
  7. Correction de l'info-bulle "marché fermé" sur le graphique.
  8. Correction de l'affichage des bénéfices dans le bouton de fermeture de la position dans la boîte de dialogue de trading. L'erreur pouvait se produire lors d’une fermeture partielle.
  9. Correction de l'affichage des notifications de trading sur le graphique.
  10. Correction de la modification du volume à l'aide de flèches dans la Profondeur du Marché.
  11. Correction d'une erreur qui pouvait entraîner la réinitialisation des paramètres des indicateurs en cours d'exécution dans certaines conditions.
  12. Correction des vérifications du nom d'utilisateur lors de l'ouverture de nouveaux comptes. Auparavant, une apostrophe dans le nom était considérée comme une erreur.
  13. Correction du traitement des recotations. La boîte de dialogue avec les prix demandés peut ne pas s'afficher dans certaines conditions.
  14. Correction de l'affichage de l'indicateur Ichimoku Kinko Hyo. Les lignes Chikou-Span, Up Kumo et Down Kumo s'affichent maintenant avec le bon décalage.
  15. Correction des vérifications de la marge initiale lors de l'ouverture de nouveaux ordres. L'erreur pouvait se produire dans le système de comptabilité des positions de couverture.
  16. Correction du défilement dans la fenêtre de spécification du contrat.

MQL5.community

  1. Le site web du MQL5 Cloud Network a été entièrement remanié : https://cloud.mql5.com.

    Apprenez à utiliser la puissance de traitement de milliers d'ordinateurs dans le monde pour optimiser vos stratégies de trading. Avec le MQL5 Cloud Network, même les calculs les plus lourds peuvent être effectués en quelques minutes. Visitez le site web et découvrez comment participer au réseau et comment gagner de l'argent en fournissant vos ressources informatiques.


    Visitez le site web mis à jour du MQL5 Cloud Network


  2. Amélioration de la section des captures d'écran dans les produits du Market. Les auteurs peuvent télécharger des images d'une taille maximale de 1920*1800 pixels pour démontrer le fonctionnement des applications. La galerie des captures d'écran a également été mise à jour. La vitrine affiche des vignettes d'images, et un clic sur celles-ci ouvre les images en taille réelle.


    Amélioration de la section des captures d'écran dans le Market


  3. Améliorations de la section Freelance. Les utilisateurs recevront désormais plus de conseils lors de leurs premières commandes :

    • Exemples de spécifications d'exigences et rappel d'en ajouter une
    • Instructions pour la création d'une commande
    • Conseils d'utilisation des modèles

    Ces conseils peuvent vous aider à créer la commande et à obtenir le résultat souhaité.


    Améliorations apportées à la section Freelance


24 mars 2023
MetaTrader 5 build 3660 : Améliorations et corrections

Terminal

  1. Correction d'une erreur occasionnelle dans la création du journal de la plateforme.
  2. Mise à jour des traductions de l'interface utilisateur.

MQL5

  • Correction de la vérification des variables globales. Lors de la déclaration de variables nommées de la même façon dans des espaces de noms différents, le compilateur émettait un faux avertissement indiquant que la variable était déjà déclarée.

Terminal Web

  1. Ajout de la traduction de l'interface utilisateur en portugais. Le terminal web est désormais disponible en 12 langues.
  2. Correction de la boîte de dialogue permettant d'ajouter un indicateur d'Ecart-Type (Standard Deviation).
  3. Corrections et améliorations mineures.
17 mars 2023
MetaTrader 5 build 3640 : Terminal Web en 11 langues

Terminal Web

  1. Ajout des traductions de l'interface utilisateur dans 10 langues largement parlées : Chinois simplifié et traditionnel, français, allemand, italien, japonais, coréen, espagnol, turc et russe. Cette liste sera encore élargie dans les prochaines versions. Pour changer de langue, utilisez le menu correspondant :


    Interface du terminal Web disponible en 11 langues


  2. Optimisation du mécanisme de connexion au serveur de trading.

MQL5

  1. MQL5 : Ajout des flags COPY_TICKS_VERTICAL et COPY_RATES_VERTICAL pour les méthodes CopyTicks, CopyTicksRange et CopyRates.

    Par défaut, les ticks et les séries sont copiées dans la matrice le long de l'axe horizontal, ce qui signifie que les données sont ajoutées à droite, à la fin de la ligne. Dans les tâches d'exécution du modèle ONNX entraîné , ce type de matrice doit être transposée afin d'alimenter les données d'entrée :

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

    En spécifiant le flag supplémentaire COPY_RATES_VERTICAL (COPY_TICKS_VERTICAL pour les ticks) lors de l'appel à la méthode, il n’est plus nécessaire de transposer les données :

    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    int OnStart(void)
      {
       matrix rates;
    //--- get 10 bars
       if(!rates.CopyRates("EURUSD",PERIOD_H1,COPY_RATES_OHLC|COPY_RATES_VERTICAL,2,10))
          return(-1);
    //--- input a set of OHLC vectors
  2. Nouvelle valeur dans l'énumération ENUM_CHART_PROPERTY_INTEGER — CHART_SHOW_TRADE_HISTORY. La propriété contrôle l'affichage des transactions depuis l'historique des transactions sur le graphique. Utilisez les fonctions ChartGetInteger et ChartSetInteger pour obtenir et définir la propriété. Pour plus de détails sur l'affichage des transactions sur le graphique, veuillez lire la documentation de la plateforme.

MetaEditor

  • Correction du gel de l'interface qui pouvait survenir lors de la compilation du fichier sous certaines conditions.

Terminal

  • Correction des erreurs rapportées dans les journaux de crash.
10 mars 2023
MetaTrader 5 build 3620 : Améliorations du terminal Web, support ONNX et multiplications matricielles rapides dans MQL5

Terminal

  1. Correction du calcul du bénéfice total dans les rapports de trading.
  2. Mise à jour des données fondamentales pour les instruments de trading disponibles via la fenêtre du Market Watch.
  3. Correction du lancement de la plateforme de trading sous Wine 7.0.1 sous Linux.
  4. Correction de l'ajout de symboles dans la fenêtre de Profondeur de Marché via la barre de recherche. Un symbole trouvé par description ne pouvait pas être ajouté à la liste en cliquant sur sa ligne.

MQL5

  1. Prise en charge des opérations avec les modèles ONNX (Open Neural Network Exchange).

    ONNX est un format open-source pour les modèles d'apprentissage automatique. Ce format est pris en charge par de nombreuses plateformes, notamment Chainer, Caffee2 et PyTorch. Créez un modèle ONNX à l'aide d'outils spécialisés, intégrez-le dans votre application MQL5 et utilisez-le pour prendre des décisions de trading.

    Les descriptions de toutes les fonctions prises en charge sont disponibles dans la documentation. Un exemple de modèle ONNX de test est disponible dans les projets publics dans MetaEditor. Trouvez le projet ONNX.Price.Prediction dans "Boîte à Outils \ Projets Publics" et sélectionnez Rejoindre dans le menu contextuel. Le projet sera téléchargé sur votre ordinateur et apparaîtra dans le Navigateur :


    Un exemple de travail avec un modèle ONNX dans des projets publics


    Compilez le projet et exécutez-le sur EURUSD H1 pour voir le résultat.

    En plus du modèle et du code MQL5 qui l'exécute, le projet comprend également le script Python PricePredictionTraining.py. Il montre comment vous pouvez créer vous-même un modèle ONNX. Pour exécuter le script, installez Python sur votre ordinateur et les modules requis à partir de la ligne de commande :

    python.exe -m pip install --upgrade pip
    python -m pip install --upgrade tensorflow
    python -m pip install --upgrade pandas
    python -m pip install --upgrade scikit-learn
    python -m pip install --upgrade matplotlib
    python -m pip install --upgrade tqdm
    python -m pip install --upgrade metatrader5
    python -m pip install --upgrade onnx==1.12
    python -m pip install --upgrade tf2onnx
    Des instructions sur l'utilisation de ONNX sont disponibles dans la documentation.

  2. Ajout de la prise en charge de la Multiplication de Matrices Générales (GeMM). Cet algorithme accélère les calculs sur certains types de processeurs grâce à des tâches parallélisées et à une utilisation optimisée des caches L1/L2/L3. La vitesse de calcul est comparable à celle de logiciels populaires tels que Math Kernel Library (MKL) et OpenBLAS. Des tests comparatifs détaillés seront publiés prochainement.

    Le nouvel algorithme est actuellement pris en charge dans la méthode matrix::GeMM. Si votre processeur prend en charge les instructions AVX et FMA (la plupart des processeurs commercialisés après 2013 prennent en charge ces instructions), l'algorithme sera activé automatiquement.

  3.  Ajout de la possibilité de transférer des matrices et des vecteurs vers les DLL. Cela permet d'importer des fonctions qui utilisent les types pertinents à partir de variables externes.

    Les matrices et les vecteurs sont transmis à une DLL sous la forme d’un pointeur vers un buffer. Par exemple, pour passer une matrice de type float, le paramètre correspondant de la fonction exportée depuis la DLL doit prendre un pointeur de buffer de type float. Par exemple :

    MQL5
    #import "mmlib.dll"
    bool sgemm(uint flags,matrix<float> &C,const matrix<float> &A,const matrix<float> &B,ulong M,ulong N,ulong K,float alpha,float beta);
    #import
    C++
    extern "C" __declspec(dllexport) bool sgemm(UINT flags,float *C,const float *A,const float *B,UINT64 M,UINT64 N,UINT64 K,float alpha,float beta)
    En plus des buffers, vous devez transmettre les tailles de matrice et de vecteur pour un traitement correct.

  4. Ajout d'une nouvelle fonction CopySeries pour copier des séries temporelles synchronisées de MqlRates dans des tableaux séparés.

    La fonction CopySeries permet d'obtenir uniquement les séries temporelles nécessaires dans différents tableaux spécifiés au cours d'un appel, et toutes les données des séries temporelles seront synchronisées. Cela signifie que toutes les valeurs des tableaux résultants à un certain indice N appartiendront à la même barre sur la paire Symbole/Timeframe spécifiée. Par conséquent, le programmeur n'a pas besoin de synchroniser les séries temporelles reçues avec l'heure d'ouverture de la barre.

    Contrairement à CopyRates, qui renvoie l'ensemble complet des séries temporelles sous la forme d'un tableau MqlRates, la fonction CopySeries permet d'obtenir des séries temporelles spécifiques requises dans des tableaux séparés. Cela peut se faire en spécifiant une combinaison de drapeaux pour sélectionner le type de série temporelle. L'ordre des tableaux transmis à la fonction doit correspondre à l'ordre des champs dans la structure MqlRates :

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

    Donc si vous avez besoin d'obtenir les valeurs des séries temporelles 'time', 'close' et 'real_volume' pour les 100 dernières barres du Symbol/Timeframe actuel, vous devez faire l'appel suivant :

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

    L'ordre des tableaux "time, close, volume" doit correspondre à l'ordre des champs de la structure MqlRates. L'ordre des valeurs dans rate_mask est ignoré. Le masque pourrait être le suivant :

    COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE

    Exemple

    //--- input parameters
    input datetime InpDateFrom=D'2022.01.01 00:00:00';
    input datetime InpDateTo  =D'2023.01.01 00:00:00';
    input uint     InpCount   =20;
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart(void)
      {
    //--- arrays to get timeseries from the Rates structure
       double   open[];
       double   close[];
       float    closef[];
       datetime time1[], time2[];
    //---request close prices to a double array
       ResetLastError();
       int res1=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE, time1, close);
       PrintFormat("1. CopySeries  returns %d values. Error code=%d", res1, GetLastError());
       ArrayPrint(close);
       
    
    //--- now also request open prices; use float array for close prices
       ResetLastError();
       int res2=CopySeries(NULL, PERIOD_CURRENT, 0, InpCount,
                           COPY_RATES_TIME|COPY_RATES_CLOSE|COPY_RATES_OPEN, time2, open, closef);
       PrintFormat("2. CopySeries  returns %d values. Error code=%d", res2, GetLastError());
       ArrayPrint(closef);
    //--- compare the received data
       if((res1==res2) && (time1[0]==time2[0]))
         {
          Print("  | Time             |    Open      | Close double | Close float |");
          for(int i=0; i<10; i++)
            {
             PrintFormat("%d | %s |   %.5f    |   %.5f    |   %.5f   |",
                         i, TimeToString(time1[i]), open[i], close[i], closef[i]);
            }
         }
    /*  Result
            1. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
            2. CopySeries  returns 0 values. Error code=0
            [ 0] 1.06722 1.06733 1.06653 1.06520 1.06573 1.06649 1.06694 1.06675 1.06684 1.06604
            [10] 1.06514 1.06557 1.06456 1.06481 1.06414 1.06394 1.06364 1.06386 1.06239 1.06247
              | Time             |    Open      | Close double | Close float |
            0 | 2023.03.01 17:00 |   1.06660    |   1.06722    |   1.06722   |
            1 | 2023.03.01 18:00 |   1.06722    |   1.06733    |   1.06733   |
            2 | 2023.03.01 19:00 |   1.06734    |   1.06653    |   1.06653   |
            3 | 2023.03.01 20:00 |   1.06654    |   1.06520    |   1.06520   |
            4 | 2023.03.01 21:00 |   1.06520    |   1.06573    |   1.06573   |
            5 | 2023.03.01 22:00 |   1.06572    |   1.06649    |   1.06649   |
            6 | 2023.03.01 23:00 |   1.06649    |   1.06694    |   1.06694   |
            7 | 2023.03.02 00:00 |   1.06683    |   1.06675    |   1.06675   |
            8 | 2023.03.02 01:00 |   1.06675    |   1.06684    |   1.06684   |
            9 | 2023.03.02 02:00 |   1.06687    |   1.06604    |   1.06604   |
    */
      }
  5. Correction de la fonction OrderSend. La fonction pouvait retourner un ticket d’ordre incorrect si un même compte était utilisé simultanément sur plusieurs plateformes.
  6. Correction de l'importation des bibliothèques EX5. Une erreur s'est produite si le nom de la bibliothèque importée correspondait au nom du fichier dans lequel elle a été importée.

MetaEditor

  1. Ajout de l'envoi de notifications push aux membres d’un projet partagé. La nouvelle option permet d’informer les utilisateurs des modifications apportées aux paramètres et aux fichiers du projet. Pour activer les notifications, entrez votre identifiant MetaQuotes dans la section "Paramètres \ Sécurité" de votre profil MQL5.Community.


    Notifications push lors des mises à jour du projet


  2. Mise à jour des icônes de fichiers dans le navigateur. De nouvelles icones plus simples les rendront plus faciles à comprendre.

Tester

  1. Correction d'une erreur qui provoquait la coupure d’une chaîne de caractère si elle contenait le caractère "|".
  2. Correction des erreurs rapportées dans les journaux de crash.

Nouvelle version 3620 du Terminal Web MetaTrader 5

  1. Ajout de modèles de couleurs prêts à l'emploi pour l'interface du Terminal Web. Les modèles affectent l'affichage des barres et des lignes du graphique, ainsi que les prix dans le Market Watch et les états financiers du compte. Notre équipe de conception a préparé des préréglages de modèles de couleurs, basés sur vos suggestions et sur des combinaisons de couleurs traditionnelles.


    Nouveaux modèles de couleurs pour les terminaux web


  2. Fenêtre de spécification de symbole repensée. Les données des instruments de trading ont été réorganisées en blocs logiques pour faciliter la visualisation.


    Mise à jour de la fenêtre de spécification des instruments de trading


  3. Correction de l’ouverture de comptes réels via le terminal web. Le serveur pouvait renvoyer une erreur après avoir rempli un formulaire d'inscription.
  4. Correction d'une erreur dans la boîte de dialogue de trading. Si l'utilisateur fermait une position en appuyant sur le bouton X dans la fenêtre Boîte à outils alors que la boîte de dialogue de modification de position était ouverte, le contenu de la boîte de dialogue n'était pas réinitialisé. Après la mise à jour, la boîte de dialogue sera automatiquement réinitialisée à un nouveau mode de passation d’ordre dans ce cas.
  5. Correction de l'affichage du champ Serveur dans la boîte de dialogue de gestion des comptes.
  6. Correction de l'affichage de la période actuelle sur la barre d'outils.
  7. Correction de l’affichage des volumes en termes d'unités d'actifs sous-jacents, dans la boîte de dialogue de trading.
  8. Correction de la modification des niveaux du Stop Loss et du Take Profit. La modification d'une des valeurs peut réinitialiser la seconde sous certaines conditions.
  9. Correction de l’affichage des avertissements de risque d'investissement.


6 mars 2023
MetaTrader 5 pour iPhone/iPad : Amélioration des fonctions de trading et d'analyse sur les graphiques
  1. Ajout de la possibilité de placer des ordres stop et stop-limit à partir du graphique.

    Dans les versions précédentes, seuls les ordres à cours limité étaient disponibles. Sélectionnez le type désiré en appuyant successivement sur le bouton situé dans la partie inférieure du tableau.


    Placer des ordres Stop et Stop Limit depuis le graphique


  2. Ajout de la possibilité d'accéder aux fonctions de clôture de position ou de suppression d'ordre en attente à partir du graphique. Sélectionnez une position ou un niveau d'ordre sur le graphique, et la commande correspondante apparaîtra dans le panneau de trading inférieur :


    Gérer les positions et les ordres à partir du graphique


  3. Fonctionnalité améliorée qui déplace le bord droit du graphique des prix. Pour modifier le décalage, il suffit de faire défiler le graphique jusqu'au dernier prix, jusqu'à ce qu'un séparateur vertical apparaisse. Faites ensuite glisser le triangle situé en bas de l'échelle graphique :


    Modifier le décalage du graphique en faisant glisser le triangle sur l'échelle inférieure


  4. Ajout de la possibilité de copier des objets d’analyse sur le graphique. Cela permet d'accélérer le marquage des graphiques. Ouvrez le menu de l'objet avec une pression longue et sélectionnez "Copier" :

    Créer des copies d'objets d’analyse


  5. Ajout de la possibilité de gérer l'affichage des indicateurs sur différentes périodes. Si l'indicateur n'est pas adapté à certaines périodes du graphique, il peut être masqué afin de libérer de l'espace sur l'écran pour d'autres objets d'analyse.


    Gérer l'affichage des indicateurs sur différentes périodes


  6. Ajout de l'affichage des commissions des symboles dans la fenêtre de spécification de l'instrument.


    Découvrez le montant de la commission dans la spécification de l'instrument


  7. Ajout d'un lien de récupération du mot de passe. Le mot de passe d'un compte ne peut être rétabli que par l'intermédiaire du courtier concerné. Le lien indique les coordonnées du courtier.


    Aide à la récupération du mot de passe


  8. Ajout de la possibilité de partager un lien vers une chaîne de la MQL5.community.


    Partager un lien vers votre chaîne via l'application


  9. Amélioration de l'expérience de l'utilisateur lorsqu'il se connecte à un compte soumis à des restrictions de trading.

    Le trading peut être limité pour diverses raisons : connexion en mode investisseur ; aucun accord de trading accepté ; la vérification du courtier n'a pas été effectuée, etc. La raison de l'indisponibilité des fonctions de trading n'était pas expliquée auparavant.

    Maintenant, si les fonctions de trading sont limitées, le bouton de passation d'ordre de la section Trade est grisé. En appuyant sur cette touche, les informations et recommandations pertinentes sont affichées.


    Informations utiles en cas de restriction du trading


  10. Amélioration du flux de travail avec les certificats SSL utilisés pour l'authentification avancée.

    Maintenant, lorsque l'utilisateur se connecte à un compte avec une authentification avancée, l'application affiche une brève description des actions requises.


    Amélioration du fonctionnement des certificats SSL


    Un certificat peut être importé à partir d'un fichier PFX. Enregistrez le fichier nécessaire dans l'application Files, puis utilisez la fonction d'import dans la boîte de dialogue de démarrage.

    Il est également possible d'importer des certificats dans des fichiers, ce qui permet d'utiliser des certificats sur d'autres appareils. Pour ce faire, allez dans Paramètres \ Certificats et sélectionnez "Exporter" dans le menu des certificats.

  11. La construction des graphiques de prix a été transférée à Metal, l'API graphique de dernière génération utilisée dans les appareils Apple. Cela augmente considérablement les performances de rendu des graphiques, des indicateurs et des objets.
  12. Correction du remplacement des niveaux de Stop Loss et de Take Profit dans la Profondeur de Marché. 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. Ce processus est nécessaire pour se conformer à la règle FIFO.
  13. Correction des recotations. Lorsqu'une nouvelle cotation est reçue, l'utilisateur dispose d'un court délai pour accepter ou refuser les nouveaux prix. Si aucune décision n'est prise dans le délai imparti, la demande est automatiquement rejetée et la fenêtre de recotation est automatiquement fermée.
  14. Correction de l'affichage de l'heure dans la section Graphique lors de l'utilisation du thème sombre de l’interface.
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.

précédent123456789101112131415