Mises à jour : MetaTrader 5

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

24 juillet 2020
MetaTrader 5 build 2560 : Améliorations du système d'apprentissage intégré

Terminal

  1. Dans la mise à jour précédente de la plateforme, nous avons présenté un système d'apprentissage entièrement révisé. D'autres améliorations ont été mises en œuvre dans la dernière version :
    • L'icône de la barre de progression est devenue plus visible
    • Le texte de certains indices a été révisé
    • Le calcul de la progression de l'apprentissage a été corrigé
    Terminez toutes les leçons pour commencer à utiliser au maximum les capacités de la plateforme.



  2. Traitement optimisé et considérablement accéléré des grands flux de ticks (avec plus de dizaines de milliers de ticks par minute).
  3. Correction d'erreurs dans le calcul des variations de prix par rapport au prix de clôture de la session précédente. Pour visualiser cette variable, activez la colonne "Daily Change" dans le menu contextuel du Market Watch.

MQL5

  1. Accès optimisé et accéléré aux propriétés des graphiques numériques via la fonction ChartGetInteger.
  2. Correction de la recherche d'indicateurs personnalisés, lorsqu'un tel indicateur est demandé à un programme MQL5 via la fonction iCustom.

MetaEditor

  1. Ajout de la compilation de programmes C/C++ dans les projets.

Tester

  1. Travail considérablement optimisé du MQL5 Cloud Network. Grâce à l'amélioration de l'efficacité de la recherche d'agents, le réseau peut répartir les tâches et renvoyer les résultats des calculs plus rapidement.
Documentation mise à jour.

10 juillet 2020
MetaTrader 5 build 2530: tri dans le Market Watch et opérations avancées avec les résultats d'optimisation

Terminal

  1. Une option de tri a été ajoutée à la fenêtre du Market Watch :
    • Cliquez sur le nom d'une colonne pour trier la liste en fonction des données requises, telles que le nom du symbole, le prix de clôture, le changement quotidien ou d'autres variables.
    • Utilisez le nouveau menu avec les options de tri les plus populaires. Le tri selon la croissance et la baisse les plus élevées en fonction de la variation quotidienne du prix du symbole peut être utile lors du trading d'instruments boursiers.



  2. Système d'apprentissage intégré repensé et amélioré.
    Tous les conseils interactifs sont regroupés en différentes catégories pour une navigation plus facile. Le nombre d'éléments terminés et restants est indiqué pour chaque catégorie.



    Chaque conseil est désormais fourni avec une liste de contrôle indiquant l'action clé que l'utilisateur doit exécuter pour terminer la formation.
    Nous avons révisé la conception du système d'apprentissage et corrigé les erreurs dans le calcul de la progression totale.

  3. Ajout du calcul automatisé de l'heure de clôture de la session précédente d'un symbole et de l'heure d'ouverture de sa session actuelle. Si les données appropriées ne sont pas fournies directement par le courtier, le terminal calculera les valeurs en fonction des première et dernière cotations d'une session. Les informations pertinentes peuvent être affichées dans la fenêtre Market Watch : activez les colonnes appropriées dans la section "Symboles" ou accédez à la section "Détails".



  4. Application optimisée et accélérée des prix aux positions ouvertes. Lorsque de nouveaux ticks arrivent dans le terminal, les prix, les bénéfices et les marges sont mis à jour plus rapidement.
  5. Calcul fixe de l'Oscillateur Stochastique intégré. Une erreur peut se produire en cas de nombre limité de barres affiché sur les graphiques.

MQL5

  1. Fonction AccountInfo* optimisées et accélérées donnant accès aux propriétés du compte de trading.
  2. Accès optimisé et accéléré aux propriétés des graphiques numériques via la fonction ChartGetInteger.

MetaEditor

  1. Les commandes de menu contextuel suivantes ont été ajoutées aux onglets d'édition de code pour des opérations efficaces avec le MQL5 Storage :
    • Comparer une copie de travail d'un fichier avec la révision actuelle
    • Rétablir les changements
    • Afficher l'historique des modifications de fichiers



  2. Modification de la surbrillance des parenthèses correspondantes. Maintenant, la mise en évidence est appliquée aux parenthèses et non à l'arrière-plan. La surbrillance est désactivée par défaut. Elle peut être activée dans les paramètres de l'éditeur.


  3. Amélioration des fonctions de recherche et de remplacement:
    • Si vous sélectionnez un texte dans le fichier et ouvrez la boîte de recherche, le texte sera automatiquement remplacé dans le champ "Rechercher". Si aucun texte n'est sélectionné, le texte du presse-papier sera collé dans le champ "Rechercher". Si le presse-papier est vide, le focus dans la zone de recherche sera mis sur le champ "Rechercher".
    • Un comportement similaire est implémenté pour la fenêtre de remplacement : le texte sélectionné est inséré dans le champ de recherche et le curseur est déplacé vers le champ "Remplacer par". Ainsi, vous pouvez immédiatement saisir le nouveau texte requis.
    • Les résultats de la recherche et du remplacement sont désormais affichés dans le journal au lieu de la boîte de dialogue distincte précédemment utilisée. Si la fenêtre Boîte à Outils est activée, l'onglet Journal y sera automatiquement sélectionné. Ainsi, vous n'avez pas besoin de travailler avec des fenêtres supplémentaires.

  4. Correction de la recherche dans la fenêtre de comparaison de fichiers lors de l'utilisation du stockage MQL5.
  5. Ajout de la possibilité de rechercher et de remplacer des fichiers connectés au fichier actuel via la directive #include.
    La nouvelle option permet des opérations plus rapides avec des projets composés de plusieurs fichiers. Par exemple, pour remplacer un texte dans tous les fichiers, vous n'aurez pas besoin de spécifier leurs répertoires manuellement, tandis que l'éditeur peut les trouver automatiquement via les directives #include.


Tester

  1. Nous avons révisé les critères d'optimisation qui incluent deux variables, dont le solde. Maintenant, les critères ne prennent en compte que la deuxième variable et ignorent le solde. Les nouveaux critères d'optimisation sont plus faciles à analyser.

    • Solde + Rentabilité Maximale -> Rentabilité Maximale
    • Solde + Gain Maximal Attendu -> Gain Maximal Prévu
    • Solde + Drawdown Minimum -> Drawdown Minimum
    • Solde + Facteur de Récupération Maximum -> Facteur de Récupération Maximum
    • Solde + Ratio de Sharpe maximum -> Ratio de Sharpe maximum




  2. Dans le sous-menu "Paramètres d'optimisation", nous avons ajouté des commandes pour afficher ou masquer rapidement toutes les colonnes d'entrée dans le tableau des résultats d'optimisation :



  3. Ajout d'une coloration pour le tableau et le graphique des résultats d'optimisation, pour une analyse visuelle plus pratique.
    Le graphique est coloré avec un dégradé vert à rouge, selon la valeur du critère d'optimisation. Les couleurs suivantes sont utilisées pour le tableau :
    • Solde : les valeurs au-dessus du dépôt initial sont colorées en bleu et celles en dessous du dépôt initial sont affichées en rouge.
    • Bénéfice : le bleu est utilisé pour les valeurs supérieures à zéro et le rouge est utilisé pour les valeurs inférieures à zéro.
    • Paiement Attendu : le bleu est utilisé pour les valeurs supérieures à zéro et le rouge est utilisé pour les valeurs inférieures à zéro.
    • Drawdown : du vert (0-5%) au rouge (au-dessus de 30%).
    • Ratio de Sharpe : du vert (supérieur à 2) au rouge (inférieur à 0).
    • Facteur de Récupération : du vert (supérieur à 2) au rouge (inférieur à 1).



  4. Tester : Ajout de filtres dans le tableau des résultats d'optimisation. Utilisez des filtres pour masquer les passes infructueuses de la liste :
    • Passes sans trades
    • Passes perdantes
    • Passes avec un drawdown supérieur à 50%
    • Passes avec un Facteur de Récupération inférieur à 1
    • Passes avec le Ratio de Sharpe inférieur à 0,5



  5. Travail optimisé du MQL5 Cloud Network. Désormais, lorsqu'une optimisation est lancée pour le même Expert Advisor, le réseau essaie d'utiliser les mêmes agents de test que ceux utilisés lors de la précédente passe d'optimisation, car l'environnement de marché requis, y compris l'historique de trading, est déjà disponible sur ces agents.
Documentation mise à jour.


26 juin 2020
MetaTrader 5 iOS build 2505: Balayages, nouvelles sections et schémas de couleurs

MetaTrader 5 iOS build 2505

Nous avons recueilli les commentaires des utilisateurs de MetaTrader 5 iOS et repensé considérablement l'application

  • Ajout de la recherche de symboles dans la section des quotes.
  • Ajout du jeu de couleurs par défaut "couleur sur blanc" pour les graphiques.
  • Ajout de l'affichage des transactions sur les graphiques.
  • Déplacement vers le haut du panneau de changement des périodes afin qu'il ne chevauche plus le graphique.
  • Ajout d'une mise à l'échelle verticale des graphiques - glissez simplement l'échelle des prix.
  • Ajout de la possibilité de déplacer des comptes vers d'autres appareils à l'aide de QR codes.
  • Ajout de l'affichage du changement de prix quotidien en pips dans la section quotes. Les données ne sont disponibles que si elles sont fournies par un courtier.
  • Ajout de la prise en charge des balayages vers les écrans Quotes, Historique et Trade.
  • Ajout de la sélection adaptative du volume de trading pour un trading rapide.
  • Ajout de la possibilité d'accéder au générateur OTP via FaceID ou empreinte digitale.
La navigation sur iPad a été repensée
  • Déplacement du panneau de trading en un clic vers le haut ;
  • Ajout du menu du bas avec des sections et des indicateurs ;
  • Déplacement des sections de courrier électronique, des nouvelles et de gestion du compte dans des onglets séparés ;
  • Amélioration de la gestion des comptes.
5 juin 2020
MetaTrader 5 build 2485: Améliorations de iCustom et optimisation globale dans MQL5

Terminal

  1. Edition d'historique des barres optimisée et considérablement accélérée pour les instruments financiers personnalisés. L'amélioration concerne également la fonction CustomRatesUpdate.
  2. Correction de l'export des paramètres de symboles personnalisés vers un fichier JSON.
  3. Correction des erreurs signalées dans les journaux de plantage.

MQL5

  1. Cette version dispose d'un algorithme de chargement d'indicateur personnalisé révisé via iCustom.

    Si le backslash '\' est indiqué avant le nom de l'indicateur personnalisé, le fichier EX5 de l'indicateur est recherché par rapport au dossier racine MQL5. Ainsi, pour un appel de iCustom(Symbol(), Period(), "\FirstIndicator"...), l'indicateur sera chargé depuis MQL5\FirstIndicator.ex5. Si le fichier est introuvable sur ce chemin, l'erreur 4802 (ERR_INDICATOR_CANNOT_CREATE) est renvoyée.

    Si le chemin ne commence pas par un backslash '\', l'indicateur est recherché et chargé en fonction de la séquence d'actions suivante :

    • Le fichier EX5 est recherché dans le même dossier, où se trouve l'EX5 du programme appelant. Par exemple, l'Expert Advisor CrossMA.EX5 est situé dans MQL5\Experts\MyExperts. Il contient l'appel suivant : iCustom(Symbol(), Period(), "SecondIndicator"...). Dans ce cas, l'indicateur est recherché dans MQL5\Experts\MyExperts\SecondIndicator.ex5.
    • Si l'indicateur n'est pas trouvé, une recherche relative au répertoire racine Indicators est effectuée : MQL5\Indicators. Ainsi, le fichier MQL5\Indicators\SecondIndicator.ex5 est recherché. Si l'indicateur n'est pas trouvé, la fonction renvoie INVALID_HANDLE et l'erreur 4802 (ERR_INDICATOR_CANNOT_CREATE) est déclenchée.

    Si le chemin de l'indicateur est défini dans un sous-répertoire tel que MyIndicators\ThirdIndicator, la recherche démarre dans le dossier du programme appelant (l'Expert Advisor se trouve dans le dossier MQL5\Experts\MyExperts) au chemin suivant : MQL5\Experts\MyExperts\MyIndicators\ThirdIndicator.ex5. En cas d'échec, le fichier MQL5\Indicators\MyIndicators\ThirdIndicator.ex5 est recherché. Veuillez noter que le séparateur de chemin doit être spécifié par un double backslash '\\'. Par exemple : iCustom(Symbol(), Period(), "MyIndicators\\ThirdIndicator"...)

    De plus, si un appel d'indicateur personnalisé via iCustom est trouvé dans le code du programme, le compilateur ajoutera implicitement la directive "#property tester_indicator XXX" si elle n'est pas spécifiée.

  2. Fonction HistorySelect optimisée et considérablement accélérée, qui permet de demander l'historique des transactions et des ordres.
  3. Correction d'une erreur occasionnelle lors de la demande de tick via la fonction CopyTicksRange. L'erreur a provoqué le début de la plage à définir au début du jour plutôt qu'à l'heure spécifiée.
  4. Affichage optimisé et considérablement accéléré des alertes via la fonction Alert.
  5. Nouvelle propriété SYMBOL_TIME_MSC pour le dernier temps de tick du symbole en millisecondes. La propriété peut être obtenue à l'aide de la fonction SymbolInfoInteger.
29 mai 2020
MetaTrader 5 build 2470

Terminal

  • Correction d'un bug qui entraînait l'impossibilité d'ajouter des symboles financiers avec '-', '=', '_' et '+' dans leurs noms dans le Market Watch.

MQL5

  • Correction de la recherche étendue par les caractères de fin de ligne '\n' et '\r'.

Documentation mise à jour.
22 mai 2020
MetaTrader 5 Build 2450 : service "Abonnements", améliorations de l'interface utilisateur et fonctionnalités révisées dans MetaEditor

Terminal

  1. Nous avons lancé le tout nouveau service d'abonnements. Les abonnements offrent des services supplémentaires qui peuvent vous aider dans le trading. Par exemple, vous pouvez vous abonner à des données de marché de haute qualité provenant de fournisseurs bien connus, analyser les données reçues et développer de nouvelles stratégies de trading. En option, vous pouvez demander des services de gestion personnelle pour vous aider à apprendre les bases du trading ou à maîtriser vos compétences d'utilisation de la plateforme.

    Le service est en cours de développement et sera disponible pour une utilisation dans les prochaines versions.

    Comment ça marche
    Une nouvelle section Abonnements a été ajoutée dans le Navigator. Tous les services disponibles sont affichés dans cette section. La liste des services est configurée côté courtier et dépend donc du serveur auquel vous êtes connecté. Les abonnements sont divisés en catégories pour une navigation facile.



    Sélectionnez un service pour afficher sa description détaillée. Cliquez ensuite sur S'abonner. Tous vos abonnements actifs sont affichés dans une section distincte.


    Lorsque vous vous abonnez aux données du marché, les instruments de trading correspondants deviennent disponibles et peuvent être sélectionnés dans le Market Watch. Ils peuvent être utilisés comme symboles réguliers : afficher les cotations dans le Market Watch, ouvrir des graphiques et les analyser à l'aide d'objets et d'indicateurs, ainsi que lancer des Expert Advisors dans le testeur de stratégie. Les opérations de trading de ces symboles ne sont pas prises en charge.

    Comment payer les abonnements
    Vous pouvez payer les services en utilisant les fonds de votre compte de trading. Il n'est pas nécessaire de visiter d'autres sites Web, car le paiement peut être effectué directement à partir de la plateforme.

    Nous ajouterons bientôt la possibilité d'acheter des abonnements aux données du marché en vous connectant à MetaQuotes-Demo
    Nous prévoyons de mettre en place des abonnements aux données du marché de différentes bourses à travers le monde. En quelques clics, vous pourrez recevoir des cotations en temps réel du Nasdaq, CME, NYSE, BOVESPA et d'autres bourses. Vous pourrez payer les abonnements en utilisant un compte MQL5.community, de la même manière que les achats sur le Market, Signals et l'Hébergement.

  2. Ajout d'une nouvelle option "Afficher le ticker" dans les paramètres du graphique. L'option affiche/masque la ligne contenant le nom du symbole de trading, le calendrier et un commentaire personnalisé.



  3. Ajout de l'option "Afficher l'historique des transactions" dans les paramètres du terminal et dans les paramètres du graphique. La possibilité d'afficher les entrées et les sorties du marché sur les graphiques était disponible dans les versions précédentes, mais elle était gérée à partir de la section "Boîte à outils \ Historique". La nouvelle option permet un réglage plus confortable de l'affichage de l'historique. Vous pouvez le configurer pour tous les graphiques à la fois ou le définir séparément pour les graphiques souhaités.



    De plus, vous pouvez rapidement activer l'affichage de l'historique et des niveaux de trading à l'aide du menu contextuel du graphique:



  4. Ajout d'un nouveau schéma "Couleur sur blanc" dans les paramètres du graphique.



  5. De nouvelles commandes ont été ajoutées aux menus contextuels de position et d'ordre, permettant une ouverture rapide du Market Depth et du graphique du symbole concerné :



  6. Ajout de la mise en évidence du cadre graphique. Cela vous aidera à trouver le graphique de symboles souhaité lorsque plusieurs graphiques sont ouverts dans le terminal. Sélectionnez un symbole dans le Market Watch, une ligne d'ordre ou de position dans la section de trading ou d'historique, ou une alerte, et le cadre du graphique de symboles approprié clignotera trois fois.


  7. Affichage amélioré des niveaux de trading sur le graphique.
    • Les tickets ne sont plus affichés pour les positions, les ordres et les niveaux, afin de garder le graphique propre
    • Les légendes apparaissent en majuscules pour une meilleure lisibilité
    • Les volumes sont affichés sans la partie fractionnaire si elle est nulle
    • Les niveaux sont masqués si la hauteur du graphique est inférieure à 80 pixels


  8. Ajout de l'affichage de la description du symbole (si disponible) dans le coin supérieur gauche du graphique, en plus du nom du symbole.




  9. De nouvelles colonnes ont été ajoutées dans la liste des ordres et positions ouverts :
    • Variation - pourcentage de rentabilité de l'opération
    • Valeur - la valeur du marché de la position
    • Magic - l'identifiant des ordres et positions ouverts par l'expert-conseil (numéro magique)

    Les nouvelles colonnes peuvent être affichées/masquées à l'aide du menu contextuel.

    Les colonnes valeur et magic de la position ont également été ajoutées à la section historique des trades.

    En outre, le champ de profit dans les sections positions ouvertes et historique est mis en évidence en fonction du résultat de l'opération.

  10. Ajout de la prise en charge des prix négatifs. Cela permet un bon fonctionnement de la plateforme dans des situations similaires à la récente baisse des prix du pétrole en dessous de zéro. Ceci comprend :
    • Affichage des cotations dans le Market Watch
    • Affichage des graphiques et du Market Depth
    • Exécution des opérations de trading
    • Calcul des bénéfices et des sûretés

  11. Le nombre maximum de symboles pouvant être activés simultanément dans le Market Watch a été augmenté à 5000.
  12. Correction du tri dans les chats par date de dernière mise à jour.
  13. Fonctionnement optimisé et accéléré avec un grand nombre de symboles de trading (50 000 et plus).
  14. Correction d'un bug à cause duquel il était impossible de fermer une position si son volume actuel ne correspondait pas au pas de changement de volume du symbole.

MQL5

  1. Opérations optimisées et accélérées avec l'historique des ticks.
  2. Ajout de nouvelles fonctions pour travailler avec des bases de données :
    • DatabaseReset - réinitialise la requête à l'état initial, semblable à l'appel DatabasePrepare. La fonction est destinée à l'exécution multiple d'une demande avec différentes valeurs de paramètre. Par exemple, lors de l'ajout de données à la table en bloc à l'aide de la commande INSERT, un ensemble personnalisé de valeurs de champ doit être formé pour chaque entrée.
    • DatabaseBind - définit une valeur de paramètre dans une requête. La fonction est utilisée dans le cas où une requête SQL contient "?" ou "?N" valeurs paramétrables où N signifie l'indice de paramètre (à partir de un).
    • DatabaseBindArray - définit un tableau comme valeur de paramètre.

  3. Ajout de l'indicateur FSD_FILE_MUST_EXIST pour la fonction FileSelectDialog. Il indique que les fichiers sélectionnés doivent exister.
  4. Des valeurs pour décrire les options ont été ajoutées à l'énumération ENUM_SYMBOL_INFO_DOUBLE:
    • SYMBOL_PRICE_CHANGE - variation du prix actuel par rapport à la fin du jour de bourse précédent en %.
    • SYMBOL_PRICE_VOLATILITY - volatilité des prix en %.
    • SYMBOL_PRICE_THEORETICAL - prix d'option théorique.
    • SYMBOL_PRICE_DELTA - delta de l'option/du warrant. Affiche la valeur par laquelle le prix de l'option change lorsque le prix de l'actif sous-jacent change de 1.
    • SYMBOL_PRICE_THETA - theta de l'option/du warrant. Nombre de points que le prix de l'option doit perdre chaque jour en raison d'une rupture temporaire, c'est-à-dire à l'approche de la date d'expiration.
    • SYMBOL_PRICE_GAMMA - gamma de l'option/du warrant. Affiche le taux de modification du delta - la vitesse à laquelle la prime d'option change.
    • SYMBOL_PRICE_VEGA — vega de l'option/du warrant. Indique le nombre de points dont le prix de l'option change lorsque la volatilité change de 1%.
    • SYMBOL_PRICE_RHO — rho de l'option/du warrant. Reflète la sensibilité du prix de l'option théorique au changement de taux d'intérêt de 1%.
    • SYMBOL_PRICE_OMEGA — omega de l'option/du warrant. Élasticité de l'option - une variation relative en pourcentage du prix de l'option par la variation en pourcentage du prix de l'actif sous-jacent.
    • SYMBOL_PRICE_SENSITIVITY - sensibilité de l'option/du warrant. Indique par combien de points le prix de l'actif sous-jacent de l'option devrait changer de sorte que le prix de l'option change d'un point.

  5. Ajout de l'exportat des champs BLOB au format HEX dans la fonction DatabaseExport.
  6. Une nouvelle propriété CHART_SHOW_TICKER a été ajoutée à ENUM_CHART_PROPERTY_INTEGER - affichant un ticker du symbole dans le coin supérieur gauche. Si CHART_SHOW_TICKER est défini sur false, CHART_SHOW_OHLC est également défini sur false et donc OHLC est masqué.   
  7. La qualité du code généré par le compilateur a été améliorée. Cela a permis d'augmenter sa vitesse d'exécution.
  8. Correction d'erreurs liées à la compilation et à l'exécution des fonctions et classes de modèle. Celles-ci sont :
    • Erreur d'incompatibilité de priorité pour les appels de fonction de modèle surchargés
    • Erreur de génération de méthode/classe de modèle
    • Erreur provoquée par une tentative d'accès à une classe interne pour un paramètre de modèle d'une fonction de modèle
    • Erreur de génération de code de classe de modèle provoquée par l'utilisation d'une classe interne.
    • Erreur lors de l'utilisation de l'objet modèle B<int> avant B<void *>
    • Erreurs dans la création d'objets complexes de type C interne et encapsulés plusieurs fois
    • Erreur lors du transfert de l'argument du pointeur de fonction en tant que modèle de référence const
    • Erreur lors de la transmission de la structure interne à une fonction de modèle
    • Erreur d'inadéquation des priorités pour l'exécution des fonctions de modèle
    • Nombre de parenthèses incorrect dans les boucles for et do-while
    • Nombre de parenthèses incorrect dans la description de la structure de classe
    • Ralentissement lors de l'ajout d'un élément à la fois à l'aide d'ArrayResize
    • Erreur lors du choix d'une fonction surchargée correspondante

  9. Correction d'erreurs occasionnelles dans la fonction CustomTicksReplace.
  10. Correction de la sélection de la période d'affichage pour l'historique des ordres de trading. Maintenant, la plage est basée sur la date d'exécution de l'ordre au lieu de la date de création précédemment utilisée.

