MetaTrader 5 build 2005 : Calendrier Economique, applications MQL5 sous forme de services et API de langage R

Calendrier Economique intégré complètement révisé. Le Calendrier Economique est notre solution propriétaire

21 février 2019

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.