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

Mises à jour : MetaTrader 5

26 octobre 2018

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.