Python

  1. Le paramètre path a été ajouté à la méthode initialize - chemin d'accès à metatrader.exe ou metatrader64.exe. Si le chemin n'est pas spécifié, le module tente de trouver le fichier exécutable par lui-même.
  2. Les nouvelles méthodes suivantes ont été ajoutées :
    • symboles_get - retourne tous les symboles financiers du terminal MetaTrader 5.
    • symboles_total - retourne le nombre de tous les symboles financiers dans le terminal MetaTrader 5.

  3. Ajout du filtrage par groupes de symboles pour les fonctions suivantes : orders_get, positions_get, history_orders_get et history_deals_get. Utilisez les appels ayant le paramètre "group".
  4. La valeur de retour de order_send et order_check est maintenant transmise avec le champ 'request' contenant la description complète de la requête d'origine. Par exemple :
    ...
    comment=Request executed
    request_id=55
    retcode_external=0
    request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=0.1, price=108.018, stoplimit=0.0, ...
        traderequest: action=1
        traderequest: magic=234000
        traderequest: order=0
        traderequest: symbol=USDJPY
        traderequest: volume=0.1
        traderequest: price=108.018
        traderequest: stoplimit=0.0
    ...
  5. Lorsqu'ils sont lancés sur un graphique, les scripts Python reçoivent désormais le symbole du graphique et la période (en minutes) comme arguments.
    import sys
    
    chart_symbol='unknown'
    chart_tf=1
    
    if len(sys.argv) == 3:
        chart_symbol, chart_tf = sys.argv[1:3];
    
    print("Hello world from", chart_symbol, chart_tf)
    
    >> Hello world from T.NYSE 15

MetaEditor

  1. Ajout de la commande "Ajouter un dossier existant". Il permet l'ajout par lots de tous les fichiers pris en charge du répertoire sélectionné dans le projet.


  2. Recherche étendue et options de remplacement.

    Ajout de fonctionnalités de recherche étendues avec prise en charge partielle des expressions régulières. Utilisez \r, \n, \t pour spécifier les caractères de saut de ligne et de tabulation dans les requêtes de recherche. Les boîtes de dialogue de recherche et de remplacement ont été combinées en une seule boîte de dialogue multi-onglets.


    Ajout d'un onglet séparé pour la recherche dans les communautés de programmeurs. Celles-ci incluent la MQL5.community, ainsi que GitHub, MSDN et Stack Overflow.

    Les résultats de la recherche à partir de ressources externes apparaissent dans la fenêtre de la boîte à outils MetaEditor :



    De plus, vous pouvez immédiatement télécharger les fichiers source depuis GitHub. Les fichiers sont téléchargés dans un sous-répertoire distinct du dossier Projets, nommé conformément au nom du projet GitHub.

    Les résultats de la recherche peuvent également être triés par date.

  3. Ajout de la possibilité de changer rapidement la taille de la police dans la fenêtre d'édition de code. Pour modifier la taille de la police, appuyez sur Ctrl et faites défiler la molette de la souris.
  4. Ajout de la possibilité d'importer des tables de fichiers CSV vers des tables de base de données. Les paramètres suivants peuvent être définis lors de l'import :
    • Nom de table dans la base de données
    • Détection automatique ou manuelle de l'encodage des fichiers
    • Type de séparateur de données
    • Saut du nombre de lignes spécifié au début
    • Préfixe de commentaire
    • Si le fichier a des noms de colonne
    • Comment les sauts de ligne seront déterminés
    • Si les données doivent être ajoutées à une nouvelle table ou à une table existante
    • Quels guillemets utiliser pour les chaînes de caractères


  5. Ajout de commandes rapides pour insérer l'heure et la couleur dans le code source du programme. Sélectionnez les valeurs souhaitées dans le calendrier interactif et la palette, et l'éditeur les insérera au format approprié.


  6. La prise en charge de MQL4 a été désactivée, car seul le code 64 bits est généré maintenant.
  7. Correction de l'opération Classe snippet.
  8. Correction du support pour les chemins absolus dans les projets.
Documentation mise à jour.

6 mars 2020
MetaTrader 5 build 2360 : Extension de l'intégration de SQLite
  1. MQL5 : les erreurs d'utilisation des bases de données SQLite peuvent maintenant être analysées avec les outils MQL5 standards. Les codes d'erreur suivants ont été ajoutés :

    • ERR_DATABASE_ERROR — erreur générique.
    • ERR_DATABASE_INTERNAL — erreur de logique interne de SQLite.
    • ERR_DATABASE_PERM — accés refusé.
    • ERR_DATABASE_BUSY — fichier de la base de données verrouillé.
    • ERR_DATABASE_LOCKED — table de la base de données verrouillée.
    • ERR_DATABASE_NOMEM — mémoire insuffisante pour terminer l'opération.
    • ERR_DATABASE_READONLY — tentative d'écriture dans une base de données en lecture seule.
    • ERR_DATABASE_IOERR — erreur de lecture/écriture sur le disque.
    • ERR_DATABASE_CORRUPT — image disque de la base de données corrompue.
    • ERR_DATABASE_FULL — échec de l'insertion car la base de données est pleine.
    • ERR_DATABASE_CANTOPEN — impossible d'ouvrir le fichier de base de données.
    • ERR_DATABASE_PROTOCOL — erreur de protocole de verrouillage de la base de données.
    • ERR_DATABASE_SCHEMA — usage interne uniquement.
    • ERR_DATABASE_TOOBIG — la taille de la chaîne de caractères ou du BLOB est supérieure à la limite.
    • ERR_DATABASE_CONSTRAINT — annulation en raison d'une violation de contrainte.
    • ERR_DATABASE_MISMATCH — incohérence de types de données.
    • ERR_DATABASE_MISUSE — bibliothèque utilisée de façon incorrecte.
    • ERR_DATABASE_AUTH — autorisation refusée.
    • ERR_DATABASE_RANGE — erreur de lien avec le paramètre, indice incorrect.
    • ERR_DATABASE_NOTADB — le fichier ouvert n'est pas un fichier de base de données.

  2. MQL5 : Correction de l'utilisation de la fonction DatabaseImport permettant l'import de données depuis un fichier dans une table de la base de données.
  3. MetaEditor : Correction de l'affichage des chaînes de plus de 32 Ko vers les journaux.
  4. MetaEditor : Correction d'un encodage incorrect occasionnel dans les messages envoyés depuis la console Python (stdout, stderr) dans la section Erreurs de l'éditeur.
  5. Documentation mise à jour.

21 février 2020
MetaTrader 5 Build 2340: Gestion des paramètres de compte dans le Testeur et intégration étendue avec Python

MetaEditor

  1. Ajout de nouvelles fonctionnalités pour travailler avec les bases de données SQLite.

    Dans la mise à jour précédente de la plateforme, nous avons introduit la prise en charge des opérations avec les bases de données SQLite directement à partir de MQL5. Les principales fonctions sont devenues disponibles via l'interface utilisateur de MetaEditor :

    • Créer et connecter des bases de données
    • Afficher les tables et effectuer des requêtes de données rapides
    • Créer et exécuter des requêtes SQL, annuler les modifications

    Comment ça fonctionne
    La fonctionnalité de création rapide de base de données est disponible à partir de l'assistant MQL5. Vous pouvez facilement créer votre première table et définir ses champs.


    Lors de la création de la base de données, vous serez redirigé vers une nouvelle section du Navigateur, qui propose des commandes de gestion des données.

    Les tables de base de données sont affichées dans la fenêtre de gauche. Double-cliquez sur le nom de la table pour interroger rapidement les 1.000 premiers enregistrements. Dans cette section du navigateur, vous pouvez également créer et ouvrir d'autres bases de données, ainsi que travailler avec des tables.

    La base de données peut être gérée dans la fenêtre principale de l'éditeur, dans laquelle vous pouvez remplir le tableau, rechercher et sélectionner des données, saisir des requêtes SQL et exécuter d'autres opérations :


    Pour plus de détails sur les opérations de MetaTrader 5 avec des bases de données, veuillez lire l'article intitulé "SQLite : gestion native des bases de données SQL dans MQL5".

  2. Prise en charge étendue des projets multilingues. Cette mise à jour offre des possibilités plus larges pour travailler avec des scripts Python :

    • Désormais, ces scripts peuvent être créés à l'aide de l'assistant MQL5, tandis que vous pouvez instantanément ajouter les dépendances de bibliothèque requises dans le code.
    • Des icônes spéciales ont été ajoutées dans le navigateur et la syntaxe appropriée est disponible dans l'éditeur.
    • Lors de l'exécution d'un script via MetaEditor, les messages de la console Python (stdout, stderr) apparaissent sous la section Erreurs.


    Cliquez sur "Compiler" dans l'éditeur pour exécuter le script :



    Pour travailler avec Python, n'oubliez pas de spécifier son chemin sous la section Paramètres \ Compilateurs dans MetaEditor. Pour activer l'utilisation de la bibliothèque MetaTrader 5, installez-la à l'aide de la commande suivante :
    pip install MetaTrader 5
    Pour plus de détails sur l'intégration de Python, veuillez lire la documentation correspondante.
  3. Ajout de l'affichage des fichiers de base de données SQLite (*.db; *.Sdb; *.Sqlite; *.Db3; *.S3db; *.Sqlite3) dans le Navigateur.
  4. Correction des erreurs d'enregistrement des propriétés du projet.

MQL5

  1. Intégration de Python entièrement révisée. La mise à jour implique de nombreuses nouvelles fonctions et un nouveau nom de commande.

    Nouveau nom
    Les commandes existantes ont été renommées comme suit :
    MT5Initialize       -> initialize
    MT5Shutdown         -> shutdown
    MT5TerminalInfo     -> terminal_info
    MT5Version          -> version
    MT5CopyRatesFrom    -> copy_rates_from
    MT5CopyRatesFromPos -> copy_rates_from_pos
    MT5CopyRatesRange   -> copy_rates_range
    MT5CopyTicksFrom    -> copy_ticks_from
    MT5CopyTicksRange   -> copy_tick_range

    Nouvelles commandes
    La liste des commandes supportées a été étendue. Ajout de fonctions de trading, ainsi que des fonctions pour travailler avec l'historique de trading et pour recevoir les symboles financiers et les données du compte courant.

    • account_info() retourne les information du compte courant. Un analogue de AccountInfoInteger , AcountIndoDouble et AccountInfoString.
    • positions_total() retourne le nombre de positions ouvertes. Un analogue de PositionsTotal.
    • positions_get(symbol, ticket) retourne les positions ouvertes par symbole ou par ticket.
    • orders_total() retourne le nombre d'ordres. Un analogue de OrdersTotal.
    • orders_get(symbol, ticket) retourne les ordes d'ouverture par symbole ou par ticket.
    • history_orders_total(from, to) retourne le nombre d'ordres de l'intervalle spécifié de l'historique.
    • history_orders_get(from, to, position, ticket) retourne le nombre d'ordres de l'intervalle spécifié de l'historique, par ticket ou filtrés par position.
    • history_deals_total() retourne le nombre de transactions dans l'historique. Un analogue de HistoryDealsTotal.
    • history_deals_get(from, to, position, ticket) retourne les transactions de l'intervalle spécifié de l'historique, par ticket ou filtrées par position.
    • symbol_info(symbol) retourne les informations d'instrument financier. Un analogue de SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString.
    • symbol_info_tick(symbol) retourne le dernier tick par symbole. Un analogue de SymbolInfoTick.
    • symbol_select(symbol, enable) active/désactive un symbole dans le Market Watch. Un analogue de SymbolSelect.
    • order_check(request) vérifie la marge d'un ordre. Un analogue de OrderCheck.
    • order_send(request) envoie un ordre au serveur. Un analogue de OrderSend.
    • order_calc_margin(action, symbol, volume, price) calcule la marge d'un ordre. Un analogue de OrderCalcMargin.
    • order_calc_profit(action, symbol, volume, price_open, price_close) calcule le profit. Un analogue de OrderCalcProfit.

    Exécution de scripts Python sur des graphiques
    Les scripts Python peuvent être exécutés directement sur les graphiques de la plateforme, de manière similaire aux programmes MQL5 standard. Ces scripts sont signalés par des icônes spéciales dans le Navigateur.


    Les messages de script seront affichés dans la section "Boîte à outils \ Experts". Si une bibliothèque MetaTrader 5 est utilisée dans le script, elle peut recevoir des symboles de trading et des données de compte, ainsi que réaliser des opérations de trading.

    Les scripts Python peuvent être exécutés sur le même graphique en parallèle avec d'autres scripts MQL5 et Expert Advisors. Pour arrêter un script avec une exécution en boucle, supprimez-le du graphique.

    Protection supplémentaire
    Pour activer une protection de compte supplémentaire lors de l'utilisation de bibliothèques Python tierces, vous pouvez utiliser l'option "Désactiver le trading automatisé via une API Python externe" dans les paramètres du terminal.


    Les scripts Python ne peuvent effectuer des opérations de trading que lorsque cette option est désactivée.

  2. Relance considérablement accélérée des programmes MQL5 et recréation d'indicateurs personnalisés à partir des programmes MQL5. Dans certains cas, les opérations sont effectuées 100 fois plus rapidement.
  3. Fonctions supplémentaires pour travailler avec des bases de données :

    DatabaseImport
    Importe des données d'un fichier dans une table.
    long  DatabaseImport(
       int           database,          // descripteur de base de données reçu par DatabaseOpen
       const string  table,             // nom de la table dans laquelle insérer les données
       const string  filename,          // nom du fichier à partir duquel importer les données
       uint          flags,             // combinaison de flags
       const string  separator,         // séparateur des données
       ulong         skip_rows,         // nombre de 1ères lignes à ignorer
       const string  skip_comments      // chaîne de caractères définissant les commentaires
       );

    DatabaseExport
    Exporte une table ou un résultat de requête SQL vers un fichier CSV. Le fichier est créé en encodage UTF-8.
    long  DatabaseExport( 
       int           database,           // descripteur de base de données reçu par DatabaseOpen 
       const string  table_or_sql,       // nom de la table ou requête SQL
       const string  filename,           // nom du fichier CSV pour l'export des données
       uint          flags,              // combinaison de flags
       const string  separator           // séparateur des données in the CSV file
       );

    DatabasePrint
    Imprime le résultat de la table ou de la requête SQL dans le journal Experts.
    long  DatabasePrint(
       int           database,          // descripteur de base de données reçu par DatabaseOpen
       const string  table_or_sql,      // table ou requête SQL
       uint          flags              // combinaison de flags
       );

  4. Ajout de la fonction FileSelectDialog, qui appelle la boîte de dialogue système créant/ouvrant un fichier ou un dossier.
    int  FileSelectDialog(
       string   caption,              // titre de la fenêtre
       string   initial_dir,          // répertoire initial
       string   filter,               // filtre d'extensions
       uint     flags,                // combinaison de flags
       string&  filenames[],          // tableau contenant les noms des fichiers
       string   default_filename      // nom de fichier par défaut
       );
    La nouvelle fonction permet une interaction efficace de l'utilisateur avec le programme MQL5.

  5. Nouvelle valeur DEAL_FEE dans l'énumération ENUM_DEAL_PROPERTY_DOUBLE. Elle est utilisée pour des frais de transaction. La valeur indique un type de commission distinct facturé par le courtier.

Tester

  1. Ajout de fonctionnalités pour spécifier les paramètres de compte de trading personnalisés lors des tests de stratégie, tels que les limitations de trading, les paramètres de marge et la commission. Les nouvelles fonctions offrent des capacités étendues pour modéliser diverses conditions de trading.



    Paramètres communs
    Dans cette section, vous pouvez définir le nombre maximal d'ordres et de positions ouverts, qui peuvent simultanément exister sur le compte. De plus, vous pouvez configurer des sessions pendant lesquelles le programme n'est pas autorisé à trader.

    Margin
    La section permet la configuration des règles de réservation de marge et des systèmes de comptabilité de position à utiliser dans les tests :

    • Gestion du risque — modèle de gestion du risque : OTC et modèle boursier, systèmes de netting et de hedging. Pour plus de détails, veuillez lire la Documentation.
    • Niveau de l'appel de marge — lorsque ce niveau est atteint, le compte bascule automatiquement dans l'état Appel de Marge.
    • Niveau de Stop out — lorsque ce niveau est atteint, tous les ordres sont annulés et toutes les positions de trading sont fermées. Ces niveaux peuvent être indiqués en pourcentage ou en monnaie. Si "en monnaie" est sélectionné, les niveaux sont définis dans la valeur des Fonds du compte. Si "en pourcentage" est sélectionné, les niveaux sont définis comme la valeur "Niveau de marge" du compte (Fonds/Marge*100).
    • Profit non réalisé — en tenant compte du résultat flottant actuel dans la marge libre :
      • Ne pas utiliser le résultat non réalisé - ne pas inclure le résultat des positions ouvertes dans le calcul.
      • Utiliser le résultat non réalisé - inclure le résultat des positions ouvertes dans le calcul.
      • Utiliser le profit non réalisé - n'inclure que le profit.
      • Utiliser la perte non réalisée - n'inclure que la perte.
    • Bénéfice fixe quotidien - prise en compte du bénéfice/perte fixe quotidien du client dans la marge libre :
      • Utiliser le profit/la perte fixe quotidien - inclure dans la marge libre le profit et la perte reçus au cours d'une journée de trading.
      • Utilisez la perte fixe quotidienne - n'inclure que la perte reçue pendant la journée de trading. Pendant la journée, le profit obtenu est accumulé dans le champ spécial du compte ("Bloqué"). À la fin de la journée de trading, le bénéfice accumulé est débloqué (mis à zéro) et ajouté au solde du compte (inclus dans la marge libre).
    • Libérer le bénéfice fixe à la fin de la journée - cette option n'est disponible que si l'option "Utiliser la perte fixe quotidienne" est sélectionnée. Si elle est activée, le profit accumulé sera débloqué (et donc inclus dans la marge libre) à la fin de la journée. Sinon, ce montant de profit restera bloqué.

    Commission
    Cette section permet de contrôler les commissions facturées pour toutes les opérations de trading.

    • La commission peut être à un niveau et à plusieurs niveaux, c'est-à-dire être égale quel que soit le volume/le chiffre d'affaires ou peut dépendre de leur taille. Les données appropriées sont affichées dans le terminal.
    • La commission peut être prélevée immédiatement lors de l'exécution de l'opération ou à la fin d'un jour/mois de trading.
    • Différentes commissions peuvent être facturées selon la direction de l'opération : entrée, sortie ou les deux types d'opération.
    • La commission peut être facturée par lot ou par transaction.
    • La commission peut être calculée en argent, en pourcentage ou en points.


  2. Travail optimisé et accéléré en mode Market Scanner, au cours duquel plusieurs tests sont exécutés pour tous les symboles disponibles dans le Market Watch.
  3. La taille de la transaction ou de la position est désormais prise en compte lors du calcul du profit en pips. Auparavant, le calcul n'était effectué que pour un lot.
  4. Amélioration du contrôle du graphique des résultats d'optimisation. L'option de défilement a été ajoutée pour un graphique d'optimisation zoomé. Un double-clic sur un point du graphe sélectionne le résultat correspondant dans le tableau des tests réussis.
Documentation mise à jour.
13 décembre 2019
MetaTrader 5 Platform Build 2280

Terminal

  1. Correction d'un bug qui empêchait de supprimer un Expert Advisor d'un graphique n'ayant aucune donnée.
  2. Affichage de l'en-tête du graphique fixe sous Wine.

MQL5

  1. Amélioration de la vitesse de chargement et de compilation des programmes MQL5.
  2. Un double-clic sur un graphique est maintenant passé en tant qu'événement à simple clic à un programme MQL5. Auparavant, ces événements n'étaient pas traités.
  3. Correction du fonctionnement de la fonction StringTrimRight.
  4. Ajout de la documentation pour les fonctions de visualisation 3D DirectX.

Tester

  1. Correction d'un bug qui mettait le symbole de test dans les paramètres à vide. L'erreur pourrait générer le passage à un autre compte de trading avec un autre ensemble d'instruments de trading. Le nouveau comportement : si le symbole précédemment sélectionné n'est pas trouvé dans le compte de trading actuellement connecté, le premier symbole disponible dans Market Watch est automatiquement sélectionné à la place.

MetaEditor

  1. Correction du chargement de l'icône de l'application lors de la réouverture des propriétés du projet.

Mises à jour des traductions de l'interface utilisateur.

Correctifs basés sur les journaux de crash.
6 décembre 2019
MetaTrader 5 build 2265 : fonctions DirectX pour la visualisation 3D en MQL5 et paramètres des symboles dans le Strategy Tester

Terminal

  1. De nouvelles colonnes sont disponibles dans le Market Watch. La section principale comporte maintenant 40 paramètres de symbole supplémentaires, qui n'étaient auparavant disponibles que dans l'onglet Détails.




  2. Ajout de la mise en surbrillance du compte et du serveur actuellement connectés dans le Navigator. La fonction est utile si vous avez plusieurs comptes avec différents courtiers.




  3. Mise à jour du rendu du cadre des graphiques. Les cadres sont maintenant plus petit, laissant plus d'espace pour des informations utiles.




  4. Modification de l'algorithme de calcul des totaux de trading à l'affichage de l'historique de trading par positions. Les valeurs sont maintenant calculées sur les enregistrements réels.

    Pour afficher l'historique de trading par positions, le terminal utilise les informations des transactions exécutées pendant la période demandée. Seules les positions fermées durant cette période seront affichées dans l'historique. Si la position est toujours ouverte ou qu'elle a été fermée après l'intervalle sélectionné, elle ne sera pas affichée dans l'historique. Par conséquent, le total des bénéfices et des commissions en mode positions peut différer de ceux en mode historique des ordres/transactions.

    Par exemple, vous consultez l'historique de la semaine écoulée. Au cours de cette période, 100 transactions ont été exécutées, dont 98 ont été ouvertes et 20 fermées. Les deux dernières transactions ont ouvert de nouvelles positions qui n’ont pas encore été clôturées. Dans ce cas, l'historique des transactions contient 100 enregistrements et les valeurs totales appropriées calculées sur la base de ces transactions. Lorsque vous visualisez l'historique par positions, vous verrez 20 enregistrements collectés sur la base de 98 transactions. Seules ces données seront prises en compte lors du calcul des valeurs totales. Si le courtier prélève des frais de transaction, la valeur de commission finale dans l'historique des transactions sera différente de celle indiquée dans l'historique des positions, car les deux dernières transactions seront ignorées dans ce dernier cas.

  5. Lancement plus rapide des programmes MQL5.
  6. Une nouvelle option /beta a étét ajoutée dans le fichier d'installation du terminal, permettant de télécharger la version beta. En mode normal, la version officielle est installée par défaut, mais elle peut ensuite être mise à jour avec une version beta. En passant cette étape, vous pouvez économiser du temps et du trafic. Exemple de lancement de l'installation :
    C:\mt5setup.exe /beta
  7. Correction de l'affichage des besoins de marge des instruments de type "Actions Boursières".
  8. Amélioration de la vitesse d'utilisation de tous les composants de la plateforme grâce à l'utilisation du compilateur Clang/LLVM. Dans certains cas, la compilation est accélérée de 20%.

