MetaTrader 5 Build 1730: Projets dans MetaEditor et Instruments financiers synthétiques

Mises à jour : MetaTrader 5

20 décembre 2017

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.