MQL5

  1. Ajout de nouvelles fonctions et shaders DirectX 11 pour la visualisation 3D. Vous pouvez maintenant créer des graphiques en 3 dimensions créés directement dans MQL5.

    La nouvelle classe CCanvas3D est une extension de la classe CCanvas de graphiques personnalisés. Elle est disponible dans le répertoire \MQL5\Include\Canvas\. La classe comporte des fonctions pour le rendu 3D des objets via l'API DirectX.

    • Create — crée une scène.
    • Attach — attache une scène à un graphique.
    • Destroy — détruit une scène.
    • ObjectAdd — ajoute à la scène un objet descendant, hérité de la classe de base CDXObject.
    • Render — la boucle complète de rendu, avec la mise en cache et le rendu de tous les CDXObject, ajoutés via la méthode ObjectAdd.
    • RenderBegin — démarre le rendu d'une scène, remplit le cache du rendu avec la couleur spécifiée (si le flag DX_CLEAR_COLOR est défini) et le cache de profondeur (lors de l'utilisation de DX_CLEAR_DEPTH), et définit également le cache de scène DXInputScene pour les shaders par défaut.
    • RenderEnd — complète le rendu des scènes et récupère le résultat dans un cache interne. Si redraw==true, affiche l'image sur le graphique sur lequel il s'exécute.
    • ViewMatrixGet — retourne la matrice de la vue.
    • ViewMatrixSet — définit la matrice de la vue. La matrice n'est pas compatible avec les méthodes ViewPositionSet, ViewRotationSet, ViewTargetSet et ViewUpDirectionsSet.
    • ViewPositionSet — définit la position de la caméra.
    • ViewRotationSet — définit la matrice de rotation de la caméra.
    • ViewTargetSet — définit le point de visée de la caméra. Utilisée avec ViewUpDirectionsSet, c'est une alternative à ViewRotationSet.
    • ViewUpDirectionsSet — définit la position verticale de la caméra. Utilisée avec ViewTargetSet, c'est une alternative à ViewRotationSet.
    • ProjectionMatrixGet — retourne la matrice de projection.
    • ProjectionMatrixSet — définit la matrice de projection.

    La documentation détaillée de la nouvelle bibliothèque sera bientôt publiée.




  2. Ajout du support des opérations avec les bases de données SQLite directement depuis MQL5. Cela facilite l'exécution des requêtes SQL sans créer d'instructions complexes. L'opération interne est implémentée par la nouvelle extension de la bibliothèque standard.

    Les fonctions suivantes sont disponibles :

    • DatabaseOpen — ouvre ou crée une base de données dans le fichier spécifié
    • DatabaseClose — ferme une base données
    • DatabaseTableExists — vérifie la présence d'une table dans la base de données
    • DatabaseExecute — exécute une requête sur la base de données spécifiée
    • DatabasePrepare — crée un handle de requête qui peut être ensuite exécuté avec DatabaseRead()
    • DatabaseRead — passe à l'enregistrement suivant dans les résultats de la requête
    • DatabaseFinalize — supprimer une requête qui a été créée avec DatabasePrepare()
    • DatabaseTransactionBegin — commence l'exécution d'une transaction
    • DatabaseTransactionCommit — termine l'exécution d'une transaction
    • DatabaseTransactionRollback — annule une transaction
    • DatabaseColumnsCount — retourne le nombre de colonnes d'une requête
    • DatabaseColumnName — retourne le nom d'une colonne par son numéro
    • DatabaseColumnType — retourne le type d'une colonne par son numéro
    • DatabaseColumnSize — retourne la taille de la colonne en octets
    • DatabaseColumnText — retourne la valeur string d'une colonne de l'enregistrement courant
    • DatabaseColumnInteger —  retourne la valeur int d'une colonne de l'enregistrement courant
    • DatabaseColumnLong — retourne la valeur long d'une colonne de l'enregistrement courant
    • DatabaseColumnDouble — retourne la valeur double d'une colonne de l'enregistrement courant
    • DatabaseColumnBlob — retourne le tableau de caractères (BLOB - Binary Large Object) d'une colonne de l'enregistrement courant

    Les codes d'erreurs suivants ont été ajoutés pour le fonctionnement des opérations :

    • ERR_MQL_DATABASE_INTERNAL (5120) — erreur interne de la base de données
    • ERR_MQL_DATABASE_INVALID_HANDLE (5121) — handle invalide de la base de données
    • ERR_MQL_DATABASE_TOO_MANY_OBJECTS (5122) nombre maximum d'objets atteint dans la base de données
    • ERR_MQL_DATABASE_CONNECT (5123)erreur de connexion à la base de données
    • ERR_MQL_DATABASE_EXECUTE (5124) erreur d'exécution de la requête
    • ERR_MQL_DATABASE_PREPARE (5125) erreur de création de la requête
    • ERR_MQL_DATABASE_NO_MORE_DATA (5126) — plus de données à lire
    • ERR_MQL_DATABASE_STEP (5127) erreur de déplacement à l'enregistrement suivant de la requête
    • ERR_MQL_DATABASE_NOT_READY (5128) les données pour la lecture des résultats de la requête ne sont pas encore prêtes
    • ERR_MQL_DATABASE_BIND_PARAMETERS (5129) erreur de substitution automatique de la requête SQL

  3. Ajout d'une nouvelle propriété des programmes MQL5 permettant la sélection d'une méthode de visualisation par défaut.
    #property optimization_chart_mode "3d,InpX,InpY"
    La propriété permet de définir le type du graphique ouvert à la fin de l'optimisation, ainsi que les paramètres du programme pour les les axes X et Y.

    La propriété ne définit que la vue par défaut du graphique. Elle peut être changée manuellement à tout moment en utilisant le menu contextuel.

  4. Nouvelle fonction MathArctan2. Retourne la valeur en radians de l'angle dont la tangente est égale au rapport des deux nombres spécifiés.
    double  MathArctan2(
       double  y      // la coordonnée y du point
       double  x      // la coordonnée x du point
       );
  5. Nous avons effectué une optimisation générale des programmes pour améliorer les performances et réduire la consommation des ressources.
  6. Ajout d'exemples de calculs mathématiques pouvant être effectués dans le strategy tester. Ils sont disponibles dans le répertoire \MQL5\Experts\Examples\Math 3D\.
  7. Introduction d'un contrôle plus fin des espaces de noms.
  8. Ajout du chargement des bibliothèques liées lors de l'utilisation de bibliothèques .NET dans les programmes MQL5. Si la bibliothèque .NET utilisée requiert d'autres bibliothèques pour son utilisation, le compilateur essayera de les télécharger automatiquement depuis \MQL5\Libraries.
  9. Correction des opérations d'heure dans le module MetaTrader pour l'intégration Python. Toutes les données en sortie utilisent maintenant l'heure du serveur de trades auquel le terminal est connecté.

Tester

  1. De nombreuses améliorations et nouvelles fonctionnalités :

    Paramètres personnalisés pour les instruments financiers
    Vous pouvez maintenant modifier les paramètres du principal instrument de trading sur lequel le test ou l'optimisation est effectué. Pratiquement tous les paramètres de spécification peuvent être surchargés : volumes, modes de trading, besoins de marge, mode d'exécution et d'autres paramètres. Donc, si vous devez vérifier un Expert Advisor sous différentes conditions, vous n'avez pas besoin de créer un symbole personnalisé séparé et de télécharger son historique. Vous pouvez le faire en changeant les paramètres standards du symbole.



    Si la spécification du symbole est personnalisé, l'icone 'route crantée' et l'icone du symbole sont marquées avec une astérisque. Elle montre que les paramètres personnalisés sont utilisés pour le test courant.




    Derniers paramètres/Expert Advisors/graphiques
    Utilisez les nouvelles commandes du menu contextuel pour une configuration rapide du test ou de l'optimisation. Choisissez les derniers paramètres utilisés par le tester, les graphiques récents ou les applications :




MetaEditor

  1. Ajout de la possibilité de travailler avec des projets C/C++ et Python directement depuis MetaEditor. Les projets multi-langages peuvent maintenant être gérés en utilisant l'éditeur intégré.

    Si les compilateurs appropriés sont installés sur votre PC, MetaEditor les détectera et les ajoutera à vos paramètres. Vous pouvez également spécifier les chemins d'accès aux composants requis dans l'onglet Compilateurs. Dans le même onglet, vous pouvez télécharger les composants en cliquant sur Installer à côté du champ correspondant.




    Après cela, vous pouvez utiliser des projets C/C++ et Python de la même façon que pour les programmes MQL5.

  2. Ajout du support des sous-projets du répertoire des Projets Partagés prévus pour le développement partagé d'un projet via le MQL5 Storage. Auparavant, seuls les projets isolés pouvaient être créés au niveau principal.
  3. Mises à jour du débogueur intégré.
  4. Correction de l'ajout de l'en-tête d'une fonction lors de l'utilisation d'un styler de code.
  5. Les commandes 'Aller à la position précédente/suivante du curseur' sont maintenant disponibles dans le menu Affichage et dans la barre d'outils.
  6. Les espaces peuvent maintenant être utilisés dans les noms de projet.

Android

  1. Ajout de la possibilité de basculer rapidement entre les pages dépôts/retraits sur le site web de votre courtier.

    Il n'est pas nécessaire de chercher les fonctions correspondantes dans l'espace personnel du site du courtier. Les commandes de navigation rapide sont également disponibles directement dans les terminaux : les utilisateurs peuvent basculer entre les pages de retrait et de dépôt depuis les sections Comptes et Trading :



    • Les opérations de retrait/dépôt ne sont disponibles que si les fonctions appropriées sont activées pour le compte de trading du côté du courtier.
    • Le terminal de trading n'effectue aucune opérations de retrait/dépôt. Les fonctions intégrées redirigent l'utilisateur vers les pages correspondantes du site web du courtier.

  2. Les positions de l'historique sont maintenant triées par date de clôture.
  3. Ajout du marquage des positions fermées par Stop Loss ou par Take Profit avec des lignes verticales rouges et vertes dans la section historique.
  4. Ajout de nouveaux champs dans la spécification du symbole de trading :

    • Category — la propriété est utilisée pour le marquage supplémentaire des instruments financiers. Par exemple, ça peut être le secteur du marché auquel le symbole appartient : Agriculture, Pétrole & Huiles et autres. La catégorie n'est affichée que si les informations correspondantes sont fournies par le courtier.
    • Exchange — le nom de la bourse sur laquelle l'instrument est échangé. La catégorie n'est affichée que si les informations correspondantes sont fournies par le courtier.

  5. Ajout de l'indication de l'état de l'Appel de Marge dans la section trading. Lorsque cet état apparaît, les paramètres Marge, Marge Libre et Niveau de Marge sont affichés en rouge.
  6. Correction de l'affichage du bouton d'ouverture de la section OTP sur les tablettes.
  7. Autres corrections et améliorations.

iPhone/iPad

  1. Ajout de la possibilité de basculer rapidement entre les pages dépôt/retrait sur le site web du courtier. Pour plus de détails, veuillez consulter la page What's New de MetaTrader 5 pour Android.



  2. Ajout du support du mode sombre pour iOS/iPadOS.
  3. La section mot de passe à usage unique est maintenant disponible dans la version pour iPad.
  4. Les positions fermées par Stop Loss ou par Take Profit sont marquées avec des lignes verticales rouges et vertes dans la section historique.
  5. Les positions de l'historique sont maintenant triées par date de clôture. Si la position n'a pas encore été fermée, sa date d'ouverture est utilisée pour le tri.
  6. Autres corrections et améliorations.

18 octobre 2019
MetaTrader 5 Build 2190

Terminal

  1. Correction de l'ordre d'affichage des programmes MQL5 dans le Navigator.

MQL5

  1. Correction des erreurs de compilation liées à l'utilisation de variables statiques locales dans les programmes ayant des déclarations de de groupe de variables d'entrées.

VPS

  1. Correction de la demande des journaux d'Hébergement.

Tester

  1. Amélioration de l'affichage des graphiques d'optimisation en trois dimensions.
  2. Correction de la réception des frames pendant une optimisation avancée. Désormais, tous les frames des optimisations principale et des suivantes sont disponibles dans la fonction OnTesterDeinit.
  3. Correction de la formation d'un arbre de symboles dans les paramètres du Strategy Tester.

Ajout de la traduction de l'interface utilisateur en punjabi (Inde).

La documentation a été mise à jour.

Corrections basées sur les journaux de crash.

La mise à jour sera disponible via le système Live Update.

5 octobre 2019
MetaTrader 5 build 2170 : portée MQL5, testeur de stratégie global et mises à jour intégrées de l'Hébergement Virtuel

Terminal

  1. Options de gestion de l'Hébergement Virtuel intégrées entièrement repensées. Toutes les informations sur le terminal loué, ainsi que sur les fonctions de migration, d'arrêt et de démarrage d'environnement, sont désormais disponibles dans un onglet séparé de la fenêtre Boîte à outils.

    Dans les versions précédentes, les fonctions d'Hébergement Virtuel étaient disponibles dans le menu contextuel de la fenêtre du Navigateur. Désormais, toutes les informations et commandes de contrôle nécessaires sont classées sous l'onglet "VPS" :




    Les informations de base de l'abonnement apparaissent à gauche :

    • Données de connexion : comparaison des délais réseau entre votre terminal sur le serveur d’hébergement et un terminal fonctionnant sur un PC local.
    • Compte de trading pour lequel l'hébergement a été loué et le plan de paiement.
    • Identifiant d'abonnement unique. Un clic sur l'ID ouvre la section Hébergement du profil utilisateur MQL5.community, à partir duquel l'abonnement peut être géré.
    • Date d'inscription et état actuel. Si le service d'hébergement est arrêté, un statut approprié apparaîtra instantanément ici.

    En utilisant le bouton Démarrer/Arrêter, le terminal virtuel peut être rapidement démarré ou arrêté.

    Les données relatives au matériel du serveur d'hébergement et aux graphiques de consommation de la CPU sont affichées dans la partie droite de la fenêtre. Sur la base des informations affichées, vous pourrez réagir rapidement si votre Expert Advisor ou votre indicateur utilise une mémoire ou un temps excessif du processeur.

    Des informations sur la dernière migration de l'environnement de trading ainsi que les commandes de migration sont également disponibles ici. Ces commandes permettent une migration rapide de l'environnement après l'achat d'un abonnement.

    Une plateforme virtuelle peut être louée à partir de l'onglet "VPS". Le processus de location n'a pas changé et il est toujours rapide et facile. Il vous suffit de sélectionner un plan et un mode de paiement adapté. Le meilleur serveur pour la connexion à votre courtier sera sélectionné automatiquement.




  2. Ajout de la possibilité de basculer rapidement entre les opérations de dépôt/retrait sur le site Web du courtier.

    Il n'est pas nécessaire de rechercher les fonctions appropriées dans une salle de traders sur le site du courtier. Les commandes de navigation rapides sont disponibles directement dans les terminaux : dans le menu des comptes du Navigator et dans l'onglet Boîte à Outils > Trade :



    • Les opérations de dépôt/retrait ne sont disponibles que si les fonctions appropriées sont activées pour le compte de trading côté courtier.
    • Le terminal de trading n'effectue aucune opération de dépôt/retrait sur le compte. Les fonctions intégrées redirigent l'utilisateur vers les pages appropriées du site Web du courtier.
  3. Nouveaux champs dans la spécification d'un symbole de trading :

    Catégorie
    La propriété est utilisée pour le marquage supplémentaire d'instruments financiers. Par exemple, il peut s'agir du secteur de marché auquel appartient le symbole : Agriculture, Pétrole et Gaz et autres. La catégorie est affichée uniquement si les informations appropriées sont fournies par le courtier.

    Bourse
    Le nom de la bourse dans laquelle le titre est échangé. La catégorie est affichée uniquement si les informations appropriées sont fournies par le courtier.

    Commissions
    Informations sur les commissions facturées par un courtier pour les transactions du symbole. Les détails du calcul sont affichés ici :

    • La commission peut être à un seul niveau ou à plusieurs niveaux, c’est-à-dire égale quel que soit le volume/le chiffre d’affaires ou peut dépendre de la taille. Les données appropriées sont affichées dans le terminal.
    • La commission peut être chargée immédiatement à la signature de l'opération ou à la fin d'un jour de bourse/mois.
    • La commission peut être facturée en fonction de la direction de la transaction : entrée, sortie ou les deux types d'opération.
    • La commission peut être facturée par lot ou par transaction.
    • La commission peut être calculée en argent, en pourcentage ou en points.

    Par exemple, l'entrée suivante signifie qu'une commission est prélevée immédiatement lors de l'entrée et de la sortie de l'opération. Si le volume des transactions se situe entre 0 et 10 lots, une commission de 1,2 USD est facturée par opération. Si le volume de transaction se situe entre 11 et 20 lots, une commission de 1,1 USD est facturée pour chaque lot de la transaction.
    Commission | Offres instantanées, volume, entrée/sortie
    0  - 10  | 1.2 USD par transaction
    11 - 20  | 1.1 USD par lot



  4. Des champs associés aux options supplémentaires ont été ajoutés à la spécification du symbole :

    • Type de l'option — call ou put
    • Sous-jacent — le symbole sous-jacent de l'option
    • Prix d'exercice — prix d'exercice de l'option

  5. Ajout du support pour la livraison des options "Grecs" : delta, gamma, vega, theta, rho. Les courtiers peuvent fournir des informations supplémentaires relatives à ces instruments. Les données sont affichées dans la section Détails de la fenêtre Market Watch et peuvent être utilisées pour une analyse avancée des trades :



  6. L'outil Croix de Visée indique maintenant la distance entre les niveaux de prix en pourcentage, en plus des pips précédemment disponibles :




  7. Ajout de l'affichage d'un prix résultant dans les boîtes de dialogue de trading pendant les opérations d'exécution Market et Boursière, si ce prix est disponible au moment où une réponse est reçue du courtier :




  8. Correction d'une erreur occasionnelle provoquant l'échec de la commande "Tout Afficher" dans la fenêtre Market Watch lors de l'affichage de la liste de tous les instruments de trading disponibles.

MQL5

  1. la portée des opérations a été révisée et MQL5 est maintenant encore plus proche du C++. Cela offre aux programmeurs MQL5 de plus larges possibilités d’opérations avec des bibliothèques tierces. La mise à jour élimine le besoin de modifier les bibliothèques et d'unifier les identificateurs.

    Exemple : Le code contient la déclaration de deux structures portant le même nom, même si elles appartiennent à des classes différentes. Dans les versions antérieures, une telle déclaration produisait une erreur de compilation : "identificateur déjà utilisé". Maintenant, ce code sera compilé et exécuté avec succès. Pour un accès correct à la variable/structure/fonction souhaitée en dehors de sa portée, vous devez spécifier une classe (dans ce cas, il s'agit de CBar::Item).
    class CFoo
      {
    public:
       struct Item { int x; };
      };
    //+------------------------------------------------------------------+
    class CBar
      {
    public:
       struct Item { int x; };
      };
      
    CBar::Item item;  // déclaration correcte de la structure Item de la classe Bar
    Item       item;  // déclaration incorrecte
    Ajout du support de namespace fournissant plus de possibilités lors de l'utilisation de code/bibliothèques tierces dans les applications MQL5.

    #define PrintFunctionName() Print(__FUNCTION__)
    
    namespace NS
    {
    void func()
      {
       PrintFunctionName();
      }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    }
    
    struct C
      {
       int               x;
                         C() { PrintFunctionName(); };
      };
    
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    void func()
      {
       PrintFunctionName();
      }
    //+------------------------------------------------------------------+
    //| Fonction de lancement du script                                  |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       func();
       NS::func();
    
       C c;
       NS::C ac;
      }
    Lors de l'exécution, le résultat suivant est affiché en sortie :
    2019.09.18 13:39:35.947    TestScript (AUDCAD,H1)    func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::func
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    C::C
    2019.09.18 13:39:35.949    TestScript (AUDCAD,H1)    NS::C::C

  2. la nouvelle version offre un accès plus rapide aux données temporelles à l'aide des fonctions suivantes : iTime, iOpen, iHigh, iLow, iClose, iVolume, iTickVolume, iSpread.

  3. Ajout du support de l'attribut "=delete". Cela permet d'interdire l'utilisation de certaines méthodes de classe.
    class A
      {
       void              operator=(const A &)=delete;    // interidt l'opérateur de copie d'objet
      };
    
    class B : public A
      {
      };
    
    //+------------------------------------------------------------------+
    //| Fonction de lancement du script                                  |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       A a1,a2;
       B b1,b2; 
      
       a1=a2;
       b1=b2;
      }
    Dans cet exemple, le compilateur renverra des erreurs pour "a1=a2" et "b1=b2" :
    attempting to reference deleted function 'void A::operator=(const A&)'
       function 'void A::operator=(const A&)' was explicitly deleted here

    attempting to reference deleted function 'void B::operator=(const B&)'
       function 'void B::operator=(const B&)' was implicitly deleted because it invokes deleted function 'void A::operator=(const A&)'

  4. les valeurs suivantes ont été ajoutées à l'énumération ENUM_SYMBOL_INFO_STRING :

    • SYMBOL_CATEGORY — catégorie du symbole. Elle est utilisée pour le marquage supplémentaire d'instruments financiers. Par exemple, il peut s'agir du secteur de marché auquel appartient le symbole : Agriculture, Pétrole et Gaz et autres.
    • SYMBOL_EXCHANGE — le nom de la bourse dans laquelle le titre est échangé.

  5. Ajout du support pour la fermeture de position par la règle FIFO.

    • La valeur ACCOUNT_FIFO_CLOSE a été ajoutée à ENUM_ACCOUNT_INFO_INTEGER. Cela indique que les positions ne peuvent être fermées que par la règle FIFO. Si la valeur de la propriété est true, les positions de chaque instrument ne peuvent être fermées que dans le même ordre dans lequel elles ont été ouvertes : le plus ancien doit être fermé en premier, puis le suivant, etc. En cas de tentative de fermeture de positions dans un ordre différent, une erreur sera renvoyée. La valeur de la propriété est toujours 'false' pour les comptes sans gestion de la position de couverture (ACCOUNT_MARGIN_MODE!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING).
    • Nouveau code de retour : MT_RET_REQUEST_CLOSE_ONLY — la requête est rejetée car la règle "Seule la fermeture de positions existantes par la règle FIFO est autorisée" est définie pour le symbole

    Il existe trois méthodes principales pour fermer une position :

    • Fermeture depuis le terminal client : le trader ferme la position manuellement, à l’aide d’un robot de trading, sur la base de l’abonnement au service Signals, etc. En cas de tentative de fermeture d'une position qui ne respecte pas la règle FIFO, le trader recevra une erreur appropriée.
    • Clôture par l'activation du Stop Loss ou du Take Profit : ces ordres sont traités côté serveur. La fermeture de position n'est donc pas demandée côté trader (terminal), mais initiée par le serveur. Si le Stop Loss ou le Take Profit se déclenche pour une position et que cette position n'est pas conforme à la règle FIFO (une position plus ancienne correspond au même symbole), la position ne sera pas fermée.
    • Fermeture lors du déclenchement du Stop Out : de telles opérations sont également traitées côté serveur. En mode normal, dans lequel la fermeture par FIFO est désactivée, en cas de Stop Out, les positions sont fermées en commençant par celle ayant la plus grande perte. Si cette option est activée, l'heure d'ouverture sera également vérifiée pour les positions perdues. Le serveur détermine les positions perdantes pour chaque symbole, recherche la position la plus ancienne pour chaque symbole, puis ferme celle qui a la plus grande perte parmi les positions trouvées.

  6. Ajout d'options pour le regroupement de paramètres via "groupe d'entrée". Cela permet une séparation visuelle des paramètres en fonction de leur logique sous-jacente.

    Dans le code Expert Advisor ci-dessous, les paramètres d’entrée sont regroupés en fonction de leur objectif :
    input group           "Signal"
    input int             ExtBBPeriod = 20;         // période des Bandes de Bollinger
    input double          ExtBBDeviation=2.0;       // déviation
    input ENUM_TIMEFRAMES ExtSignalTF=PERIOD_M15;   // Période BB
    
    input group           "Tendance"
    input int             ExtMAPeriod = 13;         // Période de la moyenne mobile
    input ENUM_TIMEFRAMES ExtTrendTF=PERIOD_M15;    // Période MM
    
    input group           "ReglesDeSortie"
    input bool            ExtUseSL      = true;     // utilise le StopLoss
    input int             Ext_SL_Points = 50;       // StopLoss en points
    input bool            ExtUseTP      = false;    // utilise le TakeProfit
    input int             Ext_TP_Points = 100;      // TakeProfit en points
    input bool            ExtUseTS      = true;     // utilise le Trailing Stop
    input int             Ext_TS_Points = 30;       // Trailing Stop en points
    
    input group           "MoneyManagement"
    sinput double         ExtInitialLot =0.1;       // valeur initiale du lot
    input bool            ExtUseAutoLot =true;      // calcul automatique du lot
    
    input group           "Auxiliaire"
    sinput int            ExtMagicNumber =123456;   // Magic Number de l'EA
    sinput bool           ExtDebugMessage=true;     // affiche les messages de debug
    Lorsqu'un tel Expert Advisor est lancé dans le Strategy Tester, les blocs de paramètres d'entrée peuvent être réduits ou développés par un double-clic sur le nom du groupe. Tous les paramètres d'un groupe peuvent être sélectionnés pour être optimisés à l'aide d'une seule case à cocher.




  7. Correction de l'import des fonctions DLL avec des noms correspondant aux noms de fonctions MQL5. Exemple :
    #import "lib.dll"
    int func();
    #import
    //+------------------------------------------------------------------+
    //|                                                                  |
    //+------------------------------------------------------------------+
    int func()
      {
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Fonction de lancement du script                                  |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print( func() );
      }
    Dans les versions antérieures, l'erreur suivante était renvoyée lors de la compilation :
    'func' - ambiguous call to overloaded function with the same parameters
    could be one of 2 function(s)
       int func()
       int func()
    Maintenant, au lieu de l'erreur, la fonction MQL5 intégrée avec une priorité plus élevée sera utilisée par défaut. La fonction importée peut être appelée en spécifiant explicitement la portée :
    void OnStart()
      {
       Print( lib::func() );
      }
  8. Correction de la spécification de l'heure dans les nouvelles du calendrier économique. Les événements sont désormais livrés en tenant compte du fuseau horaire du serveur de trading auquel le terminal est connecté, au lieu du fuseau horaire de l'ordinateur local.
  9. correction de la consommation excessive de mémoire dans les fonctions Copyticks et CopyTicksRange.

Signals

  1. Correction de l'affichage des graphiques de signaux lorsque vous travaillez dans Wine (MacOS et Linux).

Tester

  1. Grosse mise à jour du Strategy Tester. Nouvelle page de démarrage, page de paramètres redessinée, facilité d'utilisation améliorée.

    Page de démarrage
    Maintenant, après le lancement du testeur, l’utilisateur voit, au lieu de plusieurs paramètres, une liste de tâches standards, en sélectionnant celles qu’ils peuvent rapidement commencer à tester. La nouvelle conception est principalement destinée aux utilisateurs inexpérimentés.

    Nous avons sélectionné les tâches de test de stratégie et d'optimisation les plus fréquentes et les avons ajoutées à la page de démarrage. En outre, l’une des tâches précédemment exécutées peut être redémarrée à partir de la page de démarrage. Si vous avez exécuté de nombreuses tâches et qu'elles ne rentrent pas dans la page de démarrage, utilisez la barre de recherche. Vous pouvez trouver un test avec n’importe quel paramètre : nom du programme, symbole, calendrier, mode de modélisation, etc.




    Masquer les paramètres non pertinents
    Après avoir sélectionné une tâche, l'utilisateur procède à des tests supplémentaires : sélection d'un expert, symbole, période de test, etc. Tous les paramètres non pertinents qui ne sont pas requis pour les tâches sélectionnées sont masqués à partir de la page de configuration. Par exemple, si des calculs mathématiques sont sélectionnés, seuls deux paramètres doivent être spécifiés : la sélection d'un programme à tester et le mode d'optimisation. Les paramètres de période de test, de délai et de génération de ticks seront masqués.




    Configuration de test pratique
    Pour plus de commodité, certains paramètres de la page de configuration ont été réorganisés. Des explications détaillées ont été ajoutées pour les paramètres de délai et de visualisation. En outre, les paramètres de test peuvent maintenant être enregistrés et téléchargés manuellement, ce qui permet au trader de revenir rapidement aux paramètres précédents.




    En utilisant le même onglet, vous pouvez rapidement ouvrir le programme pour le modifier dans MetaEditor.

    Calcul du profit en pips
    En utilisant les paramètres, vous pouvez activer le calcul du profit en pips. Ce mode accélère les tests alors qu'il n'est pas nécessaire de recalculer le profit dans la devise du dépôt en utilisant des taux de conversion (et qu'il n'est donc pas nécessaire de télécharger l'historique des prix approprié). Les calculs de swap et de commission sont éliminés dans ce mode.




    Veuillez noter que lors du calcul du profit en pips, le volume des transactions n’a pas d’importance. Seul le nombre de pips gagnés/perdus est calculé pour chaque transaction. De plus, le contrôle des marges n'est pas effectué dans ce mode. Utilisez-le uniquement pour une estimation rapide et approximative de la stratégie, puis vérifiez les résultats obtenus en utilisant des modes plus précis.

    Amélioratoins générales
    Le bouton de démarrage/arrêt de test et la barre de progression ont été déplacés vers la barre des onglets. Ainsi, l'utilisateur peut contrôler le processus depuis n'importe quelle section du Strategy Tester. Des commandes de test de démarrage/arrêt ont également été ajoutées aux menus contextuels des sections de paramètres et d’entrées.




  2. le graphique d'optimisation peut désormais être affiché dans la zone de travail principale du terminal, au lieu de s'afficher dans une section de testeur de stratégie distincte. De cette façon, beaucoup plus d'espace devient disponible pour l'analyse des données. Le système de visualisation 3D a également été mis à jour.




  3. ajout de la sauvegarde du cache d’optimisation pour le mode "Tous les symboles du Market Watch".
  4. Ajout de la sauvegarde du cache du test.

    Dans les versions précédentes, les résultats des tâches exécutées étaient enregistrés dans des fichiers uniquement lors de l'optimisation d'Expert Advisors. Désormais, les fichiers de cache sont également sauvegardés lors de tests individuels, à l’aide desquels les utilisateurs peuvent revenir à des calculs antérieurs et consulter à tout moment les statistiques, l’équilibre, le solde et le chargement des dépôts. Dans les prochaines versions, cette option permettra de comparer les résultats des tests.

    Pour charger les résultats des tests précédents, utilisez la nouvelle page de démarrage du testeur : cliquez sur "Résultats précédents" et sélectionnez le site souhaité :




  5. Essais et optimisations considérablement accélérés, y compris les opérations effectuées avec le réseau cloud MQL5.
  6. Correction et optimisation des opérations avec des cadres.

MetaEditor

  1. Ajout de la possibilité de configurer le styler de code.

    MetaEditor comprend un styler de code intégré, qui permet de formater automatiquement le texte du programme conformément à la norme adoptée. Maintenant, en plus du style commun, vous pouvez utiliser d'autres normes populaires. Pour ce faire, ouvrez les paramètres de MetaEditor et sélectionnez le style souhaité :




    Les paramètres suivants peuvent également être définis pour le styler :

    Espaces par indentations
    Définit le nombre d'espaces utilisés dans l'alignement des constructions imbriquées :
    if(condition)
      {
       //---
      }

    Remplacer les tabulations par des espaces
    Si cette option est activée, le styliste remplacera tous les onglets du code par des espaces. Le nombre de caractères par tabulation est défini dans la section Général.

    Supprimer les lignes vides
    Lorsque cette option est activée, le styler supprimera toutes les lignes comportant uniquement un caractère de saut de ligne.

    Insérer des espaces après des virgules et des points-virgules
    Lorsque cette option est activée, le styler séparera visuellement les constructions avec des énumérations d'éléments. Exemple :
    // before styling
    ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop);
    // after styling
    ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);

    Insérer des espaces autour des opérateurs de déclaration
    Lorsque cette option est activée, le styler insère des espaces autour des opérateurs d'affectation, d'égalité, de comparaison et autres. Exemple :
    // before styling
    if(x==1&y!=2)
      {
       int a=0;
      }
    // after styling
    if(x == 1 & y != 2)
     {
      int a = 0;
     }

  2. Ajout de la commande "Afficher dans le Navigator" au menu contextuel des favoris du fichier. Ainsi, l'utilisateur peut facilement trouver un fichier ouvert en édition dans la structure de dossiers de l'éditeur.




  3. Correction de l'affichage du mot clé 'union' dans les bulles d'aide.

L’interface utilisateur a également été traduite dans 18 nouvelles langues :

  • Région européenne - suédois, lituanien, danois, letton, estonien, serbe, slovène, slovaque, finnois, géorgien
  • Région asiatique - Javanais, marathi, bengali, punjabi, tamoul, telugu
  • Région africaine - swahili, haoussa

L’interface de la plateforme est maintenant disponible en 50 langues, parlées par plus de 4 milliards de personnes.

Pour définir la langue de votre interface, accédez au menu "Affichage \ Langue" situé en haut du terminal.

La documentation a été mise à jour.

Corrections basées sur les journaux de crash.

La mise à jour sera disponible via le système Live Update.

12 juin 2019
MetaTrader 5 build 2085 : Intégration avec Python et améliorations du Strategy Tester

Terminal

  1. Ajout d'une nouvelle API permettant d'effectuer des requêtes sur les données du terminal MetaTrader 5 via des applications écrites en Python.

    Python est un langage de programmation moderne et de haut niveau pour développer des scripts et des applications. Il contient de nombreuses bibliothèques pour le machine learning, l'automatisation des process, ainsi que l'analyse des données et la visualisation.

    Le package MetaTrader pour Python est conçu pour obtenir rapidement et de façon efficace les données boursières via les communications inter-processeurs, directement depuis le terminal MetaTrader 5. Les données reçues de cette façon peuvent être ensuite utilisées pour les calculs statistiques et le machine learning.



    Connexion

    1. Téléchargez la dernière version de Python à https://www.python.org/downloads/windows
    2. Pendant l'installation de Python, cochez la case "Ajouter Python X.X à la variable PATH%" pour permettre le lancement des scripts Python depuis la ligne de commande.
    3. Installez le module MetaTrader 5 depuis la ligne de commande
      pip install MetaTrader5
    4. Ajoutez les packages matplotlib et pytz
      pip install matplotlib
      pip install pytz

    Fonctions

    • MT5Initialize établit la connexion avec le terminal MetaTrader 5
    • MT5Shutdown ferme la connexion établie précédemment au terminal MetaTrader 5
    • MT5TerminalInfo retourne le statut et les paramètres du terminal MetaTrader 5 connecté
    • MT5Version retourne la version du terminal MetaTrader 5
    • MT5WaitForTerminal attends que le terminal MetaTrader 5 soit connecté au serveur de trading
    • MT5CopyRatesFrom récupère les barres du terminal MetaTrader 5 à partir de la date spécifiée
    • MT5CopyRatesFromPos récupère les barres du terminal MetaTrader 5 à partir de l'index spécifié
    • MT5CopyRatesRange récupère les barres dans l'intervalle spécifié depuis le terminal MetaTrader 5
    • MT5CopyTicksFrom récupère les ticks du terminal MetaTrader 5 à partir de la date spécifiée
    • MT5CopyTicksRange récupère les ticks dans l'interalle de temps spécifié depuis le terminal MetaTrader 5


  2. Les sections Market et Signal ont été optimisées. Les présentations de produits et des signaux sont maintenant jusqu'à sept fois plus rapides et offrent ainsi une meilleure expérience de navigation des services.




  3. Ajout du support pour des services "Market", "Signals" et "Recherche" dans Wine. Les utilisateurs Linux et Mac OS ont maintenant accès à la plus grande boutique d'applications de trading incluant le service de trading par copie.




  4. Le programme intégré d'apprentissage a été traduit dans plus de 30 langues, incluant l'espagnol, le chinois, le portugais et l'allemand, entre autres. Pour afficher les conseils interactifs dans la langue de votre choix, passez à la langue d'interface souhaitée à l'aide du menu Affichage.




  5. De nouvelles options permettent la vérification des numéros de téléphone et des emails, qui sont spécifiés par les traders lors de l'ouverture de comptes de démo et de comptes préliminaires.

    Le besoin de vérification des données est déterminé par le courtier. Si l'option est activée, les codes de confirmation sont envoyés automatiquement au trader pendant la demande de compte et les champs spécifiques pour le code apparaissent dans la boîte de dialogue :




    Les codes de confirmation ne sont valides que pendant quelques minutes. Si le code n'est pas saisi dans le champ dans ce laps de temps, le trader devra recommencer la procédure.
    Avant d'envoyer les codes, le système vérifie si le numéro de téléphone/l'email ont été confirmés. Si le trader a déjà passé la vérification de son ordinateur, un compte sera ouvert sans confirmation supplémentaire. Il n'y aura donc pas de charge supplémentaire pour les traders lors d'une demande de compte.
  6. Les options de paiement de la MQL5.community via PayPal ont été étendues. Les achats peuvent maintenant être effectués en un clic avec ce système.

    Comment ça marche
    Une fois que vous vous êtes connecté à l'aide de votre compte PayPal lors de l'achat, il vous sera demandé d'autoriser d'autres paiements à notre société :





    En confirmant cette option, vous pourrez effectuer d'autres achats en un clic en appuyant sur le bouton du compte enregistré précédemment :




    Si vous cliquez sur "Annuler et retourner à MetaQuotes Software Corp.", vous effectuerez les paiements normalement, en entrant les détails du compte PayPal manuellement, pour chaque achat.
    Le site web MQL5.com et la plateforme MetaTrader 5 ne stockent pas vos détails de paiement. Lorsque vous déposez des fonds, effectuez un achat dans le service Market ou abonnez-vous à Signal, la vérification des données est effectuée du côté du système de paiement.
    Vous pouvez toujours supprimer le lien vers votre compte PayPal.

  7. Améliorations et optimisation du Strategy Tester.

    Nous avons introduit un grand nombre d’améliorations cachées et d’erreurs corrigées afin d’optimiser le fonctionnement du Strategy Tester. La mise à jour permet de tester beaucoup plus rapidement certains types de tâches et d'obtenir une stabilité de fonctionnement supérieure. Les principales améliorations comprennent :

    Opérations avec des cadres
    Les opérations avec des cadres sur les agents locaux, du réseau et sur le cloud ont été optimisés. Ces opérations sont maintenant traitées plus rapidement et ne sont jamais ignorées.

    Distribution des tâches aux agents
    Le testeur peut maintenant redistribuer les tâches aux agents pendant le processus d'optimisation. Si un nouvel agent est devenu disponible (ou qu'un des agents utilisés auparavant a été relâché), le testeur crée automatiquement un nouvel paquet de tâches, en utilisant celles distribuées auparavant parmi les autres agents. Les tâches peuvent maintenant être redistribuées si des agents trop lents sont détectés. Les tâches de ces agents sont envoyées sur d'autres agents pour terminer l'optimisation plus rapidement.

    La distribution des tâches dans le mode de calcul mathématique est beaucoup plus rapide.

    Statistiques d'optimisation dans le Journal
    La journalisation de l'optimisation a été étendue : elle inclut des statistiques détaillées relatives à l'utilisation du MQL5 Cloud Network et à l'activation et la désactivation des agents sur le cloud, entre autres.

    Opération en mode de journalisation d'optimisation complète
    Pour une consommation optimale des ressources, tous les messages des agents ne sont pas enregistrés dans le journal du testeur. Pour voir tous les journaux, vous pouvez activer l'option "Journaux d'optimisation complets" avec le menu contextuel de journalisation du testeur. Précédemment, ce mode ralentissait de façon significative le processus d'optimisation. Le temps de calcul n'est maintenant plus affecté.

    MQL5 Cloud Network
    Opération optimisée des agents de tests du cloud. Les tâches de calcul sont maintenant distribuées plus efficacement.

  8. Le calendrier intégré comprend les publications de plus de 900 indicateurs liés aux 18 plus grandes économies mondiales, incluant les Etats-Unis, l'Union Européenne, le Japon et le Royaume-Uni entre autres. Les données correspondantes sont collectées depuis les sources publiques et en temps réel. En vérifiant régulièrement le service, les traders restent informés sur les dernières informations mondiales et peuvent prendre des décisions de trading en connaissance de cause.

    Le calendrier économique est disponible sur les terminaux de bureau et sur les sites web, ainsi que sur les appareils mobiles. L'application peut être ouverte avec le menu contextuel du Calendrier dans le terminal :




    Sélectionnez votre plateforme et téléchargez l'app Tradays :


    Outre les fonctions de calendrier disponibles sur la plateforme de bureau, la version mobile fournit des rappels des événements et permet d'accéder à un historique complet des indicateurs sous forme de graphiques et de tableaux.

  9. Ajout de la génération automatique de l'historique des barres des symboles personnalisés lors de l'import de l'historique des ticks. Si les données d'un tick d'un symbole personnalisé changent, les barres correspondantes sont maintenant automatiquement recalculées :

    • Les données unifiées sont donc préservées dans la plateforme.
    • Après l'import des données des ticks (pourvu qu'il y ait suffisamment de données), il n'est pas besoin d'importer les barres puisqu'elles sont automatiquement calculées par le terminal.

    Les modifications concernent l'import des ticks effectués via l'interface du terminal, ainsi que la mise à jour des ticks exécutée à partir d'applications MQL5 à l'aide de la fonction CustomTicks*. Tout changement dans les données des ticks ménent au recalcul de la barre 1-minute correspondante du symbole personnalisé.

  10. Correction de la mise à jour des données dans la Fenêtre des Données lors de l'utilisation du curseur en mode Croix sur un graphique détaché.
  11. Correction de la sauvegarde de l'historique des ticks. Dans les versions précédentes, plusieurs ticks dans la même milliseconde pouvaient être sauvés dans le mauvais ordre.
  12. Correction de la génération des graphiques sur un historique trop court (moins d'un jour) disponible sur le serveur.

MQL5

  1. Ajout de l'option de débogage du MQL5 service. Ces applications peuvent maintenant être testées de la même façon que les Expert Advisors et les indicateurs.
  2. De nouveaux modes de calcul du profit et de la marge ont été ajoutés dans l'énumération ENUM_SYMBOL_CALC_MODE :

    • SYMBOL_CALC_MODE_EXCH_BONDS — calcul pour les obligations boursières.
    • SYMBOL_CALC_MODE_EXCH_STOCKS_MOEX — calcul pour les actions tradées sur la Bourse de Moscou.
    • SYMBOL_CALC_MODE_EXCH_BONDS_MOEX — calcul pour les obligations tradées sur la Bourse de Moscou.

  3. La nouvelle fonction TesterDeposit permet l'émulation des opérations de dépôt pendant le test. La fonction peut être utile lors du test de stratégies de money management.
    bool  TesterDeposit(
       double money      // le montant du dépôt
       );
  4. Pendant l'exécution de la méthode OnDeinit, l'application MQL5 ne reçoit aucun évènement du terminal. Auparavant, les applications ne parvenaient parfois pas à terminer la désinitialisation (par exemple, pour supprimer tous les objets créés) en raison de la réception d'autres événements.
  5. Correction d'erreurs occasionnelles pouvant survenir après une modification de l'historique des ticks des symboles personnalisés pour le jour en cours.
  6. Correction du ralentissement occasionnel des applications lors de l'utilisation d'un grand nombre (plusieurs dizaines de milliers) d'objets graphiques.
  7. Correction du gel des terminaux en cas d'appels fréquents à l'historique des transactions depuis les programmes MQL5.
  8. Correction du fonctionnement de la fonction iBarShift. Avec l'indicateur "exact=false" et une requête en dehors des données, la fonction renvoyait le plus ancien numéro de barre au lieu du plus récent.

Tester

  1. Correction de la détermination du nombre de coeurs sur les ordinateurs avec des processeurs ayant plusieurs noeuds NUMA.
  2. Ajout de la possibilité d'exécuter les tests et l'optimisation avec un dépôt initial à zéro, car les opérations de dépôt peuvent être émulées lors des tests à l'aide de la nouvelle fonction TesterDeposit.

MetaEditor

  1. La commande code styler peut maintenant être ajoutée à la barre d'outils pour un accès rapide.
  2. Correction du passage à la définition de paramètre et à la visualisation des données associées lors de l'utilisation de caractères non Unicode dans les noms de fonction et de variable.

La documentation a été mise à jour.

La mise à jour est disponible via le système LiveUpdate.

21 février 2019
MetaTrader 5 build 2005 : Calendrier Economique, applications MQL5 sous forme de services et API de langage R

Terminal

  1. Calendrier Economique intégré complètement révisé.

    Le Calendrier Economique est notre solution propriétaire. Vous y trouverez plus de 600 nouvelles et indicateurs financiers relatifs aux 13 plus grandes économies mondiales : États-Unis, Union Européenne, Japon, Royaume-Uni, Canada, Australie, Chine, entre autres. Les données pertinentes sont collectées à partir de sources publiques en temps réel.

    La nouvelle version propose des contenus mis à jour et des filtres d'événement avancés : par heure, par priorité, par devise et par pays.

    Les données du calendrier sont accessibles depuis les programmes MQL5. Veuillez voir ci-dessous pour les détails.




  2. Ajout du nouveau type d'applications MQL5 — les Services. Ce nouveau type permet de créer des flux de prix personnalisés pour le terminal, c’est-à-dire d’implémenter la livraison du prix depuis des systèmes externes en temps réel, tout comme il est implémenté sur les serveurs des courtiers.

    Contrairement aux Experts Advisors, aux indicateurs et aux scripts, les services ne sont pas liés à un graphique spécifique. Ces applications fonctionnent en arrière-plan et sont lancées automatiquement au démarrage du terminal (sauf si une telle application a été arrêtée de force).

    Les services peuvent être gérés à partir d'une nouvelle section de la fenêtre du Navigateur :





    Comment créer des services
    Pour créer un modèle de service, utilisez l'option MQL5 Wizard correspondante. Les services ont un point d'entrée Onstart, similaire aux scripts. A ce point, vous pouvez implémenter un cycle sans fin de réception et de traitement des données en utilisant des fonctions réseau.

    Comment lancer des services
    Pour exécuter plusieurs copies d'un Expert Advisor ou d'un indicateur avec différents paramètres, vous devez les lancer sur différents graphiques. Dans ce cas, différentes instances du programme sont créées, qui sont alors opérées indépendamment. Les services ne sont pas liés aux graphiques, donc un mécanisme spécial a été implémenté pour la création des instances de service.

    Sélectionnez un service depuis le Navigateur et cliqez sur "Ajouter le service" dans son menu contextuel. Une boîte de dialogue standard d'un programme MQL5, dans laquelle vous pouvez activer/désactiver le trading et l'accès aux signaux, ainsi que définir différents paramètres.




    Une instance de service peut être lancée et stoppée en utilisant le menu de l'instance correspondante. Pour gérer toutes les instances, utilisez le menu du service.

  3. Un programme d'apprentissage a été implémenté.

    La nouvelle fonctionnalité aidera les débutants à apprendre comment interagir avec la plateforme. Nous avons ajouté plus de 100 astuces interactives sur les principales fonctionnalités de la plateforme.

    • Les astuces sont affichées comme une barre de progression sur la barre d'outils et ne distraient donc pas l'utilisateur.
    • Les astuces n'apparaissent que pour les actions que vous n'avez jamais effectué dans la plateforme.
    • Toutes les astuces incluent des liens interactifs, grâce auxquels vous pouvez naviguer vers les éléments de l'interface. Par exemple, une boîte de dialogue de trading ou un menu avec le programme désiré peut être lancé directement depuis l'astuce.

    Le remplissage de la barre de progression augmentera à chaque fois que vous effectuez des actions correspondantes et que vous contiuez la formation.




  4. L'historique du compte de trading peut être présenté par positions. La plateforme collecte les données des transactions liées à la position (ouverture, augmentation du volume, clôture partielle ou totale) et groupe les informations dans un seul enregistrement. Vous pouvez donc accéder aux détails de la position : date et heure d'ouverture et de clôture, volume, prix et résultat. Cette forme plus efficace de présentation est maintenant disponible dans les rapports d'historique exportés vers les fichiers.




  5. Ajout d'une nouvelle API permettant de requêter les données du terminal MetaTrader 5 aux travers d'applications en utilisant le langage R.

    Nous avons préparé un package spécial de MetaTrader. Il contient les DLL pour les interactions entre R et le terminal MetaTrader 5, la documentation et les fichiers r auxiliaires. Nous terminons l'enregistrement du package dans le dépôt CRAN, à la suite de quoi il sera disponible en téléchargement et pour être installé.




    Le package peut être installé avec une commande spéciale :
    R CMD INSTALL --build MetaTrader

    Les commandes suivantes liées à la demande de données sont disponibles :

    • MT5Initialize initialise et établit une connexion avec le terminal MetaTrader 5. Si nécessaire, le terminal est lancé pendant l'exécution de la commande.
    • MT5Shutdown désinitialise et se déconnecte de MetaTrader 5.
    • MT5Version retourne la version du terminal MetaTrader 5.
    • MT5TerminalInfo retourne l'état et les paramètres de la connexion du terminal au serveur d'un courtier (numéro du compte et adresse du serveur).
    • MT5WaitTerminal attend la connexion du terminal MetaTrader 5 au serveur d'un courtier.
    • MT5CopyTicksFrom(symbol, from, count, flags) copie le nombre spécifié de ticks en commencant à la date spécifiée. La date est spécifiée en millisecondes depuis le 01.01.1970.
    • MT5CopyTicksRange(symbol, from, to, flags) copie les ticks depuis la période spécifiée. Les dates sont spécifiées en millisecondes depuis le 01.01.1970.
    • MT5CopyRatesFrom(symbol, timeframe, from, count) copie le nombre spécifié de barres 1-minute en commencant à la date spécifiée. La date est spécifiée en secondes depuis le 01.01.1970.
    • MT5CopyRatesFromPos(symbol, timeframe, start_pos, count) copie les barres 1-minute depuis la position spécifiée relativement à la dernière barre.
    • MT5CopyRatesFromRange(symbol, timeframe, date_from, date_to) copie les barres depuis la période spécifiée. Les dates sont spécifiées en secondes depuis le 01.01.1970.

    La liste des commandes supportées sera augmentée dans le futur.

  6. Optimisation de la boîte de dialogue Close By utilisée pour fermer une position par une position opposée. La boîte de dialogue n'est maintenant plus ralentie, même si vous avez un grand nombre de positions ouvertes.
  7. Correction des erreurs de calcul des symboles synthétiques, en raison desquelles les données pouvaient être occasionnellement ignorées.
  8. Lorsqu'un symbole personnalisé est supprimé, les fichiers stockant son historique des ticks et des barres sont également supprimés. Ceci évite d'accumuler des données non utilisées sur le disque dur.
  9. Correction de l'affichage des résultats de recherche sur les écrans à haute résolution.

MQL5

  1. Implémentation de l'accès aux données du calendrier économique depuis les programmes MQL5.

    Nouvelles fonctions

    CalendarCountryById — retourne la description d'un pays par son identifiant.
    bool CalendarCountryById(
       const long           country_id,    // identifiant du pays
       MqlCalendarCountry&  country        // description du pays
       );
    CalendarEventById — retourne la description d'un évènement par son identifiant.
    bool CalendarEventById(
       const long           event_id,      // identifiant de l'évènement
       MqlCalendarEvent&    event          // description de l'évènement
       );
    CalendarValueById — retourne le description de la valeur d'un évènement par son identifiant.
    bool CalendarValueById(
       const long           value_id,      // identifiant de la valeur
       MqlCalendarValue&    value          // description de la valeur
       );
    CalendarEventByCountry — retourne le tableau des évènements disponibles pour le pays.
    bool CalendarEventByCountry(
       string               country_code,  // code du pays
       MqlCalendarEvent&    events[]       // tableau d'évènements
       );
    CalendarEventByCurrency — retourne le tableau des évènements disponibles pour la devise affectée.
    bool CalendarEventByCurrency(
       string               currency,      // devise
       MqlCalendarEvent&    events[]       // tableau d'évènements
       );
    CalendarValueHistoryByEvent — retourne le tableau de valeurs pour la période de temps spécifiée, par identifiant d'évènement.
    bool CalendarValueHistoryByEvent(
       ulong                event_id,      // identifiant de l'évènement
       MqlCalendarValue&    values[],      // tableau de valeurs
       datetime             datetime_from, // date de début de période
       datetime             datetime_to=0  // date de fin de période
       );
    CalendarValueHistory — retourne le tableau de valeurs pour la période de temps spécifiée pour tous les évènements, filtrées par pays et/ou devise.
    bool CalendarValueHistory(
       MqlCalendarValue&    values[],          // tableau de valeurs
       datetime             datetime_from,     // début de période
       datetime             datetime_to=0,     // fin de période
       string               country_code=NULL, // code du pays
       string               currency=NULL      // devise
       );
    CalendarValueLastByEvent — retourne le tableau des valeurs des derniers évènements par identifiant. Cette fonction active la requête des valeurs qui sont apparues depuis la dernière requête. Le paramètre d'entrée/sortie "change_id" est en plus utilisé pour cette opération.

    Chaque fois que la base de données du calendrier change, la propriété "change_id" (l'identifiant du dernier changement) est mise à jour. Pendant la demande des données, vous spécifiez le "change_id" et le terminal retourne les évènements apparus après cette date, ainsi que la valeur courante du "change_id", qui peut être utilisée pour la prochaine requête. Au premier appel de fonction, spécifiez 0 comme "change_id" : la fonction ne retournera aucun évènement, mais retournera la valeur actuelle du "change_id" pour les demandes suivantes.
    bool CalendarValueHistory(
       ulong                event_id,          // identifiant de l'évènement
       ulong&               change_id,         // dernier change_id du calendrier
       MqlCalendarValue&    values[]           // tableau de valeurs
       );
    CalendarValueLast — retourne le tableau des dernières valeurs pour tous les évènements, filtrées par pays et/ou devise. Cette fonction active la requête des valeurs qui sont apparues depuis la dernière requête. De façon similaire à CalendarValueLastByEvent, la propriété "change_id" est utilisée pour la requête.
    bool CalendarValueHistory(
       ulong                event_id,          // identifiant de l'évènement
       ulong&               change_id,         // dernier change_id du calendrier
       MqlCalendarValue&    values[],          // tableau de valeurs
       string               country_code=NULL, // code du pays
       string currency=NULL                    // devise
       );

    Nouvelles structures

    MqlCalendarCountry — description du pays.
    struct MqlCalendarCountry
      {
       ulong             id;                        // identifiant du pays en ISO 3166-1
       string            name;                      // nom du pays
       string            code;                      // code du pays en ISO 3166-1 alpha-2
       string            currency;                  // code de la devise du pays
       string            currency_symbol;           // symbole/signe de la devise du pays
       string            url_name;                  // nom du pays dans les URL sur mql5.com
      };
    MqlCalendarEvent — description de l'évènement.
    struct MqlCalendarEvent
      {
       ulong                          id;           // identifiant de l'évènement
       ENUM_CALENDAR_EVENT_TYPE       type;         // type de l'évènement
       ENUM_CALENDAR_EVENT_SECTOR     sector;       // secteur auquel appartient l'évènement
       ENUM_CALENDAR_EVENT_FREQUENCY  frequency;    // fréquence de publication de l'évènement
       ENUM_CALENDAR_EVENT_TIMEMODE   time_mode;    // mode d'heure de publication de l'évènement
       ulong                          country_id;   // identifiant du pays
       ENUM_CALENDAR_EVENT_UNIT       unit;         // unité pour les valeurs de l'évènement
       ENUM_CALENDAR_EVENT_IMPORTANCE importance;   // importance de l'évènement
       ENUM_CALENDAR_EVENT_MULTIPLIER multiplier;   // multiplicateur de l'importance de l'évènement
       uint                           digits;       // nombre de décimales dans la valeur de l'évènement
       string                         source_url;   // URL source
       string                         event_code;   // code de l'évènement
       string                         name;         // texte de l'évènement dans la langue du terminal
      };
    MqlCalendarValue — description de la valeur de l'évènement.
    struct MqlCalendarValue
      {
       ulong             id;                        // identifiant de la valeur
       ulong             event_id;                  // identifiant de l'évènement
       datetime          time;                      // date et heure de l'évènement
       datetime          period;                    // période pour laquelle l'évènement est publié
       int               revision;                  // révision de l'indicateur publié en rapport avec la période de publication
       long              actual_value;              // valeur de l'évènement courant
       long              prev_value;                // valeur précédente de l'évènement
       long              revised_prev_value;        // valeur précédente révisée de l'évènement
       long              forecast_value;            // valeur prévue de l'évènement
       ENUM_CALENDAR_EVENT_IMPACRT impact_type;     // impact potentiel sur le taux de devise
      };

    Nouvelles énumérations

    enum ENUM_CALENDAR_EVENT_FREQUENCY
      {
       CALENDAR_FREQUENCY_NONE            =0,   // non utilisé
       CALENDAR_FREQUENCY_WEEK            =1,   // hebdomadaire
       CALENDAR_FREQUENCY_MONTH           =2,   // mensuel
       CALENDAR_FREQUENCY_QUARTER         =3,   // trimestriel
       CALENDAR_FREQUENCY_YEAR            =4,   // annuel
       CALENDAR_FREQUENCY_DAY             =5,   // quotidien
      };
    
    enum ENUM_CALENDAR_EVENT_TYPE
      {
       CALENDAR_TYPE_EVENT                =0,   // évènement (réunion, discours, etc.)
       CALENDAR_TYPE_INDICATOR            =1,   // indicateur
       CALENDAR_TYPE_HOLIDAY              =2,   // vacances
      };
    
    enum ENUM_CALENDAR_EVENT_SECTOR
      {
       CALENDAR_SECTOR_NONE               =0,   // aucun
       CALENDAR_SECTOR_MARKET             =1,   // marché
       CALENDAR_SECTOR_GDP                =2,   // PIB
       CALENDAR_SECTOR_JOBS               =3,   // emplois
       CALENDAR_SECTOR_PRICES             =4,   // prix
       CALENDAR_SECTOR_MONEY              =5,   // monnaie
       CALENDAR_SECTOR_TRADE              =6,   // commerce
       CALENDAR_SECTOR_GOVERNMENT         =7,   // gouvernement
       CALENDAR_SECTOR_BUSINESS           =8,   // affaires
       CALENDAR_SECTOR_CONSUMER           =9,   // consommateur
       CALENDAR_SECTOR_HOUSING            =10,  // logements
       CALENDAR_SECTOR_TAXES              =11,  // taxes
       CALENDAR_SECTOR_HOLIDAYS           =12,  // vacances
      };
      
    enum ENUM_CALENDAR_EVENT_IMPORTANCE
      {
       CALENDAR_IMPORTANCE_LOW            =0,   // aucune
       CALENDAR_IMPORTANCE_NONE           =1,   // basse
       CALENDAR_IMPORTANCE_MODERATE       =2,   // modérée
       CALENDAR_IMPORTANCE_HIGH           =3,   // haute
      };
    
    enum ENUM_CALENDAR_EVENT_UNIT
      {
       CALENDAR_UNIT_NONE                 =0,   // aucune
       CALENDAR_UNIT_PERCENT              =1,   // pourcentage
       CALENDAR_UNIT_CURRENCY             =2,   // devise nationale
       CALENDAR_UNIT_HOUR                 =3,   // nombre d'heures
       CALENDAR_UNIT_JOB                  =4,   // nombre d'emplois
       CALENDAR_UNIT_RIG                  =5,   // nombre de plateformes
       CALENDAR_UNIT_USD                  =6,   // dollar US
       CALENDAR_UNIT_PEOPLE               =7,   // nombre de personnes
       CALENDAR_UNIT_MORTGAGE             =8,   // nombre d'hypothèques
       CALENDAR_UNIT_VOTE                 =9,   // nombre de votes
       CALENDAR_UNIT_BARREL               =10,  // nombre de barils
       CALENDAR_UNIT_CUBICFEET            =11,  // volume en pieds cubes
       CALENDAR_UNIT_POSITION             =12,  // nombre d'offres d'emplois
       CALENDAR_UNIT_BUILDING             =13   // nombre d'immeubles
      };
      
    enum ENUM_CALENDAR_EVENT_MULTIPLIER
      {
       CALENDAR_MULTIPLIER_NONE           =0,   // aucun    
       CALENDAR_MULTIPLIER_THOUSANDS      =1,   // milliers
       CALENDAR_MULTIPLIER_MILLIONS       =2,   // millions
       CALENDAR_MULTIPLIER_BILLIONS       =3,   // milliards
       CALENDAR_MULTIPLIER_TRILLIONS      =4,   // milliards 
      };
      
    enum ENUM_CALENDAR_EVENT_IMPACRT
      {
       CALENDAR_IMPACT_NA                 =0,   // non disponible
       CALENDAR_IMPACT_POSITIVE           =1,   // positif
       CALENDAR_IMPACT_NEGATIVE           =2,   // négatif
      };
    
    enum ENUM_CALENDAR_EVENT_TIMEMODE
      {
       CALENDAR_TIMEMODE_DATETIME         =0,   // la source publie l'heure exacte
       CALENDAR_TIMEMODE_DATE             =1,   // l'évènement est sur la journée entière
       CALENDAR_TIMEMODE_NOTIME           =2,   // la source ne publie pas l'heure de l'évènement
       CALENDAR_TIMEMODE_TENTATIVE        =3,   // la source ne fournit que la date, et pas l'heure exacte en avance, l'heure exacte n'est ajoutée qu'après la survenue de l'évènement
      };

    Nouveaux codes d'erreurs

    ERR_CALENDAR_MORE_DATA             =5400,   // le tableau est trop petit pour le résultat entier (les valeurs qui tiennent dans le tableau sont passées)
    ERR_CALENDAR_TIMEOUT               =5401,   // time out suite à l'attente d'une réponse à la requête des données du calendrier
    ERR_CALENDAR_NO_DATA               =5402,   // données non trouvées

  2. Corrections et améliorations de la vitesse d'exécution liées à l'historique des ticks et des barres.
  3. Corrections et améliorations de la vitesse d'exécution liées aux fonctions de modification de l'historique des ticks et des barres des symboles personnalisés de trading, aux fonctions CustomTicks* et aux fonctions CustomRates*.
  4. Nouvelles fonctions de conversion de données.

    CharArrayToStruct copie un tableau de uchar dans une structure POD.
    bool  CharArrayToStruct(
       void&         struct_object,    // structure
       const uchar&  char_array[],     // tableau
       uint          start_pos=0       // position de départ dans le tableau
       );
    StructToCharArray copie une structure POD dans un tableau de uchar.
    bool  StructToCharArray(
       const void&  struct_object,     // structure
       uchar&       char_array[],      // tableau
       uint         start_pos=0        // position de départ dans le tableau
       );

  5. Ajout de la fonction MathSwap pour changer l'ordre des octets dans les valeurs ushort, uint et ulong.
    ushort MathSwap(ushort value);
    uint   MathSwap(uint   value);
    ulong  MathSwap(ulong  value);

  6. Ajout des fonctions réseau pour créer des connexions TCP vers des hôtes distants via des sockets système :

    • SocketCreate crée une socket avec les flags spécifiés et retourne son handle
    • SocketClose ferme la socket
    • SocketConnect connecte au serveur, avec un contrôle du délai
    • SocketIsConnected vérifie si la socket est actuellement connectée
    • SocketIsReadable retourne le nombre d'octets pouvant être lus sur la socket
    • SocketIsWritable vérifie s'il est possible d'écrire actuellement des données sur la socket
    • SocketTimeouts définit les timeouts de réception et d'envoi des données pour l'objet socket système
    • SocketRead lit les données sur la socket
    • SocketSend écrit des données sur une socket
    • SocketTlsHandshake initie une connexion sécurisée TLS (SSL) avec l'hôte spécifié en utilisant le protocole TLS Handshake
    • SocketTlsCertificate reçoit les informations concernant le certificat utilisé pour la connexion sécurisée au réseau
    • SocketTlsRead lit les données depuis une connexion TLS sécurisée
    • SocketTlsReadAvailable lit toutes les données disponibles depuis une connexion TLS sécurisée
    • SocketTlsSend envoie les données en utilisant une connexion TLS sécurisée

    L'adresse de l'hôte, auquel la connexion avec les fonctions réseau est établie, doit être ajoutée explicitement à la liste des adresses autorisées dans les paramètres du terminal.

    De nouveaux codes d'erreurs ont été ajoutés pour l'utilisation des fonctions réseau :

    • ERR_NETSOCKET_INVALIDHANDLE (5270) : handle de socket invalide passé à la fonction
    • ERR_NETSOCKET_TOO_MANY_OPENED (5271) : trop de sockets ouvertes (maximum 128)
    • ERR_NETSOCKET_CANNOT_CONNECT (5272) : erreur de connexion à l'hôte distant
    • ERR_NETSOCKET_IO_ERROR (5273) : erreur d'envoi/de réception des données de la socket
    • ERR_NETSOCKET_HANDSHAKE_FAILED (5274) : erreur d'établissement de la connexion sécurisée (TLS Handshake)
    • ERR_NETSOCKET_NO_CERTIFICATE (5275) — aucune donnée sur le certificat utilisé pour la connexion sécurisée

  7. Ajout de nouvelles fonctions pour l'utilisation des string :

    StringReserve réserve un buffer mémoire de la taille spécifiée pour une string.
    bool  StringReserve(
       string&        string_var,          // string
       uint           new_capacity         // taille de buffer pour la string
       );
    StringSetLength définit la longueur de chaîne spécifiée en caractères.
    bool  StringSetLength(
       string&        string_var,          // string
       uint           new_length           // nouvelle longueur de la chaîne
       );

  8. Ajout d'une nouvelle fonction pour l'utilisation des tableaux :

    ArrayRemove supprime d'un tableau le nombre spécifié d'éléments en commencant à l'indice spécifié.
    bool  ArrayRemove(
       void&         array[],              // tableau de n'importe quel type
       uint          start,                // indice de départ de la suppression
       uint          count=WHOLE_ARRAY     // nombre d'éléments
       );
    ArrayInsert insère dans un tableau destination le nombre spécifié d'éléments du tableau source, en commencant à l'indice spécifié.
    bool  ArrayInsert(
       void&         dst_array[],          // tableau destination
       const void&   src_array[],          // tableau source
       uint          dst_start,            // indice dans le tableau destination où commencer l'insertion
       uint          src_start=0,          // indice dans le tableau source pour commencer la copie
       uint          count=WHOLE_ARRAY     // nombre d'éléments insérés
       );
    ArrayReverse inverse dans un tableau le nombre spécifié d'éléments en commencant à l'indice spécifié.
    bool  ArrayReverse(
       void&         array[],              // tableau de n'importe quel type
       uint          start=0,              // indice de début d'inversion
       uint          count=WHOLE_ARRAY     // nombre d'éléments
       );

  9. Nouveau paramètre "uint count" ajouté dans les fonctions CustomRatesUpdate, CustomRatesReplace, CustomTicksAdd et CustomTicksReplace. Il permet de spécifié le nombre d'éléments du tableau passé, qui seront utilisés pour ces fonctions. La valeur WHOLE_ARRAY est utilisée par défaut pour le paramètre. Cela signifie que le tableau entier sera utilisé.
  10. Ajout de la fonction CustomBookAdd pour passer le statut du Depth of Market pour un symbole personnalisé. La fonction permet de diffuser le Depth of Market comme si les prix arrivaient du serveur du courtier.
    int  CustomBookAdd(
       const string        symbol,            // symbol name
       const MqlBookInfo&  books[]            // an array with the DOM elements descriptions
       uint                count=WHOLE_ARRAY  // nombre d'éléments to be used
       );
  11. Ajout de la surcharge de la fonction CustomSymbolCreate. Ceci permet la création d'un symbole de trading personnalisé à partir d'un symbole existant. Après la création, toute propriété du symbole peut être modifiée avec les fonctions correspondantes.
    bool  CustomSymbolCreate(
       const string        symbol_name,       // nom du symbole personnalisé
       const string        symbol_path="",    // nom du groupe dans lequel le symbole sera créé
       const string        symbol_origin=NULL // nom du symbole à partir duquel le symbole personnalisé sera créé
       );
    Le nom du symbole, à partir duquel les propriétés du symbole personnalisé seront copiées, sera spécifié dans le paramètre "symbol_origin".

  12. La fonction StringToTime convertissant la string contenant une date/heure en une valeur de type datetime a été mise à jour. Elle supporte maintenant les formats de date suivants :

    • aaaa.mm.jj [hh:mi]
    • aaaa.mm.jj [hh:mi:ss]
    • aaaammjj [hh:mi:ss]
    • aaaammjj [hhmiss]
    • aaaa/mm/jj [hh:mi:ss]
    • aaaa-mm-jj [hh:mi:ss]

  13. Nouvelle propriété TERMINAL_VPS dans l'énumération ENUM_TERMINAL_INFO_INTEGER ; elle montre que le terminal est en cours d'exécution sur le serveur d'Hébergement Virtuel MetaTrader (MetaTrader VPS). Si une application est en cours de fonctionnement sur un serveur d'hebergement, vous pouvez désactiver toutes ses fonctions visuelles, car le serveur virtuel n'a pas d'interface graphique utilisateur.
  14. Nouvelle propriété SYMBOL_EXIST dans l'énumération ENUM_SYMBOL_INFO_INTEGER, signifie que le symbole derrière ce nom existe.
  15. Correction de la saisie lors de l'utilisation des pré-déclarations des modèles de fonctions.
  16. Ajout de la réinitialisation des indicateurs lors du changement du compte de trading.
  17. Optimisation de la fonction StringSplit.
  18. Correction d'erreurs dans l'utilisation de la bibliothèque standard.

Tester

  1. Ajout de la fonction TesterStop — routine de fermeture prématurée d'un Expert Advisor sur un agent de test. Vous pouvez maintenant forcer la fin du test après avoir atteint le nombre spécifié de trades perdants, un niveau de drawdown prédéfini ou n'importe quel autre critère.

    Un test terminé avec cette fonction est considéré comme réussi. Après l'appel de la fonction, l'historique de trading obtenu pendant le test et toutes les statistiques de trades sont passés au terminal.

  2. Désactivation de la possibilité de tester et d'optimiser les Expert Advisors via le MQL5 Cloud Network en mode de ticks réels. Ce mode ne peut être utilisé que sur les agents locaux et les fermes locales de réseaux.
  3. Utilisation améliorée des indicateurs pendant un test visuel. Le graphique des prix et les lignes de l'indicateur sont maintenant dessinés de façon synchrone, même pour la vitesse maximum de visualisation.
  4. Optimisation et accélération significative du test et de l'optimisation.
  5. Correction du déboguage des indicateurs sur les données historiques. Maintenant, les fonctions OnInit et OnDeinit de l'indicateur peuvent être déboguée correctement.
  6. Accès plus rapide aux données historiques lors du test des Expert Advisors multi-devises.
  7. Correction du gel occasionnel du testeur visuel pendant le déboguage sur les données historiques.
  8. Démarrage plus rapide des passes d'optimisation lors du traitement d'un ensemble de tâches par un agent.
  9. Changement de la politique de distribution des ensembles de tâches vers les agents de test. La taille de l'ensemble a été augmentée et la consommation de ressources par les opérations réseau a été réduite significativement.
  10. Changement du comportement des options permettant l'utilisation des agents locaux, du réseau et du cloud. Vous pouvez maintenant désactiver ces options, les agents complètement le traitement des tâches reçues, tandis qu'aucune nouvelle tâche ne leur est envoyée. Dans les versions précédentes, le comportement était similaire à la commande "Désactiver", qui stoppait immédiatement l'exécution de l'agent.




MetaEditor

  1. Ajout du support des caractères non-ANSI dans le débogueur. Les expressions sont maintenant affichées correctement même si le nom de la variable est en cyrillique.
  2. Correction de l'affichage des résultats de recherche sur les écrans haute résolution.

Ajout de la traduction de l'interface utilisateurs en croate.

La documentation a été mise à jour.

26 octobre 2018
Nouveau MetaTrader 5 1930: Feêtres de graphique flottantes et bibliothèques .Net en MQL5

Terminal

  1. Vous pouvez maintenant détacher les graphiques des symboles financiers de la fenêtre du terminal de trading.

    Cette fonctionnalité est pratique lors de l'utilisation de plusieurs écrans. Vous pouvez donc placer la fenêtre principale de la plateforme sur un écran pour contrôler l'état de votre compte, et placer vos graphiques sur un deuxième écran pour surveiller la situation du marché. Pour détacher un graphique du terminal, désactivez l'option Ancré dans son menu contextuel. Après cela, déplacez le graphique sur l'écran désiré.





    Une barre d'outils séparée sur les graphiques détachés permet d'appliquer les objets d'analyse et les indicateurs sans avoir à basculer d'écran. Utilisez le menu contextuel de la barre d'outil pour déterminer les commandes disponibles ou pour les cacher.

  2. Mise à jour complète des chats intégrés. Ils supportent maintenant les conversations de groupe et les chaînes. Conduisez des discussions privées avec un groupe de personnes dans un environnement unifié sans basculer entre différentes fenêtres et créer des chaînes suivant vos intérêts et vos langues. Communiquez avec vos collègues et avec vos amis de la MQL5.community sans visiter le site web.

    Les chats de groupes et les chaînes peuvent être publics ou privés. Leurs créateurs décident s'il est possible de les rejoindre gratuitement ou seulement sur invitation. Vous pouvez également assigner des modérateurs aux chaînes et aux chats pour un contrôle supplémentaire des communications.




  3. Ajout du support de la précision étendue du volume pour le trading des cryptomonnaies. Le volume minimum possible des opérations de trading est maintenant 0,00000001 lots. Le market depth, le time and sales, ainsi que d'autres éléments de l'interface comporte maintenant la possibilité d'afficher les volumes jusqu'à 8 décimales.

    Le volume minimal et son pas de change dépend des paramètres de l'instrument financier du côté du courtier.




  4. Ajout de l'onglet des articles publiés sur la MQL5.community dans la fenêtre Boîte à Outils. Plus de 600 articles détaillés sur le développement de stratégies de trading en MQL5 sont maintenant disponibles directement dans le terminal. De nouveaux articles sont publiés chaque semaine.




  5. Ajout du support de l'authentification étendue grâce aux certificats lors de l'utilisation de Wine.
  6. Correction de l'affichage du market depth lorsqu'il est limité à un seul niveau.
  7. Ajout de la commande "Sauvegarder Comme Image" dans la barre d'outils Standard. Il est maintenant beaucoup plus facile de prendre des images des graphiques et de les partager avec la communauté.




  8. Correction de l'application du décalage du temps lors de l'import des barres et des ticks. Auparavant, le décalage n'était pas appliqué dans tous les cas.




  9. Correction du gel du terminal en case de grande quantité de nouvelles du calendrier économique.

MQL5

  1. Ajout du support natif pour les bibliothèques .NET avec import "intelligent" des fonctions. Les bibliothèques .NET peuvent maintenant être utilisées sans écrire de wrappers spéciaux — MetaEditor s'en occupe.

    Pour utiliser les fonctions des bibliothèques .NET, importez simplement la DLL sans définir de fonctions spécifiques. MetaEditor importe automatiquement toutes les fonctions utilisables :
    • Structures simples (POD, plain old data) — structures qui ne contiennent que des types de données simples.
    • Fonctions statiques publiques ayant des paramètres, dans lesquelles seuls des types simples et des structures POD, ou leurs tableaux, sont utilisés.

    Pour appeler des fonctions de la bibliothèque, il suffit de l'importer :
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| Fonction de lancement du programme                               |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    Le code C# de la fonction Inc de TestClass ressemble à :
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    Le script retourne la valeur 42 comme résultat de l'exécution.

    Le travail sur le support des bibliothèques .NET continue. Leurs fonctionnalités seront étendues dans le futur.

  2. Ajout du support pour l'utilisation des fonctions WinAPI de la Bibliothèque Standard. Il n'est maintenant plus nécesaire d'importer les bibliothèques manuellement et de décrire les signatures des fonctions pour utiliser les fonctions du système d'exploitation dans un programme MQL5. Incluez simplement le fichier d'en-tête depuis le répertoire MQL5\Include\WinAPI.

    Les fonctions WinAPI sont regroupées dans des fichiers séparés suivant leur utilisation :

    • libloaderapi.mqh — utilisation des ressources
    • memoryapi.mqh — utilisation de la mémoire
    • processenv.mqh — utilisation de l'environnement
    • processthreadsapi.mqh — utilisation des processes
    • securitybaseapi.mqh — utilisation du système de sécurité du système d'exploitation
    • sysinfoapi.mqh — obtention d'informations du système
    • winbase.mqh — fonctions communes
    • windef.mqh — constantes, structures et énumérations
    • wingdi.mqh — utilisation des objets graphiques
    • winnt.mqh — utilisation des exceptions
    • winreg.mqh — utilisation du registre
    • winuser.mqh — utilisation des fenêtres et des interfaces
    • errhandlingapi.mqh — gestion des erreurs
    • fileapi.mqh — utilisation des fichiers
    • handleapi.mqh — utilisation des handles
    • winapi.mqh — pour inclure toutes les fonctions (fichiers en-tête WinAPI)

    Le lien ne fonctionne que sur les architectures 64 bits.

  3. Ajout du support des spécificateurs inline, __inline et __forceinline lors du parsing du code. La présence des spécificateurs dans le code ne cause aucune erreur et n'affecte pas la compilation. Pour l'instant, cette fonctionnalité simplifie le transfert de code C++ en MQL5.
    Obtenez plus d'informations sur les spécificateurs dans MSDN.

  4. Optimisation significative de l'exécution des programmes MQL5. Dans certains cas, l'amélioration des performances peut atteindre 10%. Recompilez vos programmes avec la nouvelle version de MetaEditor pour les rendre plus rapides.
    Malheureusement, les nouveaux programmes ne seront plus compatibles avec les versions précédentes du terminal en raison de cette nouvelle optimisation. Les programmes compilés avec MetaEditor version 1912 et supérieurs ne peuvent pas être lancés dans les terminaux de version inférieure à 1912. Les programmes compilés dans les versions précédentes de MetaEditor fonctionnent dans les nouveaux terminaux.

  5. Optimisation significative de plusieurs fonctions MQL5.
  6. Ajout de nouvelles propriétés pour attacher/détacher des graphiques de la fenêtre principale du terminal et pour gérer leur position.

    Ajout des propriétés suivantes dans l'énumération ENUM_CHART_PROPERTY_INTEGER :

    • CHART_IS_DOCKED — la fenêtre du graphique est ancrée. Si elle est mise à 'false', le graphique peut être déplacé en dehors de la zone du terminal.
    • CHART_FLOAT_LEFT — la coordonnée gauche de la fenêtre détachée du graphique relativement à l'écran virtuel.
    • CHART_FLOAT_TOP — la coordonnée supérieure de la fenêtre détachée du graphique relativement à l'écran virtuel.
    • CHART_FLOAT_RIGHT — la coordonnée droite de la fenêtre détachée du graphique relativement à l'écran virtuel.
    • CHART_FLOAT_BOTTOM — la coordonnée inférieure de la fenêtre détachée du graphique relativement à l'écran virtuel.

    Ajout des fonctions suivantes dans l'énumération ENUM_TERMINAL_INFO_INTEGER :

    • TERMINAL_SCREEN_LEFT — la coordonnée gauche de l'écran virtuel. Un écran virtuel est un rectangle couvrant tous les écrans. Si le système a 2 écrans ordonnés de droite à gauche, alors la coordonnée gauche de l'écran virtuel peut être sur la bordure des 2 écrans.
    • TERMINAL_SCREEN_TOP — la coordonnée supérieure de l'écran virtuel.
    • TERMINAL_SCREEN_WIDTH — la largeur du terminal.
    • TERMINAL_SCREEN_HEIGHT — la hauteur du terminal.
    • TERMINAL_LEFT — la coordonnée gauche du terminal relativement à l'écran virtuel.
    • TERMINAL_TOP — la coordonnée supérieure du terminal relativement à l'écran virtuel.
    • TERMINAL_RIGHT — la coordonnée droite du terminal relativement à l'écran virtuel.
    • TERMINAL_BOTTOM — la coordonnée inférieure du terminal relativement à l'écran virtuel.

  7. Ajout du champ volume_real dans les structures MqlTick et MqlBookInfo. Il est conçu pour utiliser les volumes avec une précision étendue. La valeur volume_real a une priorité supérieure à 'volume'. Le serveur utilisera cette valeur si elle est spécifiée.
    struct MqlTick
      {
       datetime         time;            // Heure de mise à jour du prix Last
       double           bid;             // Prix Bid actuel
       double           ask;             // Prix Ask actuel
       double           last;            // Prix actuel de la dernière transaction
       ulong            volume;          // Volume du prix Last actuel
       long             time_msc;        // Heure de mise à jour du prix Last en millisecondes
       uint             flags;           // Flags du tick
       double           volume_real;     // Volume du prix Last actuel avec une précision étendue
      };
    struct MqlBookInfo
      {
       ENUM_BOOK_TYPE   type;            // type d'ordre de l'énumération ENUM_BOOK_TYPE
       double           price;           // prix
       long             volume;          // volume
       double           volume_real;     // volume avec précision étendue
      };

  8. Ajout de nouvelles propriétés à l'énumération ENUM_SYMBOL_INFO_DOUBLE :

    • SYMBOL_VOLUME_REAL — le volume de la dernière transaction exécutée ;
    • SYMBOL_VOLUMEHIGH_REAL — le plus grand volume de transaction du jour courant ;
    • SYMBOL_VOLUMELOW_REAL — le plus petit volume de transaction du jour courant.

    Utilisez la fonction SymbolInfoDouble pour récupérer ces propriétés.

  9. Ajout de la propriété MQL_FORWARD à l'énumération ENUM_MQL_INFO_INTEGER — flag du mode de test avancé.
  10. Ajout de la propriété pack( valeur_entière ) pour les structures. Elle vous permet de définir l'alignement dans l'arrangement des champs dans une structure, ce qui peut être nécessaire lors de l'utilisation de DLL. Les valeurs 1, 2, 4, 8 et 16 sont possible pour le champ valeur_entière.
    Si la propriété n'est pas définie, l'alignement par défaut de 1 octet est utilisé — pack(1).

    Exemple d'utilisation :
    //+------------------------------------------------------------------+
    //| Alignement par défaut                                            |
    //+------------------------------------------------------------------+
    struct A
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Alignement spécifié                                              |
    //+------------------------------------------------------------------+
    struct B pack(4)
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| Fonction de lancement du programme                               |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print("sizeof(A)=",sizeof(A));
       Print("sizeof(B)=",sizeof(B));
      }
    //+------------------------------------------------------------------+
    Conclusion :
    sizeof(A)=5
    sizeof(B)=8
    Obtenez plus d'informations sur l'alignement dans les structures dans MSDN.

  11. Assouplissement des exigences pour le cast des énumérations. Dans le cas d'un casting implicite, le compilateur substitue automatiquement la valeur de l'énumération correcte et affiche un avertissement.

    Pour le code suivant :
    enum Main
      {
       PRICE_CLOSE_,
       PRICE_OPEN_
      };
    
    input Main Inp=PRICE_CLOSE;
    //+------------------------------------------------------------------+
    //| Fonction de lancement                                            |
    //+------------------------------------------------------------------+
    void OnStart()
      {
      }
    Le compilateur affiche l'avertissement suivant :
    implicit conversion from 'enum ENUM_APPLIED_PRICE' to 'enum Main'
    'Main::PRICE_OPEN_' instead of 'ENUM_APPLIED_PRICE::PRICE_CLOSE' will be used
    Auparavant, l'erreur suivante était générée dans ce cas :
    'PRICE_CLOSE' - cannot convert enum
    Le compilateur affichera toujours l'erreur si les énumérations ne sont pas utilisées correctement dans les paramètres d'une fonction.

  12. Correction de la compilation des templates de fonctions. Maintenant, lors de l'utilisation de templates de fonctions surchargés, seule la surcharge nécessaire sera instanciée, au lieu de toutes les surcharges existantes.
    class X {  };
    
    void f(int)  {  }
      
    template<typename T>
    void a(T*) { new T(2); }  // le compilateur générait l'erreur ici auparavant
      
    template<typename T>
    void a()  { f(0); }
      
      
    void OnInit()  { a<X>(); }  

  13. Optimisation de certains cas d'accès à l'historique des tick avec les fonctions CopyTicks*.
  14. Ajout de la nouvelle fonction TesterStop permettant une fin prématurée d'une passe de test/d'optimisation. Lorsqu'elle est appelée, les statistiques complètes du trading et le résultat de OnTester sont passés au terminal client, comme lors d'une fin normale d'un test ou d'une optimisation.
  15. Ajout de la nouvelle propriété #property tester_everytick_calculate pour les indicateurs personnalisés. Elle est utilisée dans le strategy tester et permet de forcer le calcul de l'indicateur à chaque tick.

Tester

  1. Maintenant, dans le cas d'un test ou d'une optimisation non visuelle, tous les indicateurs utilisés (standards et personnalisés) ne sont calculés que lors d'une demande de données. Seuls les indicateurs contenant des appels à la fonction EventChartCustom et appliquant la fonction OnTimer restent inchangés. Auparavant, tous les indicateurs étaient calculés sans condition dans le strategy tester à chaque tick entrant (même pour d'autres instruments). La nouvelle fonctionnalité accélère de façon significative le test et l'optimisation.

    Pour activer le calcul forcé de l'indicateur à chaque tick, ajoutez la propriété #property tester_everytick_calculate pour le programme.
    Les indicateurs compilés avec les versions précédentes du compilateur restent calculé comme avant — à chaque tick.

  2. Correction du calcul de la précision de la devise du dépôt lors d'un test/d'une optimisation et lors de la génération des rapports correspondants.
  3. Optimisation et accélèration du fonctionnement du strategy tester.
  4. Correction de quelques erreurs de test et d'optimisation.

MetaEditor

  1. Correction de la recherche sur mots entiers. L'underscore est maintenant considéré comme un caractère normal plutôt que comme délimiteur de mot lors d'une recherche.

Mise à jour de la documentation.

26 juin 2018
MetaTrader 5 build 1870 : Ajout de symboles dans le Market Watch par ISIN

Terminal

  1. La recherche des symboles de trading par ISIN (International Securities Identification Number) a été ajoutée dans la fenêtre du Market Watch. Vous pouvez maintenant ajouter des symboles de 3 façons : par nom, description et ISIN.




  2. Correction du ralentissement de l'interface utilisateur lors du changement du mot de passe du compte de trading.
  3. Correction de l'augmentation de charge occasionnelle du CPU causée par le terminal client.

MQL5

  1. Correction du passage d'en-tête HTTP personnalisés dans la fonction WebRequest.
  2. Correction du comportement de la fonction Bars dans les cas où les dates de début et de fin de l'intervalle sont les mêmes. S'il y a une barre, la fonction retourne maintenant 1. Dans les versions précédentes, la fonction retournait 0 de façon inconditionnelle.

Tester

  1. Correction du lancement d'un test en mode visuel après une optimisation avancée.
  2. Correction du tri des résultats d'optimisation. Le tri prend maintenant en compte les passes avec des paramètres d'entrée incorrects (INIT_INCORRECT_PARAMETERS) et celles n'ayant pas de facteur de profit.
  3. Correction du recalcul du graphique de l'optimisation génétique après le changement du critère d'optimisation.

La documentation a été mise à jour.

15 juin 2018
MetaTrader 5 build 1860 : Fonctions MQL5 pour utiliser les barres et améliorations du Strategy Tester

Terminal

  1. La boîte de dialogue d'ouverture de compte a été complétement repensée. Vous pouvez maintenant sélectionner un courtier dans la liste et ensuite choisir le type de compte désiré. Cette mise à jour permet de réduire la liste des courtiers, puisqu'elle ne contient maintenant que les noms des sociétés au lieu de tous les serveurs disponibles.

    Les logos des compagnies sont également affichés dans la liste pour rendre la recherche plus facile et plus efficace. Si le courtier désiré n'apparaît pas dans la liste, tapez le nom de la société ou l'adresse du serveur dans la barre de recherche et cliquez sur "Trouver votre courtier".




    Les descriptions des types de comptes ont été ajoutées dans la boîte de dialogue pour aider les débutants à choisir le bon compte. Pour être alignés avec le General Data Protection Regulation (GDPR), la nouvelle boîte de dialogue peut contenir des liens vers leurs accords et politiques de protection des données :




    Les possibilités d'ouverture de comptes réels ont été étendues de façon significative. La fonctionnalité de chargement des documents de confirmation de l'identité et de l'adresse, qui était auparavant disponible dans les terminaux mobiles, est maintenant disponible dans la version de bureau. Désormais, les courtiers réglementés MiFID peuvent demander toutes les données d'identification de client requises, y compris des informations sur l'emploi, le revenu, l'expérience de trading, etc. La nouvelle fonctionnalité aidera les traders à ouvrir des comptes réels plus rapidement et plus facilement, sans procédure bureaucratique inutile.



  2. L'historique des transactions affiche maintenant les valeurs du Stop Loss et du Take Profit. Les valeurs des Stop Loss et Take Profit pour les transactions d'entrée et de renversement sont définies selon les Stop Loss et Take Profit des ordres qui ont initiés ces transactions. Les valeurs du Stop Loss et du Take Profit des positions correspondantes au moment de la clôture de la position sont utilisées pour les transactions de sortie. Ces dernières permettent d'enregistrer et de montrer les informations des Stop Loss et Take Profit d'une position au moment de sa fermeture. Cette information n'était pas stockée dans les versions antérieures, puisque les positions disparaissent après la fermeture, tandis que l'historique des positions dans le terminal est généré en fonction des transactions.




  3. L'historique des positions affiche maintenant les valeurs du Stop Loss et du Take Profit. Les valeurs des Stop Loss et Take Profit des transactions qui ont ouvert et fermer les positions correspondantes sont spécifiées pour ces positions.




  4. Le volume actuel des ordres en attente est maintenant affiché sur le graphique au lieu du volume demandé initialement.



  5. Le terminal mis à jour offre un rendu optimisé et plus rapide de la fonction Market Depth en mode étendu avec l'affichage du spread activé.
  6. Le traitement des résultats d'exécution d'une demande de trade a été optimisé. Cette optimisation permet un traitement bien plus rapide dans certains cas.
  7. Correction d'une erreur dans l'opération Trailing Stop, qui pouvait occasionnellement entraîner l'envoi de plusieurs demandes de modification du Stop Loss pour la même position..
  8. Correction du réglage du volume minimum et maximum, ainsi que du pas de volume dans les paramètres des symboles personnalisés.
  9. Correction d'une erreur, à cause de laquelle l'option "Echelle Fixe" pouvait être ignorée, lors de l'application d'un template au graphique du symbole.
  10. Correction d'une accumulation incorrecte occasionnelle de l'historique des ticks.

MQL5

  1. La vitesse d'exécution des applications MQL5 a été améliorée grâce à une optimisation supplémentaire du code source pendant la compilation. Recompilez vos programmes avec la nouvelle version de MetaEditor pour les faire s'exécuter plus rapidement.
    Malheureusement, les nouveaux programmes ne seront pas compatibles avec les précédentes versions du terminal en raison de cette optimisation supplémentaire. Les programmes compilés dans MetaEditor version 1855 et supérieur ne peuvent pas être lancés dans les terminaux des versions inférieures à 1855. Les programmes compilés dans les versions précédentes de MetaEditor peuvent s'exécuter sur les nouveaux terminaux.

  2. Nouvelles fonctions : iTime, iOpen, iHigh, iLow, iClose, iVolume, iBars, iBarShift, iLowest, iHighest, iRealVolume, iTickVolume, iSpread. Ces fonctions sont similaires à celles utilisées en MQL4. Les fonctions permettent un transfert plus facile du code des applications de trading vers la plateforme de 5ème génération.

    Auparavant, la plupart des tâches effectuées avec ces fonctions pouvaient être implémentées avec les fonctions Copy*. Cependant, les utilisateurs devaient implémenter leurs propres fonctions pour trouver les valeurs High/Low sur le graphique et pour rechercher les barres suivant leur date et heure. Maintenant, ces tâches peuvent être exécutées facilement avec les fonctions iHighest, iLowest et iBarShift.

    iTime
    Retourne l'heure d'ouverture (Open) de la barre (indiquée par le paramètre 'shift') sur le graphique correspondant.
    datetime  iTime(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              shift            // Décalage
       );

    iOpen
    Retourne le prix d'ouverture (Open) de la barre (indiquée par le paramètre 'shift') sur le graphique correspondant.
    double  iOpen(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              shift            // Décalage
       );

    iHigh
    Retourne le prix High de la barre (indiquée par le paramètre 'shift') sur le graphique correspondant.
    double  iHigh(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              shift            // Décalage
       );

    iLow
    Retourne le prix Low de la barre (indiquée par le paramètre 'shift') sur le graphique correspondant.
    double  iLow(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              shift            // Décalage
       );

    iClose
    Retourne le prix de clôture (Close) de la barre (indiquée par le paramètre 'shift') sur le graphique correspondant.
    double  iClose(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              shift            // Décalage
       );

    iVolume
    Retourne le volume des ticks de la barre (indiquée par le paramètre 'shift') sur le graphique correspondant.
    long  iVolume(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              shift            // Décalage
       );

    iBars
    Retourne le nombre de barres du symbole et de la période correspondants, disponible dans l'historique.
    int  iBars(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe        // Période
       );

    iBarShift
    Recherche une barre par la date/heure. La fonction retourne l'indice de la barre correspondant à la date/heure spécifiée.
    int  iBarShift(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       datetime         time,            // Heure
       bool             exact=false      // Mode
       );

    iLowest
    Retourne l'indice de la plus petite valeur trouvée sur le graphique correspondant (décalage relatif à la barre courante).
    int  iLowest(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              type,            // Identifiant de la timeserie
       int              count,           // Nombre d'éléments
       int              start            // Indice
      );

    iHighest
    Retourne l'indice de la plus grande valeur trouvée sur le graphique correspondant (décalage relatif à la barre courante).
    int  iHighest(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              type,            // Identifiant de la timeserie
       int              count,           // Nombre d'éléments
       int              start            // Indice
      );

    iRealVolume
    Retourne le volume réel de la barre (indiquée par le paramètre 'shift') sur le graphique correspondant.
    long  iRealVolume(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              shift            // Décalage
       );

    iTickVolume
    Retourne le volume des ticks de la barre (indiquée par le paramètre 'shift') sur le graphique correspondant.
    long  iTickVolume(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              shift            // Décalage
       );

    iSpread
    Retourne la valeur du spread de la barre (indiquée par le paramètre 'shift') sur le graphique correspondant.
    long  iSpread(
       string           symbol,          // Symbole
       ENUM_TIMEFRAMES  timeframe,       // Période
       int              shift            // Décalage
       );
  3. Ajout de la nouvelle fonction TesterHideIndicators. La fonction définit le mode Afficher/Masquer pour les indicateurs utilisés dans les Expert Advisors. La fonction permet de gérer la visibilité des indicateurs utilisés uniquement pendant les tests. Définissez-le à true si vous souhaitez cacher les indicateurs créés. Sinon définissez-le à false.
    void  TesterHideIndicators(
       bool      hide     // Flag
       );
  4. Ajout de la génération de l'évènement CHARTEVENT_CLICK lors du clic sur les niveaux de trade sur le graphique.
  5. Correction et optimisation de l'utilisation des fonctions CopyTicks.
  6. Correction de la valeur retournée par la fonction SymbolInfoDouble pour la propriété SYMBOL_TRADE_LIQUIDITY_RATE.
  7. Correction de la copie de tableaux de chaînes de caractères avec une mémoire qui se chevauche.
  8. Correction de l'allocation d'un tableau de chaîne de caractères dans la fonction FileReadArray.
  9. Correction d'erreurs dans la Bibliothèque Standard MQL5.

Tester

  1. Le système d'utilisation du cache d'optimisation a été mis à jour. Le cache stocke les données des passes d'optimisation calculées auparavant. Le testeur de stratégies stocke les données pour permettre de reprendre l'optimisation après une pause et d'éviter le recalcul des passes de test déjà effectuées.

    Changements dans le format de stockage du cache d'optimisation
    Dans les versions précédentes, le cache d'optimisation était stocké comme un seul fichier XML. Toutes les passes d'optimisation d'un Expert Advisor avec les paramètres de test spécifiés étaient ajoutées à ce fichier. Le même fichier sotckait donc les résultats d'optimisations avec différents paramètres d'entrée dans le même fichier.
    Le cache d'optimisation est maintenant stocké sous forme de fichiers binaires pour chaque ensemble de paramètres optimisés. Les opérations du Strategy Tester impliquant le cache d'optimisation sont devenues significativement plus rapides grâce au nouveau format et à la taille réduite du fichier. L'accélération peut être particulièrement visible lorsque vous reprenez une passe d'optimisation en pause.

    Affichage des résultats des optimisations précédentes
    Les résultats des optimisations précédentes peuvent maintenant être visualisés directement dans le Strategy Tester. Il n'est donc pas nécessaire d'analyser des fichiers XML volumineux en utilisant un logiciel tiers. Ouvrez l'onglet "Résultats d'optimisation", sélectionnez un Expert Advisor et un fichier avec le cache d'optimisation :


    La liste contient tous les fichiers de cache d'optimisation existants sur le disque pour l'Expert Advisor sélectionné. La date d'optimisation, les paramètres de test (symbole, période, intervalle) et les paramètres d'entrée sont affichés pour chaque fichier. Vous pouvez aussi filtrer les résultats d'optimisation par le serveur de trading sur lequel les résultats ont été obtenus.

    Recalcul du critère d'optimisation à la volée
    Un critère d'optimisation est un certain paramètre variable dont la valeur détermine la qualité d'un ensemble d'entrées testé. Plus la valeur du critère d'optimisation est élevée, meilleur est le résultat du test avec l'ensemble de paramètres donné.

    Auparavant, un seul critère sélectionné avant le démarrage de l'optimisation était calculé lors de l'optimisation. Vous pouvez maintenant modifier le critère d'optimisation à la volée lors de la visualisation des résultats, et le Strategy Tester recalculera automatiquement toutes les valeurs.




    Utilisation manuelle du cache d'optimisation
    Dans les versions antérieures, le cache d'optimisation était stocké sous la forme d'un fichier XML, qui pouvait être ouvert et analysé à l'aide d'un logiciel tiers. Il est maintenant stocké sous forme de fichiers binaires. Pour obtenir des données au format XML, exportez-les en utilisant le menu contextuel de l'onglet "Résultats d'optimisation".

  2. Ajout de la possibilité de définir manuellement la devise du dépôt et le levier pour le test et l'optimisation. Dans les versions précédentes, la devise était définie selon le compte connecté. Il fallait donc changer de compte pour changer la devise. La taille de levier ne peut être sélectionnée qu'à partir d'une liste prédéfinie, maintenant il est possible de spécifier n'importe quelle valeur.

    Veuillez noter que des taux croisés pour la conversion du profit et de la marge dans la devise du dépôt spécifiée doivent être disponibles sur le compte, afin de garantir des tests appropriés.




  3. Suppression de l'interdiction d'utiliser OpenCL dans les agents de test. Auparavant, les périphériques OpenCL n'étaient autorisés que lors de tests sur les agents locaux. Désormais, les agents sont autorisés à utiliser tous les périphériques OpenCL disponibles (tels que le processeur, la carte vidéo) lorsqu'ils travaillent sur le réseau local.et dans le MQL5 Cloud Network.

MetaEditor

  1. Utilisation optimisée et accélétée du MQL5 Storage.
  2. Correction de la reprise du processus de débogage après une pause dans le fichier MQH.
  3. Correction de la mise en surbrillance du code source dans l'éditeur.
  4. Correction de la navigation dans les résultats de recherche.
  5. Correction de la fonction de remplacement massif de texte. Dans certains cas, seules les premières occurrences étaient remplacées.

La documentation a été mise à jour.

18 janvier 2018
MetaTrader 5 Build 1755

Terminal

  1. Correction d'une erreur du terminal et de MetaEditor qui empêchait la fermeture et le redémarrage de Windows.
  2. Correction du décalage du graphique lors de l'utilisation d'un modèle.

MQL5

  1. Correction d'erreurs qui ralentissaient la compilation dans certaines conditions.

Correction d'erreurs reportées dans les journaux de crash.

12 janvier 2018
MetaTrader 5 Build 1745

MetaTrader 5 build 1745 sera la dernière version de la plateforme supportant Microsoft Windows XP/2003/Vista.

Nous avons annoncé il y a quelques mois la prochaine fin du support des anciennes versions des systèmes d'exploitation. Windows 2003, Windows Vista et spécialement Microsoft Windows XP sont des systèmes d'exploitation dépassés. Microsoft a mis fin au support de Windows XP il y a 3 ans, car des possibilités matérielles potentielles ne pouvaient plus être réalisées sur ce système en raison de limitations techniques.

MetaTrader 5 build 1745 et les versions précédentes continueront de fonctionner sur les systèmes d'exploitations mentionnés ci-dessus, mais ne seront plus mis à jour. Les installateurs ne s'exécuteront pas non plus sur ces systèmes d'exploitation.

Le système d'exploitation minimum requis pour faire fonctionner MetaTrader 5 est Windows 7. Nous recommandons cependant fortement d'utiliser les versions 64 bits de Windows 10.

Terminal

  1. L'option /auto a été ajoutée à l'installateur, permettant d'installer le programme en mode automatisé sans action supplémentaire requise de la part de l'utilisateur. Lorsque l'installateur est lancé avec cette option, les paramètres d'installation ne sont pas montrés à l'utilisateur, et le terminal est installé à l'endroit par défaut et avec le nom de dossier standard pour le menu Démarrer pour le programme. Exemple de lancement :
    C:\mt5setup.exe /auto
  2. Correction de l'utilisation de l'installateur dans les cas où l'utilisateur du système n'a pas les bons droits.
  3. Correction de la consommation excessive de ressources CPU lorsqu'aucune action n'est effectuée dans le terminal (lorsqu'il n'y a aucun graphique ouvert et qu'aucune action n'est effectuée par l'utilisateur).
  4. La nouvelle version contient la compression automatique des fichiers *.log au niveau du système de fichiers. La nouvelle fonctionnalité permet de réduire la quantité d'espace disque utilisée par les journaux.

Tester

  1. La quantité de cache pendant l'exécution de tests simples a été augmentée. Cela permet d'avoir des tests plus rapides sur les systèmes 64 bits.
  2. Correction de l'optimisation des robots de trading via le MQL5 Cloud Network. Des problèmes pouvaient survenir avec les produits achetés sur le MetaTrader Market.
  3. Correction du calcul des spreads des barres générées dans le mode de test "Chaque Tick".
  4. Correction de la sélection du périphérique OpenCL dans le strategy tester. Le tester visuel peut maintenant accéder à tous les périphériques OpenCL disponibles.
  5. La nouvelle version comporte la compression automatique des fichiers *.log au niveau du système de fichiers. La nouvelle fonctionnalité permet de réduire la quantité d'espace disque utilisée par les journaux.

MQL5

  1. Correction de la suppression des barres d'un symbole personnalisé avec la méthode CustomRatesDelete.

Correction d'erreurs reportées dans les journaux de crash.
Documentation mise à jour.
20 décembre 2017
MetaTrader 5 Build 1730: Projets dans MetaEditor et Instruments financiers synthétiques

Fin du Support des Anciennes Versions du Terminal

Le support des anciennes versions des terminaux de bureau et mobile prendre fin avec la publication de la nouvelle version de la plateforme :

  • Terminal Client : versions inférieures à 730, du 23 novembre 2012
  • Terminal Mobile pour iPhone : versions inférieures à 1171, du 11 novembre 2015
  • Terminal Mobile pour Android : versions inférieures à 1334, du 5 août 2016

Les versions non supportées du terminal ne pourront plus se connecter aux nouvelles versions du serveur. Nous vous recommandons fortement de mettre à jour vos terminaux en avance.


Changements du Protocoles des Opérations du MQL5 Storage

Pour supporter les nouveaux projets partagés, nous avons mis à jour le protocole des opérations du MQL5 Storage. Vous devrez donc effectuer un checkout de toutes les données du dépôt après la mise à jour de la plateforme. Les données stockées sur le MQL5 Storage ne seront pas perdues ou modifiées pendant la mise à jour.

Avant de mettre à jour la plateforme vers la nouvelle version, nous vous recommandons d'effectuer une opération de Commit pour envoyer tous les changements locaux vers le MQL5 Storage.

Terminal

  1. La plateforme de trading permet maintenant de créer des instruments financier synthétiques, c'est à dire des symboles basés sur un ou plusieurs instruments existants. L'utilisateur doit définir la formule pour le calcul des cotations, après laquelle la plateforme génèrera les ticks de l'instrument synthétique en temps réel et créera aussi son historique en minutes.


    Comment Cela Fonctionne

    • Vous créez un instrument synthétique et définissez la formule de calcul du prix.
    • La plateforme calcule les ticks à une fréquence de 10 fois par seconde, pourvu que le prix d'au moins l'un des instruments utilisés dans la formule a changé.
    • La plateforme calcule aussi l'historique des barres 1-minute (pour les deux derniers mois) basées sur les barres minute des instruments utilisés dans sa formule. Toutes les nouvelles barres (la courante et les suivantes) sont construites en temps réel sur la base des ticks générés de l'instrument synthétique.

    Par exemple, vous pouvez créer un instrument affichant l'indice du dollar (USDX). Il utilise la formule suivante :

    50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)

    Note : les paires USDEUR et USDGBP sont utilisées dans la formule source de l'indice du dollar. Puisque seules les paires inverses sont disponibles dans la plateforme, une puissance négatique et Ask au lieu de Bid sont utilisés dans la formule du symbole synthétique.

    La plateforme calculera en temps réel le prix du nouvel instrument sur la base des cotations des six autres symboles fournis par votre courtier. Les changements de prix seront visualisés dans la fenêtre du Market Watch et sur le graphique :




    Créez un nouveau symbole personnalisé, ouvrez sa spécification et entrez la formule :




    L'éditeur de formules affiche de façon pratique la liste des options possibles lorsque vous tapez les noms des symboles et des fonctions.

    Le calcul des ticks et des barres 1-minute d'un instrument synthétique commence lorsque cet instrument est ajouté au Market Watch. Tous les symboles nécessaires pour le calcul du prix synthétique sont également automatiquement ajoutés au Market Watch. Une entrée concernant le démarrage du calcul sera ajoutée dans le journal de la plateforme: Synthetic Symbol USDX: processing started.
    • Le calcul d'un instrument synthétique est stoppé lorsqu'il est enlevé du Market Watch.
    • Les symboles qui sont actuellement utilisés pour le calcul des prix du symbole synthétique ne peuvent pas être cachés dans le Market Watch.

    Calcul en Temps Réel des Cotations
    Toutes les 100 ms (c'est à dire 10 fois par seconde), les prix des symboles utilisés dans le calcul sont vérifiés. Si au moins l'un d'eux a changé, le prix du symbole synthétique est calculé et un nouveau tick est généré. Le calcul est effectué en parallèle dans 3 threads pour les prix Bid, Ask et Last. Par exemple, si la formule de calcul est EURUSD*GBPUSD, le prix du symbole synthétique sera calculé comme suit :

    • Bid = bid(EURUSD)*bid(GBPUSD)
    • Ask = ask(EURUSD)*ask(GBPUSD)
    • Last = last(EURUSD)*last(GBPUSD)

    La disponibilité des changements est vérifiée séparément pour chaque prix. Par exemple, si seul le prix Bid d'un instrument source a changé, seul le prix correspondant d'un instrument synthétique sera calculé.

    Création de l'Historique des Barres Minute
    En plus de collecter les ticks en temps réel, la plateforme crée un historique en minute de l'instrument synthétique. Il permet aux traders de voir les graphiques du symbole synthétique comme pour les symboles normaux, mais aussi d'effectuer des analyses techniques en utilisant des objets et des indicateurs.

    Lorsqu'un trader ajoute un instrument synthétique dans le Market Watch, la plateforme vérifie si son historique en minutes existe. S'il n'existe pas, l'historique des 60 derniers jours sera créé, ce qui inclut environ 50.000 barres. Si une valeur inférieure est spécifiée dans le paramètre 'Max. barres dans le graphique' des paramètres de la plateforme, la restriction correspondante sera appliquée.

    Si certaines barres dans cette période ont déjà été créées, la plateforme générera en plus de nouvelles barres. Un historique plus profond est créé si l'utilisateur essaye de voir une période plus ancienne sur le graphique (en le faisant défiler en arrière ou en y accédant depuis un programme MQL5).

    L'historique des barres 1-minute d'un instrument synthétique est calculé sur la base des barres 1-minutes (et pas des ticks) des instruments utilisés dans sa formule. Par exemple, pour calculer le prix Open d'une barre 1-minute d'un symbole synthétique, la plateforme utilise les prix Open des symboles utilisés dans sa formule. Les prix High, Low et Close sont calculés de façon similaire.

    Si la barre requise n'est pas disponible pour l'un des instruments, la plateforme utilisera le prix Close de la barre précédente. Par exemple, 3 instruments sont utilisés : EURUSD, USDJPY et GBPUSD. Si dans le calcul d'une barre correspondant à 12:00 la barre requise de USDJPY n'est pas disponible, les prix suivantes seront utilisés pour le calcul :

    • Open: EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
    • High: EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
    • Low: EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
    • Close: EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

    Si une barre minute n'est disponible pour aucun des instruments utilisés dans la formule, la barre minute correspondante de l'instrument synthétique ne sera pas calculée.

    Dessin des Nouvelles Barres Minute
    Toutes les nouvelles barres (la courante et les suivantes) de l'instrument synthétique sont créées sur la base des ticks générés. Le prix utilisé pour construire les barres dépend de la valeur du paramètre Mode du Graphique dans la spécification :





    Quelles Opérations Peut Être Utilisées dans la Formule du Symbole
    Les données des prix et certaines propriétés des symboles existants fournis par le courtier peuvent être utilisées pour calculer les prix synthétiques. Spécifiez les éléments suivants :

    • Nom du symbole — suivant le prix synthétique à calculer, le prix Bid, Ask ou Last de l'instrument spécifié sera utilisé. Par exemple, si EURUSD*GBPUSD est spécifié, le prix Bid est calculé comme bid(EURUSD)*bid(GBPUSD), et Ask = ask(EURUSD)*ask(GBPUSD).
    • bid(nom du symbole) — le prix bid du symbole spécifié sera obligatoirement utilisé pour le calcul du prix Bid de l'instrument synthétique. Cette option est similaire à la précédente (où le type du prix n'est pas spécifié).
    • ask(nom du symbole) — le prix Ask du symbole spécifié sera utilisé pour le calcul du prix Bid de l'instrument synthétique. Le prix Bid de l'instrument spécifié sera utilisé pour calculer le prix Ask. Le prix Last du symbole spécifié sera utilisé pour calculer le prix Last. Si ask(EURUSD)*GBPUSD est spécifié, le calcul suivant sera utilisé :
      • Вid = ask(EURUSD)*bid(GBPUSD)
      • Ask = bid(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • last(nom du symbole) — le prix Last du symbole spécifié sera utilisé dans le calcul de tous les prix de l'instrument synthétique (Bid, Ask et Last). Si last(EURUSD)*GBPUSD est spécifié, le calcul suivant sera utilisé :
      • Вid = last(EURUSD)*bid(GBPUSD)
      • Ask = last(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • volume(nom du symbole) — le volume du tick de l'instrument spécifié sera utilisé dans la formule. Assurez-vous que l'information du volume est fournie par le courtier pour ce symbole.
    • point(nom du symbole) — le changement minimum de prix de l'instrument spécifié sera utilisé dans les calculs.
    • digits(nom du symbole) — le nombre de décimales dans le prix du symbole spécifié qui seront utilisées dans la formule.

    Si un symbole a un nom complexe (contient des traits d'union, des points, etc.), il doit être écrit entre guillemets. Exemple : "RTS-6.17".
    Les opérations arithmétiques suivantes peuvent être utilisées dans la formule : addition (+), soustraction (-), multiplication (*), division (/) et modulo(%). Par exemple, EURUSD+GBPUSD signifie que le prix est calculé comme étant la somme des prix EURUSD et GBPUSD. Vous pouvez également utiliser l'opérateur unaire 'moins' pour changer le signe, par exemple : -10*EURUSD.

    Prenez garde à la priorité de calcul des opérations arithmétiques :

    • Les opérations de multiplication, division et modulo sont effectuées en premier ; ensuite les opérations d'addition et de soustraction sont effectuées.
    • Les opérations sont effectuées de gauche à droite. si la formule utilise plusieurs opérations ayant la même priorité (par exemple multiplication et division), l'opération la plus à gauche sera effectuée en premier.
    • Vous pouvez utiliser des parenthèses ( et ) pour changer la priorité des opérations. Les opérations entre parenthèses ont la plus haute priorité dans le calcul. Le principe gauche-vers-droite s'applique également pour elles : les opérations entre parenthèses les plus à gauche sont calculées en premier.

    Vous pouvez utilisez des constantes dans la formule :

    • Numérique (integer et float). Exemple : EURUSD*2+GBPUSD*0.7.
    • Les propriétés _Digits et _Point du symbole. Elles ajoutent les propriétés correspondantes de la spécification du symbole personnalisé à sa formule. _Digits signifie le nombre de décimales dans le prix de l'instrument ; _Point signifie le plus petit changement dans le prix du symbole.

    Vous pouvez également utiliser dans la formule toutes les fonctiosn mathématiques supportées en MQL5, excepté les fonctions MathSrand, MathRand et MathIsValidNuber : seuls les noms courts sont utilisés pour toutes les fonctions, tels que fabs(), acos(), asin() etc.

  2. Une nouvelle option a été implémentée, permettant d'ajouter des cotations des instruments personnalisés en temps réel. Il est maintenant possible de développer un Expert Advisor MQL5 qui fournirait les cotations du symbole personnalisé spécifié. La fonction CustomTicksAdd est utilisée pour cela.
    int  CustomTicksAdd(
       const string           symbol,       // Nom du symbole
       const MqlTick&         ticks[]       // Le tableau contenant les ticks devant être appliqués au symbole personnalisé
       );
    La fonction CustomTicksAdd permet de fournir les cotations comme si elles étaient reçues du serveur du courtier. Les données sont envoyées dans la fenêtre du Market Watch au lieu d'être directement écrites dans la base de données des ticks. Le terminal sauvegarde ensuite les ticks depuis le Market Watch vers la base de données. Si un gros volume de données est passé dans un appel, le comportement de la fonction est adapté afin d'économiser des ressources. Si plus de 256 ticks sont transmis, les données sont divisées en 2 parties. Une grande partie est directement enregistrée dans la base de données des ticks (de façon similaire à CustomTicksReplace). La seconde partie correspondant aux 128 derniers ticks est envoyée au Market Watch, d'où le terminal sauvegarde les ticks dans une base de données.

  3. La fenêtre du Market Watch présente maintenant en plus les prix High et Low. Ces colonnes sont cachées par défaut. Elles peuvent être activées en utilisant le menu contextuel :




    Si le graphique d'un symbole est construit en utilisant les prix bid (comme spécifié dans les paramètres), les prix Bid High et Bid Low sont affichés pour ce symbole. Si le graphique d'un symbole est construit en utilisant les prix Last, les prix Last High et Last Low sont affichés pour ce symbole.

    Si le Market Watch contient au moins un symbole dont le graphique est dessiné sur la base des prix Last, la colonne Last est automatiquement activée en plus de High/Low.

  4. Il est maintenant possible d'éditer l'historique des ticks des intruments financiers personnalisés. Cliquez sur 'Symboles' dans le menu contextuel du Market Watch, sélectionnez un symbole personnalisé et demandez l'intervalle de données désiré dans l'onglet Ticks.

    • Double-cliquez pour changer la valeur.
    • Utilisez le menu contextuel pour ajouter ou supprimer des entrées.
    • Si vous devez supprimer plusieurs barres/ticks en une seule fois, sélectionnez-les avec la souris, en utilisant les touches Shift ou Ctrl+Shift.


    Pour plus de commodités, les entrées modifiées sont surlignées comme suit :

    • Un fonds vert indique une entrée modifiée
    • Un fonds gris indique une entrée supprimée
    • Un fonds jaune indique une entrée ajoutée

    Pour sauvegarder les changements, cliquez sur "Appliquer les Changements" en bas de la fenêtre.

  5. Ajout de l'affichage des comptes préliminaires dans l'arbre du Navigateur.

    Les traders peuvent demander à un courtier d'ouvrir un compte réel directement depuis les terminaux de bureau. L'utilisateur doit remplir un simple formulaire avec les détails pour être contacté. Un compte préliminaire spécial est ensuite créé pour le trader. Le courtier contacte ensuite le trader pour formaliser la relation et activer le compte réel depuis le compte préliminaire.



  6. Ajout de l'affichage de l'heure en millisecondes dans la fenêtre Quotes.





  7. La recherche des serveurs disponibles dans la boîte de dialogue d'ouverture d'un nouveau compte est maintenant plus rapide.
  8. Correction de l'affichage des objets graphiques Ligne de Tendance avec les options Prolongement vers la Gauche et Prolongement vers la Droite activées.
  9. Utilisation optimisée d'un grand nombre de mails internes (centaines de milliers).
  10. Utilisation du terminal optimisée avec un grand nombre d'instruments de trading (50.000 ou plus).
  11. Ajout de l'optimisation de l'historique des ticks des instruments financiers personnalisés exécutée après l'édition de l'historique.

MetaEditor

  1. Les projets complets sont maintenant disponibles dans MetaEditor. Le processus de développement d'un programme est maintenant plus pratique.

    Le fichier MQ5 principal du programme n'apparaît plus comme un projet. Le projet est un fichier "MQPROJ" séparé, qui stocke les paramètres du programme, les paramètres de compilation et toutes les informations des fichiers utilisés. Les principaux paramètres du projet sont accessibles depuis une boîte de dialogue séparée, il n'est donc plus besoin de les spécifier dans le code source via #property.

    Un onglet séparé dans le Navigateur est fourni pour travailler de façon plus pratique dans le projet. Tous les fichiers, tels que les fichiers include, les ressources, les headers et les autres fichiers sont ordonnés par catégories dans cet onglet. Tous les fichiers sont automatiquement ajoutés dans le navigateur du projet. Par exemple, si vous incluez un nouveau fichier MQH, il apparaîtra automatiquement dans la section "Dépendences" du navigateur.

    Le support des nouveaux projets a également été implémenté dans le dépôt MQL5 Storage mis à jour en ligne. Il est maintenant devenu plus pratique de développer de gros projets en collaboration avec d'autres membres de la MQL5.community.

    La nouvelle section Projets Partagés est fournie pour les projets de groupe. Un projet créé dans cette section est immédiatement envoyé dans le dépôt : vous pouvez donner des permissions à d'autres utilisateurs et démarrer votre collaboration immédiatement.




    Lorsque vous compilez un projet dans les Projets Partagés, un fichier EX5 exécutable est automatiquement copié dans le répertoire Experts, Indicators ou Scripts suivant le type du programme. Vous pouvez facilement lancer le programme sur un graphique sans avoir à copier les fichiers manuellement.


    Quelles sont les nouveautés dans les Opérations du MQL5 Storage

    Pour implémenter le support des nouveaux projets partagés, nous avons modifié le protocole des opérations avec le MQL5 Storage. Vous devrez donc effectuer un checkout de toutes les données du dépôt après la mise à jour de la plateforme. Les données stockées sur le dépôt MQL5 ne seront pas perdues ou modifiées pendant la mise à jour.

    Avant de mettre à jour la plateforme vers la nouvelle version, nous vous recommandons d'effectuer une opération de Commit pour envoyer tous les changements locaux vers le MQL5 Storage.

    La commande 'Checkout depuis le Dépôt' n'est pas disponible. Au lieu de cela, les commandes 'Activer le MQL5 Storage' et 'Mettre à Jour depuis le Storage' sont utilisées pour récupérer les données :

    • Si vous n'avez utilisé le MQL5 Storage dans l'instance actuelle de MetaEditor, cliquez sur 'Activer le MQL5 Storage' dans le menu contextuel de la fenêtre du Navigateur. Tous les catalogues et les fichiers disponibles dans le dépôt seront téléchargés sur votre ordinateur.
    • Si vous avez déjà utilisé le dépôt, cliquez sur 'Mettre à Jour les fichiers depuis le Storage' dans le menu contextuel d'un projet donné ou sur l'élément racine MQL5 dans la fenêtre du Navigateur pour récupérer les données depuis le dépôt.

    Nouveaux Projets : Exemples des Détails de Création et d'Opération

    Une nouvelle entité projet a été ajoutée dans MetaEditor. Un projet est un fichier mqproj qui stocke les propriétés communes du programme et les informations sur les fichiers utilisés. Les propriétés du programme peuvent maintenant être gérées depuis une boîte de dialogue séparée de MetaEditor au lieu de modifier manuellement les propriétés dans le code source (en utilisant la directive #property).

    Si vous du code disponible, vous pouvez facilement tester de nouveaux projets en utilisant la commande 'Nouveau Projet depuis une Source'.




    Dans le répertoire où est situé le fichier sélectionné, un nouveau fichier projet sera créé avec le même nom et l'extension mqproj. Les principales propriétés du programme spécifiées dans le code source via #property seront automatiquement ajoutées au projet, incluant le nom, le copyright, la version, le lien vers le site web du développeur et la description du programme.

    L'ensemble des propriétés du programme dans le fichier projet a une plus haute priorité que les propriétés spécifiées dans le code du programme. Si les propriétés sont spécifiées à la fois dans le projet et dans le fichier source, seules les propriétés du projet seront utilisées.




    Deux nouvelles options de compilation des programmes MQL5 ont été ajoutées aux propriétés du projet :

    • Activer l'optimisation supplémentaire : les applications avec l'optimisation désactivée sont compilées plus rapidement mais s'exécutent plus lentement.
    • Vérifier les diviseurs à virgule flottante : les applications avec cette vérification désactivée s'exécutent un peu plus rapidement car l'erreur de division par zéro n'est pas vérifiée pendant l'exécution.

    Pour utiliser les projets, utilisez un onglet Projet séparé dans la fenêtre du Navigateur. Tous les fichiers utilisés dans un projet sont affichés dans cet onglet sous une forme pratique. Lorsqu'un projet est généré depuis un fichier sources, tous les fichiers include utilisés (spécifiés avec la directive #include dans le principal fichier MQ5 et dans ses fichiers include) sont automatiquement ajoutés dans la section Dépendences.

    Lorsqu'un nouveau fichier include est ajouté dans le code source, il apparaît également dans le Navigateur du projet. Les fichiers header utilisés sont ajoutés dans la section Headers ; les images, les sons et les autres programmes MQL5 utilisés dans la section Ressources. Les fichiers MQ5 avec le code source sont affichés dans la section Sources. Dans la section 'Paramètres et fichiers', vous pouvez ajouter d'autres fichiers, tels que les fichiers set pour les tests et les modèles de graphique.

    Utilisez les commandes du menu contextuel pour ajouter les fichiers existants dans un projet ou pour y supprimer des fichiers. Faites attention lors de la suppression de fichiers, car vous pouvez effacer un fichier du projet (enlever le lien) ou le supprimer complètement du disque dur :




    La création d'un nouveau projet est aussi facile que la création d'un programme MQL5 normal. Cliquez sur 'Nouveau Projet', sélectionnez le type du nouveau programme et spécifiez les propriétés (telles que le nom, les gestionnaires d'évènements, etc.) dans le MQL5 Wizard.

    Pour obtenir un fichier EX5 exécutable, vous pouvez ouvrir le projet et appuyer sur la touche F7 (la commande de compilation) ou ouvrir le principal fichier MQ5 du programme et le compiler.


    Projets Partagés dans le MQL5 Storage : Détails des Opérations

    Les projets partagés sont gérés dans une section Projets Partagés séparée. Si vous ne vous êtes pas encore connecté au dépôt, exécutez la commande 'Activer le MQL5 Storage' depuis le mneu contextuel du dossier désiré. MetaEditor vérifiera si votre dépôt contient des données sauvegardées et si des projets partagés sont disponibles pour vous. Toutes les données disponibles seront récupérées depuis le dépôt et téléchargées sur votre ordinateur (opération de checkout). Les projets de groupe disponibles apparaissent dans la section Projets Partagés. Pour récupérer les projets, exécutez "Checkout depuis le Storage" dans le menu contextuel.

    Pour créer un nouveau projet de groupe, sélectionnez le dossier Projets Partagés et cliquez sur "Nouveau Projet" :


    Complétez ensuite les étapes MQL5 classiques : définissez le type, le nom et les propriétés du programme désiré. Pour les projets de groupe, vous devriez utiliser des noms clairs et compréhensibles afin que les participants les retrouvent facilement. Seuls les caractères latins et les chiffres, sans espace, peuvent être utilisés dans les noms des projets.

    Un objet créé est immédiatement ajouté au MQL5 Storage. Les fichiers de la Bibliothèque Standard utilisés dans le projet ne sont pas ajoutés au dépôt, et vous pouvez les ajouter manuellement.

    Pour permettre aux autres participants de travailler avec le projet, ouvrez ses propriétés. Vous pouvez à partir de là donner les permissions aux utilisateurs sélectionnés en spécifiant leurs identifiants MQL5.community, mais aussi définir les paramètres communs pour le travail du groupe :

    • Projet Privé
    • Projet Libre
    • Projet accessible sur demande




    Lorsque vous compilez un projet de groupe, le fichier exécutable EX5 est automatiquement copié dans le répertoire Experts, Indicators ou Scripts suivant le type du programme. Cela vous permet d'exécuter instantanément le programme dans le terminal sans avoir à le copier manuellement dans le répertoire correspondant.


    Projets Publics dans le MQL5 Storage : Participation au Développement

    Comme mentionné ci-dessus, chaque projet de groupe du MQL5 Storage a des paramètres de publication : le projet peut être privé ou ouvert à d'autres utilisateurs. Maintenant, tous les projets que vous pouvez rejoindre librement sont affichés dans l'onglet "Projets Publics" séparé.

    Chacun peut trouver un projet excitant et prendre part à son développement. Cliquez simplement sur Rejoindre et récupérez le projet depuis le dépôt.




    Chaque utilisateur qui rejoint le groupe n'a que des droits en lecture seule. Contactez l'auteur du projet pour pouvoir soumettre vos changements. Pour connaître son identifiant, ouvrez les propriétés du projet via le menu contextuel.

  2. Ajout de la possibilité d'insérer facilement des propriétés et des ressources dans le code d'un programme. Par exemple, vous pouvez rapidement ajouter un fichier à inclure dans le code. Utilisez la command "Insérer—MQH comme #include", et sélectionnez le fichier include désiré. La directive #include avec le chemin correct vers le fichier sélectionné sera insérée dans le code du programme.




    Le même menu permet d'ajouter des fichiers dans le code du programme sous la forme d'un tableau binaire ou de texte. Parmi d'autres, vous pouvez transférer des modèles de graphique avec des Expert Advisors ou des indicateurs : insérez votre modèle dans le code du programme sous la forme d'un tableau, et sauvegardez-le sur le disque en utilisant la fonction FileSave. Après cela, le modèle peut être appliqué sur le graphique désiré directement depuis un Expert Advisor avec la fonction ChartApplyTemplate.
    //+------------------------------------------------------------------+
    //| Fonction de démarrage du script                                  |
    //+------------------------------------------------------------------+
    void OnStart()
      {
    //--- Fichier du modèle sous la forme d'un tableau binaire
       unsigned char my_template[]=
         {
          0xFF,0xFE,0x3C, ... ,0x00 // Le tableau des données est raccourci ici
         };
    //--- Sauvegarde et applique le modèle
       if(FileSave("my_template.tpl",my_template))
         {
          Print("Modèle personnalisé sauvegardé dans \\MQL5\\Files");
          if(ChartApplyTemplate(0,"\\Files\\my_template.tpl"))
             Print("Modèle personnalisé appliqué au graphique courant");
          else
             Print("Echec de l'application du modèle personnalisé");
         }
       else
          Print("Echec de la sauvegarde du modèle personnalisé");
      }

  3. Added an option for converting strings between ASCII, HEX and Base64 formats.a Sélectionnez une ligne dans le code source et cliquez sur la commande désirée dans le menu Edition—Convertir :




  4. Correction de la recherche insensible à la casse dans les fichiers.
  5. Correction d'une erreur du débogueur qui pouvait survenir lors du calcul d'expressions du style x.y[0][1].z.
  6. Correction de la navigation dans le code en utilisant les boutons En Avant et En Arrière.

MQL5

  1. Le nouveau service en ligne MQL5 Cloud Protector a été ajouté pour fournir une protection supplémentaire aux programmes MQL5. La protection est similaire à l'option utilisée dans la plus grande boutique d'applications de trading, le MetaTrader Market, où les fichiers EX5 des produits soumis par les vendeurs sont également compilés en code natif.

    Ce type de protection est maintenant disponible pour tous les utilisateurs de la plateforme. Pour protéger vos fichiers, exécutez la commande suivante dans MetaEditor : Outils—MQL5 Cloud Protector. La seule différence de MQL5 Cloud Protector avec le mécanisme utilisé dans le Market, est que le fichier n'est pas lié à l'ordinateur de l'utilisateur. Les fichiers protégés via le MQL5 Cloud Protector peuvent être exécutés sur n'importe quel ordinateurn comme les fichiers EX5 classiques.
    Le MQL5 Cloud Protector est un service sécurisé. La protection supplémentaires n'est ajoutée qu'au fichier compilé. Le code source n'est pas passé au service. En premier, un programme est compilé dans un fichier EX5 sur l'ordinateur de l'utilisateur ; ensuite, le fichier compilé est envoyé au service via un canal crypté où il est protégé et retourné à l'utilisateur.



  2. De nouvelles fonctions pour travailler avec les instruments financiers personnalisés ont été ajoutées.

    Fonction Action
    CustomSymbolCreate Crée un symbole personnalisé avec le nom spécifié dans le groupe spécifié
    CustomSymbolDelete Supprime le symbole personnalisé ayant le nom spécifié
    CustomSymbolSetInteger Définit la valeur de la propriété de type integer pour un symbole personnalisé
    CustomSymbolSetDouble Définit la valeur de la propriété de type real pour un symbole personnalisé
    CustomSymbolSetString Définit la valeur de la propriété de type string pour un symbole personnalisé
    CustomSymbolSetMarginRate Définit les taux de marge suivant le type de l'ordre et sa direction pour un symbole personnalisé
    CustomSymbolSetSessionQuote Définit l'heure de début et de fin de la session de cotation spécifiée pour le symbole et le jour de la semaine spécifiés
    CustomSymbolSetSessionTrade Définit l'heure de début et de fin de la session de trading spécifiée pour le symbole et le jour de la semaine spécifiés
    CustomRatesDelete Supprime toutes les barres de l'historique des prix du symbole personnalisé dans l'intervalle de temps spécifié
    CustomRatesReplace Remplace entièrement l'historique des prix du symbole personnalisé dans l'intervalle de temps spécifié avec les données du tableau de données du type MqlRates
    CustomRatesUpdate Ajoute les barres manquantes dans l'historique du symbole personnalisé et remplace les données existantes avec celles du tableau de données de type MqlRates
    CustomTicksAdd Ajoute les données d'un tableau de données de type MqlTick à l'historique des prix d'un symbole personnalisé. Le symbole personnalisé doit être sélectionné dans la fenêtre du Market Watch.
    CustomTicksDelete Supprimer tous les ticks de l'historique des prix du symbole personnalisé dans l'intervalle de temps spécifié
    CustomTicksReplace Remplace entièrement l'historique des prix du symbole personnalisé dans l'intervalle de temps spécifié et avec les données du tableau de données de type MqlTick

  3. Ajout des Collections de Données Génériques dans la Bibliothèque Standard. Elles contiennet les classes et interfaces permettant de définir des collections basées sur des templates. Les nouvelles collections fortement typées permettent de mieux développer des applications et une meilleure performance de la gestion de nombreuses données.

    La bibliothèque est placée dans le répertoire Include\Generic du répertoire de travail du terminal.

  4. Ajout du support des templates pour le type de données union.
  5. La propriété SYMBOL_VISIBLE d'un instrument de trading a été ajoutée. L'appel à SymbolInfoInteger(symbol, SYMBOL_VISIBLE) retourne false si le symbole spécifié n'est pas visible dans le Market Watch.
  6. Ajout de la nouvelle propriété CHARTEVENT_MOUSE_WHEEL. L'évènement est appelé lorsque la molette de la souris est roulée ou pressée sur le graphique (si CHART_EVENT_MOUSE_WHEEL=true pour le graphique).
  7. Les propriétés du graphique suivantes ont été ajoutées :

    • CHART_EVENT_MOUSE_WHEEL — activation/désactivation de la génération de l'évènement CHART_EVENT_MOUSE_WHEEL (défilement de la souris et clic sur le graphique). Valeurs possibles : 0 et 1.
    • CHART_CROSSHAIR_TOOL — active/désactive la possibilité de basculer le curseur du mode Crosshair d'un clic du bouton du milieu. Valeurs possibles : 0 et 1.
    • CHART_CONTEXT_MENU — active/désactive l'utilisation du clic droit pour afficher le menu contextuel sur le graphique. Valeurs possibles : 0 et 1.

  8. Le dessin des buffers avec le style DRAW_NONE n'est maintenant pas pris en compte lors du calcul de l'échelle de la fenêtre de l'indicateur.
  9. Ajout de la génération de l'évènement CHARTEVENT_CHART_CHANGE lors de la définition de la propriété CHART_SCALEFIX (échelle fixe) pour le graphique.
  10. La fonction ArraySwap a été ajoutée, permettant d'intervertir rapidement le contenu des tableaux dynamiques.
    bool  ArraySwap(
       void&  array1[],      // Le premier tableau
       void&  array2[]       // Le deuxième tableau
       );
    La fonction accepte des tableaux dynamiques du même type et de même dimension. Pour les tableaux à plusieurs dimensions, le nombre d'éléments doit correspondre dans toutes les dimensions exceptée la première.

  11. Ajout de la nouvelle propriété TERMINAL_RETRANSMISSION — le pourcentage de paquets réseau renvoyés (retransmis) dans le protocole TCP/IP pour les applications et services en cours d'exécution sur un ordinateur donné. La perte de paquets intervient même sur des réseaux ultra-rapides et correctement configurés. Dans ce cas, il n'y a pas de confirmation de livraison des paquets entre le destinataire et l'émetteur. Les paquets perdus sont donc renvoyés.

    Le terminal ne calcule pas cette valeur. Elle est demandée au système d'exploitation une fois par minute. Ce n'est pas une indication de la qualité de la connexion entre un terminal particulier et un serveur de trades, puisque le pourcentage est calculé pour l'activité réseau en entier, incluant les activités système et celles en arrière plan.

    La propriété TERMINAL_RETRANSMISSION est ajoutée à l'énumération ENUM_TERMINAL_INFO_DOUBLE, la fonction TerminalInfoDouble est utilisée pour l'obtenir.
  12. Optimisation de l'utilisation de l'historique de trading.

Signals

  1. Correction de l'indication du type de remplissage de l'ordre dans le cas de la fermeture forcée des positions ouvertes suivant un Signal. L'optio 'Stop si le compte est inférieur à XXX USD' est fournie dans les options de copie du signal : si les fonds chutent en-dessous d'un niveau spécifié, la copie des signaux de trading est automatiquement terminée, toutes les positions sont fermées. Auparavant, un type de remplissage incorrect pouvait être défini pour les ordres de fermeture de position dans le cas d'une fermeture forcée. Le terminal vérifie maintenant les types de remplissage autorisés dans les paramètres du symboles et indique l'option correcte.

Tester

  1. Le comportement de la fonction HistoryOrderSelect dans le Strategy Tester correspond maintenant à la même fonction dans le terminal client.
  2. Le comportement des fonctions CopyTicks et CopyTicksRange dans le Strategy Tester correspondent maintenant aux mêmes fonctions dans le terminal client.
  3. Optimisation de l'affichage des objets graphiques durant un test visuel.
  4. Correction de l'affichage des résultats de test des instruments boursiers (avec le modèle de gestion du risque boursier). Le graphique ne montre maintenant que les fonds, tandis que le solde et la charge du dépôt ne sont pas affichés. Le statut de trading de ce type de compte est évalué suivant le niveau des fonds. Le solde ne montre que la quantité d'argent sur le compte et ignore les actifs et passifs du trader. La charge du dépôt (marge/fonds) n'est pas affichée car la marge dans le mode de calcul boursier est égale à la valeur actualisée de l'actif/passif, et elle change avec les fonds.
  • L'interface utilisateur est maintenant également disponible en hollandais.
  • Documentation mise à jour.
  • 123456789101112131415