Mises à jour : MetaTrader 5

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

9 décembre 2016
MetaTrader 5 Build 1495: Améliorations dans MQL5 pour travailler avec les graphiques personnalisés

MQL5

  1. Ajout de la fonction CopyTicksRange.
  2. Ajout de fonctions d'anti-aliasing améliorées dans la classe CCanvas :
  3. Ajout de la description de la bibliothèque graphique dans la Référence MQL5. La bibliothèque permet de créer rapidement des histogrammes, des graphiques de distribution et des graphiques linéaires directement sur les graphiques des prix.
  4. Ajout des identifiants d'état des touches du système dans la liste des constantes des Propriétés du Terminal Client. Un appel à TerminalInfoInteger(TERMINAL_KEYSTATE_XXX) retourne le même code d'état d'une touche que la fonction GetKeyState() dans MSDN.
  5. Désactivation du support du cast d'une chaîne de caractères (string) en bool. Pour vérifier les chaînes de caractères, il faut maintenant utiliser des conditions explicites. Par exemple, avec le nouveau build, la compilation du code suivant déclenchera une erreur :
    string str;
    ...
    if(str)                        // erreur de compilation "Cannot convert type 'string' to 'bool'" (aucune erreur n'apparaissant dans les versions précédentes)
       Print("str est true");
    Il faut utiliser une condition explicite :
    string str;
    ...
    
    //--- vérifie si la chaîne est initialisée
    if(str!=NULL)
       Print("str est true");
    
    ou
    
    //--- vérifie si la chaîne vaut "true"
    if(StringCompare(str,"true",false))
       Print("str est true");
    
    ou
    
    //--- vérifie si la chaîne est un entier et n'est pas égal à zéro
    if((int)str!=0)
       Print("str est true");

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

2 décembre 2016
Plateforme Web MetaTrader 5 : Authentification à deux facteurs et changement du mot de passe
  • Nous avons ajouté l'authentification à deux facteurs utilisant des mots de passe à usage unique, ce qui améliore la protection des comptes contre des accès non autorisés. Pour activer l'authentification à deux facteurs, lancez l'application mobile MetaTrader 5. Connectez-vous et choisissez le générateur OTP dans la fenêtre Paramètres. Le générateur de mot de passe à usage unique (One-time password - OTP) peut lier tous vos comptes de trading et génére automatiquement un mot de passe unique composé de 6 chiffres pour chaque compte. Saisissez le mot de passe généré lors de votre connexion à la plateforme web.





  • Une autre nouvelle option permet de changer le mot de passe principal et le mot de passe investisseur. Profitez de cette opportunité pour créer un identifiant personnel façile à retenir.
  • La plateforme web mise à jour peut maintenant aussi générer des comptes de démo. Vous pouvez maintenant lancer la plateforme web MetaTrader 5 depuis n'importe quel navigateur et commencer le trading du Forex, des Actions ou Futures immédiatement.
24 novembre 2016
MetaTrader 5 Build 1485 : Mode de test et graphiques supplémentaires dans la Bibliothèque Standard

Terminal

  1. L'ordre des entrées dans les journaux du terminal et de MetaEditor a changé. Avant la mise à jour, les dernières entrées du journal étaient présentées en premier. Maintenant, les plus anciennes entrées sont au début du journal. Un orde de tri inversé et plus conventionnel rend la lecture du journal plus facile.




    De plus, il est maintenant possible de cacher les colonnes 'Time' et 'Source' en utilisant le menu contextuel du journal.

  2. En mode hedging, le ticket d'une position fermée est maintenant affiché pour les ordres et les transactions dans l'historique de trading. Cela aide à trouver les opérations d'ouverture et de fermeture correspondantes.




  3. Correction d'une erreur qui provoquait la copie des SL/TP d'une position existante vers une nouvelle position sur le même instrument. L'erreur pouvait se produire lors de l'utilisation des fonctions de Trading En Un Clic (par exemple, depuis le graphique ou depuis la fenêtre du Market Watch) en mode hedging.
  4. Correction de l'affichage des objets flèches sur les écrans ultra-haute définition (4K).

MQL5

  1. Une nouvelle fonction ArrayPrint a été ajoutée qui écrit des structures et des types simples dans le journal.
    void  ArrayPrint(
       const void&   array[],             // Tableau à imprimer
       uint          digits=_Digits,      // Nombre de décimales
       const string  separator=NULL,      // Le séparateur entre les valeurs des champs de la structure
       ulong         start=0,             // L'indice du premier élément à imprimer
       ulong         count=WHOLE_ARRAY,   // Le nombre d'éléments à imprimer
       ulong         flags=ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN    
       );
    
    ArrayPrint n'imprime pas tous les champs d'une structure dans les journaux – les champs du tableau et les champs pointeurs vers les objets sont passés. Si vous désirez imprimer tous les champs de la structure, vous devrez utiliser une fonction personnalisée pour imprimer en masse avec le format désiré.
    //--- Affiche les valeurs des 10 dernières barres
       MqlRates rates[];
       if(CopyRates(_Symbol,_Period,1,10,rates))
         {
          ArrayPrint(rates);
          Print("Révision\n[time]\t[open]\t[high]\t[low]\t[close]\t[tick_volume]\t[spread]\t[real_volume]");
          for(int i=0;i<10;i++)
            {
             PrintFormat("[%d]\t%s\t%G\t%G\t%G\t%G\t%G\t%G\t%I64d\t",i,
             TimeToString(rates[i].time,TIME_DATE|TIME_MINUTES|TIME_SECONDS),
             rates[i].open,rates[i].high,rates[i].low,rates[i].close,
             rates[i].tick_volume,rates[i].spread,rates[i].real_volume);
            }
         }
       else
          PrintFormat("CopyRates a échoué, code d'erreur=%d",GetLastError());
    //--- Un exemple de journal
    /*
                        [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
       [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295         18110       10   17300175000
       [1] 2016.11.09 05:00:00 1.12296 1.12825 1.11930 1.12747         17829        9   15632176000
       [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744         13458       10    9593492000
       [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194         15362        9   12352245000
       [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172         16833        9   12961333000
       [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052         15933        8   10720384000
       [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528         11888        9    8084811000
       [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915          7284       10    5087113000
       [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904          8710        9    6769629000
       [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263          8956        7    7192138000
       Vérification
       [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]
       [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295 18110 10 17300175000 
       [1] 2016.11.09 05:00:00 1.12296 1.12825 1.1193 1.12747 17829 9 15632176000 
       [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744 13458 10 9593492000 
       [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194 15362 9 12352245000 
       [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172 16833 9 12961333000 
       [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052 15933 8 10720384000 
       [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528 11888 9 8084811000 
       [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915 7284 10 5087113000 
       [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904 8710 9 6769629000 
       [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263 8956 7 7192138000 
    */
    

  2. Correction d'une erreur dans la concaténation de chaînes de caractères du type S1=S2+S1
  3. Le comportement de la fonction ArrayResize a changé. Si -1 est passé dans le paramètre reserve_size, la fonction libère la mémoire non utilisée (réservée) si la fonction n'augmente pas la taille du tableau. Définir la nouvelle taille du tableau à 0 avec reserve_size=-1 est équivalent à un appel à ArrayFree. Le nouveau comportement permet d'optimiser l'utilisation de la mémoire dans les programmes MQL5.
    void OnStart()
      {
       int arr[];
    //--- Quantité de mémoire utilisée initialement 
       Print("Taille du tableau :",ArraySize(arr)," Mémoire utilisée :",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- Quantité de mémoire utilisée pour le tableau de taille 1 avec une réserve
       ArrayResize(arr,1,1024*1024);
       Print("Taille du tableau :",ArraySize(arr)," Mémoire utilisée :",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- Après l'augmentation du tableau, la quantité de mémoire utilisée ne changera pas grâce à la réserve
       ArrayResize(arr,1024*512,1024*1024);
       Print("Taille du tableau :",ArraySize(arr)," Mémoire utilisée :",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- Après la réduction du tableau, la taille de la mémoire ne changera pas non plus
       ArrayResize(arr,1);
       Print("Taille du tableau :",ArraySize(arr)," Mémoire utilisée :",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- La mémoire non utilisée ne sera pas libérée après la suppression de la réserve
       ArrayResize(arr,1,-1);
       Print("Taille du tableau :",ArraySize(arr)," Mémoire utilisée :",MQLInfoInteger(MQL_MEMORY_USED)," MB");
      }
    

  4. Des fonctions de dessin de graphiques ont été ajoutées dans la Bibliothèque Standard. Pour utiliser la nouvelle fonctionnalité, incluez MQL5\Include\Graphics\Graphic.mqh à votre projet.

    Dessin d'un graphique sur la base de 3 séries de données en utilisant GraphPlot :
    #include <Graphics/Graphic.mqh>
    
    double Func1(double x) { return MathPow(x,2); }
    double Func2(double x) { return MathPow(x,3); }
    double Func3(double x) { return MathPow(x,4); }
    
    void OnStart()
      {
       GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
      }
    
    
    Le résultat :


    Dessin d'un graphique sur la base d'un tableau de données en utilisant GraphPlot :
    #include <Math/Stat/Binomial.mqh>
    #include <Graphics/Graphic.mqh>
    
    void OnStart(void)
      {
       double    vars[101];
       double    results[101];
       const int N=2000;
    //---  
       MathSequence(0,N,20,vars);
       MathProbabilityDensityBinomial(vars,N,M_PI/10,true,results);
       ArrayPrint(results,4);
       GraphPlot(results);
    //---
      }
    
    Le résultat :



  5. Fonctions mises à jour pour le travail avec les statistiques mathématiques dans la Bibliothèque Standard. Nous avons vérifié minutieusement la qualité et la fiabilité de toutes les fonctions à la fois dans la version MQL5 et dans le code source du langage R. Pour activer le contrôle de fiabilité et des performances, des tests unitaires sont distribués avec la librairie statique. Ils sont disponibles dans le répertoire \MQL5\Scripts\UnitTests\Stat.

    • TestStat.mq5 — est le script du test principal pour vérifier les résultats de calcul
    • TestPrecision.mq5 — test de précision des calculs
    • TestBenchmark.mq5 — le test inclut les mesures de performances des calculs

Tester

  1. La mise à jour propose des paramètres avancés pour configuer les délais d'exécution pendant le test. Vous pouvez maintenant tester vos Expert Advisors sous de nombreuses conditions de trading, incluant le cas idéal sans délai ou avec n'importe quel délai.



    Seul le mode délai aléatoire était disponible dans les versions précédentes.

  2. Correction de la génération du volume des ticks sur les barres dans le mode 'OHLC basés sur M1' ('M1 based OHLC').
  3. Correction de la spécification de l'heure d'ouverture des ordres et positions en millisecondes lors du trading en mode hedging.
  4. Correction de l'erreur "ancien tick ("old tick"), qui pouvait apparaître en mode multi-devises ou multi-périodes dans le mode 'ticks réels'.
  5. Améliorations de la vitesse d'exécution de CopyTicks lorsque les ticks demandés sont lus depuis une base de données sur le disque dur.

MetaEditor

  1. Le menu contextuel Fichier dans le Navigator et dans la boîte à outils propose maintenant des commandes permettant de travailler avec dépôt MQL5 de code source versionné.




  2. Correction d'une erreur qui pouvait occasionnellement casser l'intégrité de la base de données locale MQL5 lors de l'utilisation de plus de 1024 fichiers dans le dépôt.
  3. Correction de l'affichage de l'arbre des fichiers dans le Dépôt MQL5.
  4. Correction de l'affichage d'un fichier après le remplacement de texte en masse.

Mise à jour de la documentation.

24 novembre 2016
MetaTrader 5 iOS build 1425
  • Améliorations du panneau Trading en Un Clic sur le graphique: il est dorénavant également disponible en mode portrait ; le volume du trade peut être changé rapidement en sélectionnant la valeur désirée dans la liste. 

  • Le symbole du graphique peut maintenant être changé en tapant sur le nom du symbole dans l'en-tête de la fenêtre.
  • Améliorations dans la section paramètres de l'app : les informations du compte actuel sont maintenant affichées, les unités sont disposées correctement et le design a été amélioré.
  • Diverses améliorations et corrections. 
14 octobre 2016
MetaTrader 5 Build 1455 : Biblibothèques de fonctions mathématiques en MQL5

Terminal

  1. Ajout d'infobulles pour les boutons Buy, Sell et Close dans les boîtes de dialogue de trading. Les infobulles contiennent des informations sur l'instrument sur le point d'être acheté ou vendu, pour aider les débutants à comprendre le processus de trading.




  2. Ajout de nouvelles icones pour les ordres, les transactions et les positions dans les onglets "Trading" et "Historique".




  3. Le terminal mis à jour fournit un affichage et une mise à jour optimisés et bien plus rapides (jusqu'à 4 ou 5 fois) du Market Depth, du graphique des ticks et des données Time & Sales.
  4. Correction de la synchronisation de l'historique des ticks en dehors des heures de trading. Le traitement pouvait consommer une quantité excessive du trafic réseau dans certains cas.

MQL5

  1. Une version MQL5 de la bibliothèque d'analyse numérique ALGLIB a été inclue dans la Bibliothèque Standard.

    Fonctions de la Bibliothèque

    • Algèbre linéaire
    • Systèmes d'équations linéaires et non linéaires
    • Interpolation
    • Optimisation
    • Transformation de Fourier rapide
    • Intégration numérique
    • Moindres carrés linéaires et non linéaires
    • Equations différentielles ordinaires
    • Fonctions spéciales
    • Statistiques descriptives et tests d'hypothèses
    • Analyse des données - classification, régression
    • Implémentation des algorithmes d'algèbre linéaire, interpolation, etc. en arithmétique multi-précisions (utilisant MPFR)

    Comment l'Utiliser

    Les fichiers de ALGLIB sont situés dans \MQL5\Include\Math\Alglib. Pour utiliser les fonctions, incluez le fichier principal de la bibliothèques dans votre programme :

     #include <Math\Alglib\alglib.mqh> 

  2. Des fonctions de statistiques mathématiques ont été inclues dans la Bibliothèque Standard. MQL5 fournit maintenant la fonctionnalité du langage R, qui est l'un des meilleurs outils pour le traitement et l'analyse de données statistiques.

    Fonctions de la Bibliothèque

    La bilbliothèque statistique contient des fonctions de calcul des caractéristiques statistiques des données, mais aussi des fonctions d'opérations avec les distributions statistiques :

    • Fonctions pour le calcul des caractéristiques statistiques des éléments d'un tableau
    • Options pour les opérations avec des distributions statistiques : distribution normale, distribution log-normale, distribution béta, etc.

    Comment l'Utiliser

    Les fichiers de la bilbiothèque statistique sont situés dans \MQL5\Include\Math\Stat. Pour utiliser cette bibliothèque, incluez dans votre programme les fichiers des fonctions désirées, par exemple :

    #include <Math\Stat\Binomal.mqh>
    #include <Math\Stat\Cauchy.mqh> 
    
    

    La description détaillée des fonctions de la bibliothèque est disponible dans l'article Distributions Statistiques en MQL5 - Profiter du Meilleur de R.

  3. La version MQL5 de la bibliothèque Fuzzy a été inclue dans la Bibliothèque Standard. La bibliothèque Fuzzy implémente les systèmes d'inférence floue Mamdani et Sugeno.

    Fonctions de la Bibliothèque

    • 13 fonctions membres
    • Forme flexible de développement de règles du système flou
    • Système d'inférence Mamdani
    • Système d'inférence floue Sugeno
    • 5 méthode de défloutage pour les systèmes de type Mamdani
    • Quantité illimitée de variables d'entrée et de sortie

    Comment l'Utiliser

    Les fichiers de la bibliothèque Fuzzy sont situés dans \MQL5\Include\Math\Fuzzy. Pour utiliser cette bibliothèque, incluez dans votre programme les fichiers des fonctions désirées, par exemple :

    #include <Math\Fuzzy\mamdanifuzzysystem.mqh>
    #include <Math\Fuzzy\sugenofuzzysystem.mqh> 
    
    

    Une description détaillée des fonctions de la bibliothèque est disponible dans Code Base : Fuzzy - bibliothèque de développement des modèles flous


  4. La nouvelle propriété CHART_QUICK_NAVIGATION permet d'activer/désactiver la barre de navigation rapide dans le graphique. Si vous avez besoin de modifier et d'accéder à l'état de la propriété, utilisez les fonctions ChartSetInteger et ChartGetInteger.




    La barre de navigation est ouverte en appuyant sur les touches Entrée ou Espace. Elle vous permet de vous déplacer rapidement à une date spécifiée sur le graphique, mais également de changer de symbole et de période. Si votre programme MQL5 utilise les touches Entrée ou Espace, désactiver la propriété CHART_QUICK_NAVIGATION pour éviter l'interception de ces évènements par le terminal. La barre de navigation rapide peut toujours être ouverte par un double-clic.

  5. De nouvelles fonctions FileLoad et FileSave ont été ajoutées. Elles fournissent une méthode simplifiée de lecture et de sauvegarde des tableaux dans des fichiers. Contrairement ) FileRead* et FileWrite*, ces fonctions ne nécessitent pas le handle de l'indicateur. FileLoad et FileSave opèrent avec des tableaux d'élements de type numérique ou de structures simples qui ne contiennent pas de chaînes de caractères, de tableaux dynamiques ou de classes d'objets.
    long  FileLoad(
       const string filename,      // [in] Nom du fichier
       void         &buffer[],     // [out] Un tableau qui sera rempli par le fichier lu
       uint         common_flag=0  // [in] 0 - recherche du fichier dans le répertoire Files du terminal, FILE_COMMON - recherche dans le répertoire commun des terminaux
       );
    
    bool  FileSave(
       const string filename,      // [in] Nom du fichier
       const void   &buffer[],     // [in] Le tableau à sauvegarder dans un fichier
       uint         common_flag=0  // [in] 0 - crée un fichier dans le répertoire Files du terminal, FILE_COMMON - crée le fichier dans le répertoire commun des terminaux
       );
    
    
    Exemple d'écriture des ticks dans un fichier et de relecture du fichier :
    //--- paramètres d'entrée
    input int      ticks_to_save=1000; // Nombre de ticks
    //+------------------------------------------------------------------+
    //| Fonction de démarrage du programme                               |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       string  filename=_Symbol+"_ticks.bin";
       MqlTick ticks[];
    //---
       int copied=CopyTicks(_Symbol,ticks,COPY_TICKS_ALL,0,ticks_to_save);
       if(copied!=-1)
         {
          PrintFormat(" CopyTicks(%s) a copié %d ticks",_Symbol,copied);
          //--- Si l'historique des ticks est synchronisé, le code d'erreur est égal à zéro
          if(!GetLastError()==0)
             PrintFormat("%s : les ticks ne sont pas synchronisés. Erreur=",_Symbol,copied,_LastError);
          //---  Ecriture des ticks dans un fichier
          if(!FileSave(filename,ticks,FILE_COMMON))
             PrintFormat("FileSave() a échoué, erreur=%d",GetLastError());
         }
       else
          PrintFormat("Echec de CopyTicks(%s), Erreur=",_Symbol,GetLastError());
    //--- Relecture des ticks depuis le fichier
       ArrayFree(ticks);
       long count=FileLoad(filename,ticks,FILE_COMMON);
       if(count!=-1)
         {
          Print("Time\tBid\tAsk\tLast\tVolume\tms\tflags");
          for(int i=0;i<count;i++)
            {
             PrintFormat("%s.%03I64u:\t%G\t%G\t%G\t%I64u\t0x%04x",
             TimeToString(ticks[i].time,TIME_DATE|TIME_SECONDS),ticks[i].time_msc%1000,
             ticks[i].bid,ticks[i].ask,ticks[i].last,ticks[i].volume,ticks[i].flags);
            }
         }
      }
    
    

  6. Modification de l'affichage des indicateurs personnalisés avec le mode de dessin DRAW_CANDLES. Il est maintenant possible de définir de 1 à 3 couleurs pour ce mode. L'affichage des bougies dépends du nombre de couleurs défini.

    Si une couleur est spécifiée, toutes les bougies du graphiques seront intégralement peinte avec cette couleur.
    //--- Bougies dessinées avec la même couleur 
    #property indicator_label1  "Bougies à une couleur"
    #property indicator_type1   DRAW_CANDLES
    //--- Une seule couleur est spécifiée, donc toutes les bougies ont la même couleur
    #property indicator_color1  clrGreen  
    
    
    Si deux couleurs sont spécifiées, une couleur est utilisée pour les contours de la bougie, l'autre pour son corps.
    //--- La couleur des bougies diffère de la couleur des ombres
    #property indicator_label1  "Bougies à deux couleurs"
    #property indicator_type1   DRAW_CANDLES
    //--- Les contours des bougies et les ombres sont verts, le corps est blanc
    #property indicator_color1  clrGreen,clrWhite 
    
    
    Si trois couleurs sont spécifiées, une couleur est utilisée pour les contours de la bougie, les deux autres couleurs sont utilisées pour le corps des bougies montantes et descendantes.
    //--- La couleur des bougies diffère de la couleur des ombres
    #property indicator_label1  "Bougies à une couleur"
    #property indicator_type1   DRAW_CANDLES
    //--- Les contours des bougies et les ombres sont verts, le corps d'une bougie haussière est blanc, celui d'une bougie baissière est rouge
    #property indicator_color1  clrGreen,clrWhite,clrRed
    
    
    Le style DRAW_CANDLES permet de définir des couleurs personnalisées pour la bougie. Toutes les couleurs peuvent également être changées dynamiquement lorsque l'indicateur est en cours d'exécution, en utilisant la fonction PlotIndexSetInteger(drawing_index_DRAW_CANDLES, PLOT_LINE_COLOR, modifier_number, couleur) où modifier_number peut avoir les valeurs suivantes :
    • 0 – la couleur des bordures et des ombres
    • 1 – la couleur du corps d'une bougie haussière
    • 2 – la couleur du corps d'une bougie baissière
    //--- Définition de la couleur des bordures et des ombres
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue);
    //--- Définition de la couleur du corps d'une bougie haussière
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrGreen);
    //--- Définition de la couleur du corps d'une bougie baissière
    PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
    
    
  7. Correction de bugs et utilisation améliorée de l'historique des ticks utilisant les fonctions CopyTicks.
  8. Avec le nouveau build, les opérateurs peuvent être utilisés dans les interfaces (ce qui n'était pas permis auparavant).

Market

  1. Correction d'une erreur qui pouvait provoquer une demande répétée de connexion à la MQL5.community lors de l'achat de produits sur le Market.

Tester

  1. Ajout de la traduction de l'interface en grec, malais et hébreux.

Documentation mise à jour.

29 septembre 2016
La plateforme web MetaTrader 5 est maintenant plus rapide et plus pratique
  • Ajout de la possibilité de redimensionner les blocs de l'application web, incluant les fenêtres du Market Watch et du graphique des prix.
  • Ajout de la possibilité de trier les colonnes dans les onglets Trade et Historique de la fenêtre Boîte à Outils. La largeur des colonnes peut être modifiée.
  • Ajout de l'onglet Détails et de la possibilité d'ajouter rapidement un symbole.
  • Amélioration globale de la vitesse d'exécution des opérations du terminal web grâce à l'optimisation du code. L'initialisation des comptes, l'ajout de symboles et le trading lui-même sont maintenant effectués encore plus rapidement.

26 septembre 2016
MetaTrader 5 iOS build 1403
  • Changement de l'affichage de la section Trade — la représentation des données de trading dépend maintenant du système de gestion du risque du compte de trading: modèle Forex, Futures ou Boursier.

  • Déplacement de la sélection de la langue de l'interface dans un menu séparé dans les paramètres généraux.
  • Corrections et améliorations.
26 septembre 2016
MetaTrader 5 Android build 1372
  • La plateforme supporte le mode multi-fenêtres permettant aux traders de surveiller les changements de prix sur plusieurs symboles simultanément.
  • Ajout de la possibilité de changer la hauteur de la sous-fenêtre d'un indicateur.
  • La plateforme mobile affiche désormais un bouton de sélection rapide du symbole et un menu séparé pour les paramètres du graphique. 

  • Nous avons également ajouté la possibilité d'éditer les niveaux des indicateurs et nous avons aussi traduit l'interface en bulgare.
16 septembre 2016
MetaTrader 5 Build 1430 : Onglet Exposition Mis à Jour

Terminal

  1. Implémentation du nouvel algorithme de calcul de l'onglet Exposition pour les marchés boursiers. La plateforme adapte dorénavant l'affichage des actifs suivant le système de gestion du risque appliqué au compte de trading : modèle Forex, Futures ou Boursier.

    La session Actifs est utile pour ceux tradant le Forex ou les futures en bourse affichant leur statut actuel sur le marché. Les mêmes devises peuvent être trouvées sous différents symboles : comme l'une des devises d'une paire, comme devise de base, etc. Par exemple, vous pouvez avoir des directions opposées sur les GBPUSD, USDJPY et GBPJY. Dans cette situation, il est très difficile de comprendre combien de devises vous détenez et de combien vous avez besoin. Avoir plus de trois positions complique encore plus la tâche. Dans ce cas, le statut total du compte est facilement disponible dans l'onglet Actifs.
    Utilisons les trois mêmes positions comme exemple :

    Buy GBPJPY 1 lot à 134.027 — reçus 100 000 GBP, donnés 134 027 000 JPY
    Sell USDJPY 1 lot à 102.320 — donnés 100 000 USD, reçus 102 320 000 JPY
    Sell GBPUSD 1 lot à 1.30923 — donnés 100 000 GBP, reçus 103 920 USD

    Nous avons acheté et vendu 100 000 GPB simultanément. Nous avons 0 GBP, et l'onglet Actifs n'affiche pas cette devise. Pour l'USD, nous en avons donné dans un cas et reçus dans un autre. L'onglet Actifs calcule le revenu final et l'ajoute au solde actuel puisque la devise du dépôt est également l'USD. Le JPY a participé dans deux transactions, l'onglet affiche donc sa valeur totale.




    Ceux utilisant le modèle boursier peuvent utiliser la section pour comprendre comment leur argent est utilisé. Contrairement au modèle précédent, les fonds sont retirés/ajoutés directement lorsque les transactions sont effectuées. Par exemple, si vous achetez de l'EURRUB, vous reçevez de l'EUR en une seule fois, tandis la somme appropriée en RUB est retirée du solde. Pendant le trading, le solde du compte peut même devenir négative : lorsque vous utilisez de l'argent emprunté alors que les actifs achetés sont utilisés comme collatéral. Dans ce cas, l'onglet Actifs vous permet de comprendre facilement le statut du compte de trading.

    Vous pouvez également voir la valeur de liquidation ici — le montant des fonds du compte et le prix (le résultat) de la clôture de toutes les positions actuelles au prix du marché.





  2. Correction de l'affichage du type de la transaction dans l'historique des opérations de trading.
  3. Correction de la répétition de l'affichage de la fenêtre de notification de risque lors de reconnexion à un compte de trading.
  4. Correction et optimisation de l'utilisation de la fenêtre de sélection d'un symbole de trading dans le cas d'un grand nombre de symboles (plusieurs milliers et plus).
  5. Correction de l'affichage des niveaux des indicateurs intégrés calculés sur la base d'une Moyenne Mobile (Bandes de Bollinger, Adaptive Moving Average, etc.). Auparavant, une erreur survenait lors du dessin des indicateurs dans une sous-fenêtre séparée.
  6. Correction d'une erreur qui pouvait occasionnellement interférer avec le placement d'ordres sur des contrats de futures dans le cas où le prix de l'ordre coïncide avec la limite supérieure ou inférieure du prix du contrat.

MQL5

  1. Compilation optimisée et accélerée des applications MQL5.
  2. Ajout du support des modificateurs 'final' et 'override' pour les classes, les structures et les fonctions.

    Modificateur 'final' pour les classes et les structures
    La présence du modificateur 'final' dans la déclaration d'une structure ou d'une classe interdit tout héritage ultérieur. S'il n'y a pas besoin de faire des changements supplémentaires dans la classe (structure) ou si ces changements ne sont pas acceptables pour des raisons de sécurité, déclarez cette classe (structure) avec le modificateur 'final'. Dans ce cas, toutes les méthodes de la classe sont également considérée implicitement comme 'final'.
    class CFoo final
      {
      //--- corps de la classe
      };
     
    class CBar : public CFoo
      {
      //--- corps de la classe
      };
    Lors de la tentative d'héritage d'une classe ayant le modificateur 'final' comme ci-dessus, le compilateur affiche une erreur :
    cannot inherit from 'CFoo' as it has been declared as 'final'
    see declaration of 'CFoo'

    Modificateur 'override' pour les fonctions
    Le modificateur 'override' signifie qu'une fonction déclarée devrait toujours redéfinir la méthode de la classe parent. L'utilisation des modificateurs vous permet d'éviter des erreurs lors des spécialisations, telles qu'un changement de signature de la méthode. Par exemple, la méthode 'func' acceptant une variable de type 'int' est définie dans la classe de base :
    class CFoo
      {
       void virtual func(int x) const { }
      };
    La méthode est surchargée dans la classe héritée :
    class CBar : public CFoo
      {
       void func(short x) { }
      };
    Mais le type de l'argument est changé par erreur de 'int' en 'short'. En fait, la surcharge de la méthode au lieu de sa spécialisation est effectuée dans ce cas. Tout en se conformant à l'algorithme de surcharge de la définition d'une fonction, le compilateur peut dans certains cas sélectionner une méthode définie dans la classe de base au lieu de celle spécialisée.

    Pour éviter ce genre d'erreurs, le modificateur 'override' devrait être explicitement ajouté à la méthode spécialisée.
    class CBar : public CFoo
      {
       void func(short x) override { }
      };
    Si la signature de la méthode est changée pendant la spécialisation, le compilateur ne peut pas trouver la méthode de la classe parent ayant la même signature, provoquant l'erreur de compilation :
    'CBar::func' method is declared with 'override' specifier but does not override any base class method

    Modificateur 'final' pour les fonctions

    Le modificateur 'final' agit de la façon inverse — il empêche la spécialisation d'une méthode dans les classe dérivées. Si l'implémentation de la méthode est auto-suffisante et complète, déclarez-la avec le modificateur 'final' pour vous assurer qu'elle ne sera pas changée ultérieurement.
    class CFoo
      {
       void virtual func(int x) final { }
      };
     
    class CBar : public CFoo
      {
       void func(int) { }
      };
     
    Lors de la tentative de spécialisation d'une méthode ayant le modificateur 'final' comme ci-dessus, le compilateur affiche une erreur :
    'CFoo::func' method declared as 'final' cannot be overridden by 'CBar::func'
    see declaration of 'CFoo::func'
  3. Correction de la compilation des fonctions template avec des paramètres par défaut.

Market

  1. Correction de quelques erreurs dans le tri des produits du Market.

Tester

  1. Correction de la mise à jour des prix actuels du marché pour les ordres et positions ouvertes dans le mode de test visuel.
  2. Suppression du slippage pendant l'exécution des ordres Buy Limit et Sell Limit lors du test de symboles boursiers.
  3. Correction de la génération occasionnelle de prix incorrects dans le mode de test "Prix d'ouverture".
  4. Correction de la génération d'évènements OnTradeTransaction lors du test.
  5. Lors d'un test basé sur les ticks réels, les données incorrectes des prix des ticks (bid ou last suivant le prix utilisé pour générer une barre) et les valeurs low et high de la barre de la minute existante apparaissent dans le journal du testeur.

MetaEditor

  1. Correction de l'affichage du profilage des données dans les fichiers de code source.

Documentation mise à jour.

19 août 2016
MetaTrader 5 Build 1395 : Opérations de transaction plus rapides et améliorations de Test visuel

Terminal

  1. Le terminal client prévoit désormais un envoi plus rapide des ordres de négociation.
  2. Correction d'une erreur qui empêchait l'exécution des applications MQL5 sur les terminaux fonctionnant sous Windows 10 de 32-bit, build 1607.
  3. Le navigateur affiche maintenant lorsque le compte de négociation fonctionne en mode de Couverture ou de Compensation.
  4. Une nouvelle commande de menu contextuel a été ajoutée au navigateur, il vous permet de vous connecter à une borne Internet à l'aide d'un compte sélectionné.
  5. La section Aide du menu a été mise à jour, et propose maintenant des liens vers des guides vidéo.
  6. Correction des erreurs liées aux opérations sur affichage à haute résolution (4K)
  7. Correction des erreurs en traduction perse de l'interface utilisateur.

MQL5

  1. Ajout d'une indication vide* pour permettre aux utilisateurs de créer des collections abstraites d'objets. Une indication vers un objet de n'importe quelle classe peut être enregistrée à ce type de variable.
    Il est recommandé d'utiliser l'opérateur dynamic_cast<class name *>(indication vide *) afin de revenir en arrière. Si la conversion n'est pas possible, le résultat est NULL.
    class CFoo { };
    class CBar { };
    //+------------------------------------------------------------------+
    //| Script program start function                                    |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       void *vptr[2];
       vptr[0]=new CFoo();
       vptr[1]=new CBar();
    //---
       for(int i=0;i<ArraySize(vptr);i++)
         {
          if(dynamic_cast<CFoo *>(vptr[i])!=NULL)
             Print("CFoo * object at index ",i);
          if(dynamic_cast<CBar *>(vptr[i])!=NULL)
             Print("CBar * object at index ",i);
         }
       CFoo *fptr=vptr[1];  // Will return an error while casting pointers, vptr[1] is not an object of CFoo
      }
    //+------------------------------------------------------------------+

  2. Ajout du support pour l'opérateur [ ] pour libellés. L'opérateur permet aux utilisateurs de bénéficier d'un symbole à partir d'une chaîne par index. Si l'index spécifié est en dehors de la chaîne, le résultat est 0.
    String text="Bonjour"; ushort symb=texte[0];// retournera le code de symbole 'H'
  3. Ajout d'une deuxième version du gestionnaire d'événements TesterInit avec la signature int OnTesterInit (vide), qui peut renvoyer INIT_SUCCEEDED (0) ou INIT_FAILED (ou toute valeur non nulle). Si OnTesterInit renvoie une valeur différente de zéro, l'optimisation ne commencera pas.
  4. Correction d'une erreur qui pourrait aboutir à différents résultats renvoyés par les différents fonctions ChartGetString surchargées.

Testeur

  1. Ajout de commandes supplémentaires et les touches de raccourci pour essai visuel. Maintenant il est possible de configurer des diagrammes dans le testeur visuel comme dans le terminal : changer les couleurs, contrôler la visibilité des différents éléments, appliquer des modèles, etc.




  2. Correction de la fonction de mise en veille en mode de test « prix ouvert ».
  3. Correction de la formation d’état incorrect des barres sur les échelles de temps W1 et MN1

MetaEditor

  1. Traduction UI ajoutée en chinois traditionnel.

Mise à jour de la documentation.

8 août 2016
MetaTrader 5 iOS build 1371
  • Une nouvelle conception des messages. Les messages MQL5.community et les notifications push depuis la plateforme de bureau sont maintenant affichés comme des discussions des messageries populaires sur mobiles.
  • Il est maintenant possible de basculer dans l'une des 23 langues disponibles directement depuis la plateforme. Par exemple, si vous préférez utiliser l'interface en anglais, vous pouvez le choisir dans la page "A Propos" sans changer le paramètre de la langue de votre périphérique.
5 août 2016
MetaTrader 5 Android build 1338
  •  Nouveau chat MQL5.community intégré.
  •  Nouvelle option de transfert des certificats SSL depuis la plateforme de bureau.
  •  Nouvelles traductions de l'interface en perse et en hollandais.
15 juillet 2016
MetaTrader 5 Beta Build 1365 : Time & Sales et accès aux ticks pendant les tests

Terminal

  1. La fonctionnalité "Time & Sales" (Heures & Ventes) a été ajoutée au Market Depth.




    Qu'est-ce que Time & Sales ?
    La fonctionnalité Time & Sales fournit le prix et l'heure de chaque trade exécuté en bourse. Les informations sur chaque trade incluent l'heure à laquelle le trade a été exécuté, sa direction (achat ou vente), mais également son prix et son volume. Pour chaque analyse visuelle, différentes couleurs sont utilisées pour indiquer différentes directions : bleu pour les trades Buy, rose pour les trades Sell, vert signifie une direction indéfinie. Les volumes des trades sont également affichés sous forme d'histogramme.

    Comment Time & Sales peut vous aider à comprendre le marché
    La fonctionnalité Time & Sales fournit des outils pour une analyse plus détaillée du marché. La direction du trade suggère qui l'a initié : l'acheteur ou le vendeur. Le volume des trades permet aux traders de comprendre le comportement des participants du marché : les trades sont-ils effectués par des gros ou des petits joueurs, quelle est leur activité. La vitesse d'exécution du trade et le volume des trades sur différents niveaux de prix peuvent aider les traders à estimer l'importance des niveaux.

    Comment utiliser les données du Time & Sales
    En plus de l'analyse visuelle du tableau, vous pouvez sauvegarder les détails des trades dans un fichier CSV. Ils peuvent ensuite être analysés avec d'autres logiciels, tels que MS Excel. Le fichier contient les données suivantes séparées par des virgules :
    Time,Bid,Ask,Last,Volume,Type
    2016.07.06 16:05:04.305,89360,89370,89370,4,Buy
    2016.07.06 16:05:04.422,89360,89370,89370,2,Buy
    2016.07.06 16:05:04.422,89360,89370,89370,10,Buy
    2016.07.06 16:05:04.669,89360,89370,89370,1,Buy
    2016.07.06 16:05:05.968,89360,89370,89360,7,Sell
    Si vous souhaitez sauvegarder les données dans un fichier, ouvrez le menu contextuel :



    La plateforme du courtier doit être mise à jour avec la version 1365 pour activer la détection correcte de la direction des trades.
  2. Le temps entre l'arrivée d'un nouveau tick/changement du Market depth et l'appel aux fonctions OnTick et OnCalculate a été réduit significativement. Le temps entre l'arrivée d'un évènement de changement d'état d'un trade et l'appel aux fonctions OnTick et OnCalculate a également été réduit. Les programmes MQL5 fournissent maintenant une réponse plus rapide aux évènements du marché.
  3. Les demandes de trades sont maintenant envoyées plus rapidement lorsque l'authentification étendue avec les certificats SSL est utilisée.
  4. La traduction de l'interface utilisateur en perse a été mise à jour.
  5. Correction de l'affichage des commandes de fixation des SL/TP dans le menu contextuel du graphique lors de l'utilisation du mode de couverture.

Tester

  1. Une nouvelle fonctionnalité du tester permet de demander l'historique des ticks pendant les tests utilisant la fonction CopyTicks. Dans les versions précédentes, l'accès aux ticks n'était pas disponible dans le Strategy Tester.

    • Dans le mode "Chaque tick", la fonction retournera l'historique des ticks générés. Il est possible de demander jusqu'aux 128.000 derniers ticks.
    • Dans le mode "Chaque tick basé sur les ticks réels", la fonction retournera l'historique des ticks réels. La profondeur des données demandées dépend de la disponibilité des données d'historique. Cependant, notez que les derniers 128.000 ticks sont mis en cache dans le Strategy Tester, et que la demande sera effectuée rapidement. Un historique plus profond est demandé depuis le disque dur, donc l'exécution de la demande peut prendre plus de temps.
    • La fonction ne fonctionnera pas dans les modes "Prix d'ouverture uniquement" et "1 minute OHLC", car l'historique des ticks n'est pas créé dans ces modes.

  2. Ajout du support des millisecondes. Dans les versions précédentes, l'unité de base du temps dans le Strategy Tester était égal à une seconde.

    • Les fonctions EventSetMillisecondTimer et Sleep sont maintenant plus précises dans le Tester.
    • La précision de la livraison des ticks pendant le test d'un EA multi-devises a été augmentée. Dans les versions précédentes, si une seconde contenait plusieurs ticks (c'est à dire que le volume des ticks d'une barre 1 minute excédait 60), la même heure était mise pour tous ces ticks. Cela n'importe pas lors du test d'un Expert Advisor sur une seule devise, car les ticks sont passés séquentiellement à l'Expert Advisor. Cependant, lors du test d'un Expert Advisor sur plusieurs paires, il est important de connaître la paire pour laquelle le tick est arrivé le premier. Dans les versions précédentes, les ticks de chaque symbole étaient passés à l'Expert Advisor séquentiellement : en premier tous les ticks dans la seconde pour un symbole, puis tous les ticks pour l'autre symbole. Ils sont maintenant envoyés en prenant en compte les millisecondes.

      Lorsque les ticks réels sont utilisés pendant les tests, les millisecondes sont prises depuis les données source du tick. Lorsque les ticks sont générés, les millisecondes sont mises suivant le volume du tick. Par exemple, si 3 ticks tiennent dans une seconde, leurs nombres de millisecondes seront égaux à 000, 333 et 666.

  3. Dans les modes "Prix d'ouverture uniquement" et "1 minute OHLC", les ordres en attentes et les ordres SL/TP sont maintenant exécutés au prix demandé et non pas au prix courant au moment de l'exécution. L'algorithme d'exécution au prix du marché utilisé dans les modes précis (chaque tick et ticks réels) ne convient pas pour les modes moins précis. Dans certains modes, les ticks intermédiaires ne sont pas générés, une différence entre le prix demandé dans l'ordre et le prix courant (Open ou OHLC) peut donc être significative. L'exécution des ordres aux prix demandés dans les modes "Prix d'ouverture uniquement" et "1 minute OHLC" fournissent des résultats de test plus précis.

  4. Ajout du support du test avancé dans le mode visuel. Deux fenêtres distinctes sont maintenant ouvertes pour le test dans le passé et pour le test avancé, permettant aux utilisateurs de comparer les performances d'un Expert Advisor sur différents intervalles de temps.




    La fenêtre du test avancé n'est ouverte qu'une fois le test sur la période principale terminé.

  5. La charge du dépôt est maintenant affichée dans le graphique principal du test au lieu du niveau de marge. La charge est calculée comme étant le rapport marge/fonds propres.


  6. Tester : Correction du calcul des commissions comme un pourcentage annuel pendant le test.

MQL5

  1. Le comportement de la fonction OrderSend pendant le placement, la modification ou l'annulation d'un ordre a changé. Le changement ne s'applique qu'aux ordres envoyés vers des systèmes de trading externes. Dans les versions précédentes, le contrôle de la fonction OrderSend était retourné une fois que l'ordre avait été placé avec succès (pris en compte) par le serveur du courtier. Le contrôle n'est maintenant retourné qu'une fois une notification venant d'un système de trading externe, informant que l'ordre y a été placé avec succès, est reçue.

    Le diagramme ci-dessous montre les comportements précédents (flèches rouges) et actuel de la fonction :




  2. Un nouveau champ dans la structure MqlTradeResult : retcode_external - un code d'erreur dans le système de trading externe. L'utilisation et les types de ces erreurs dépendent du courtier du système externe de trading auquel les opérations de trading sont envoyées. Par exemple, les valeurs de retcode_external remplies par le Moscow Exchange sont différentes de celles de DGCX.

  3. Nouvelles propriétés dans l'énumération ENUM_CHART_PROPERTY_STRING : CHART_EXPERT_NAME et CHART_SCRIPT_NAME. La fonction ChartGetString permet maintenant aux utilisateurs de trouver le nom d'un Expert Advisor et/ou d'un script attaché à un graphique défini par le paramètre chart_id.

Signaux

  1. Correction d'erreurs occasionnelles en raison desquelles la copie d'une opération 'close by' pouvait échouer.
  2. Amélioration de la correspondance automatique des paires de devises contenant RUB et RUR.

Market

  1. Correction du tri par catégorie des produits.

MetaEditor

  1. Correction de la mise en place du focus dans le champ du texte de remplacement lors de l'ouverture de la boîte de dialogue de remplacement.
  2. Correction du remplacement de plusieurs occurences de texte lors de la recherche en arrière à partir de la position actuelle.


Documentation mise à jour.


5 juillet 2016
Plateforme Web MetaTrader 5 : Publication officielle

Après deux mois de test public, la version web de la plateforme multi-actifs MetaTrader 5 a été publiée officiellement. Elle permet de trader le Forex et les bourses depuis n'importe quel navigateur et n'importe quel système d'exploitation. Seule une connexion Internet est nécessaire, aucune installation de logiciel n'est demandée.

L'application combine les principaux avantages des versions de bureau (haute vitesse, support de plusieurs marchés et fonctions étendues de trading) avec l'aspect pratique de la nature multi-plateformes du terminal web. La fonctionnalité principale de la nouvelle version est le Depth of Market, qui n'était pas présent dans la version beta.

La plateforme web permet aux traders d'effectuer des analyses techniques et des opérations de trading comme dans la version de bureau. La plateforme web fournit les fonctionnalités suivantes :

  • Systèmes de comptabilisation des positions par compensation et par couverture
  • 31 indicateurs techniques
  • 23 objets d'analyse
  • Trading-En-1-Clic et ensemble complet d'ordres de trading
  • Interface en 41 langues
19 mai 2016
MetaTrader 5 iOS build 1335

Il est maintenant plus facile de transférer les certificats SSL depuis la version de bureau vers la version mobile. Vous n'avez plus besoin d'iTunes pour le faire.

MetaTrader 5 vous permet d'ajouter une protection supplémentaire à votre compte en utilisant un certificat. Sans le certificat, la connexion est impossible. Si le certificat a été créé sur la version de bureau, vous devez le transférer pour pouvoir vous connecter à votre compte depuis votre appareil mobile.

Pour cela, ouvrez la plateforme de bureau, faites un clic droit sur le compte désiré dans la fenêtre Navigator, et sélectionnez Transfert. Définissez le mot de passe du certificat qui ne sera connu que par vous, ouvrez la plateforme mobile et connectez-vous à votre compte. Il vous sera alors immédiatement demandé d'importer le certificat.

De plus, la dernière version inclut la procédure de migration pour les comptes transférés depuis MetaTrader 4. Si votre compte a été transféré vers la plateforme de 5ème génération, vous serez chaleureusement accueilli, les dernières fonctionnalités vous sont présentées et il vous est proposé de changer votre mot de passe.

13 mai 2016
MetaTrader 5 Platform build 1340 : Transfert pratique des certificats vers les appareils mobiles et améliorations du Strategy Tester

Terminal

  1. Les certificats utilisés pour la connexion avancée peuvent être transférés de façon pratique de la plateforme de bureau vers les terminaux mobiles.

    La plateforme de trading supporte l'authentification étendue en protégeant un compte de trading en utilisant un certificat SSL en complément d'un mot de passe. Le certificat est un fichier qui est généré individuellement pour chaque compte sur le serveur de trading. Ce fichier est unique et la connexion au compte n'est pas possible sans le certificat.

    Dans les versions précédentes de la plateforme, tout certificat demandé et généré depuis le terminal de bureau devait être copié manuellement et installé sur l'appareil pour permettre l'utilisation du compte de trading depuis MetaTrader 5 Mobile pour iPhone/iPad ou pour Android. Les certificats peuvent maintenant être transférés de façon plus pratique.

    Processus de Transfert du Certificat
    Un certificat est transféré via un serveur de trading :

    • Un certificat est d'abord crypté sur le terminal de bureau : le détenteur du compte définit un mot de passe pour le cryptage du certificat en utilisant l'algorithme sécurisé AES-256. Ce mot de passe n'est connu que de l'utilisateur, il n'est pas envoyé sur le serveur.
    • Par la suite, le certificat crypté est envoyé sur le serveur de trading, où il est stocké jusqu'à ce que le terminal mobile l'ai reçu, mais pas plus d'une heure.
    • Pour recevoir le certificat sur un appareil mobile, l'utilisateur doit se connecter au compte de trading depuis le terminal mobile. Après s'être connecté, il est demandé à l'utilisateur d'importer le certificat. Pour effecture l'import, l'utilisateur doit spécifier le mot de passe utilisé pour le cryptage du certificat sur le terminal de bureau.

    Le processus de transfert du certificat est sécurisé : le serveur de trading n'est utilisé que comme stockage intermédiaire, et le certificat est crypté du côté du client. Le mot de passe du certificat n'est pas transmis ou stocké sur le serveur de trading.

    Comment Transférer un Certificat
    Connectez-vous à votre compte depuis le terminal mobile et sélectionnez "Transférer le Certificat" dans son menu contextuel :



    Saisissez le mot de passe principal du compte pour confirmer qu'il vous appartient bien. Définissez ensuite un mot de passe pour protéger le certificat avant de l'envoyer sur le serveur. Définissez un mot de passe composé d'au moins 8 chiffres.

    Après avoir envoyé le certificat sur le serveur avec succès, ouvrez le terminal mobile et connectez-vous à votre compte. Il vous sera demandé immédiatement d'importer le certificat. Confirmez et saisissez le mot de passe que vous avez défini dans le terminal de bureau.



    Vous pouvez voir le certificat importé dans la section "A Propos - Certificats".
    Les plateformes MetaTrader 5 pour iPhone/iPad et pour Android mises à jour pour le support du transfert du certificat seront publiées bientôt.

Tester

  1. Un algorithme mis à jour pour l'exécution des ordres en attente, des SL et des TP qui fournit des conditions de test plus précises. Options avancées de test visuel.

    Quoi de Neuf pour les Instruments Boursiers
    Sur le marché réel, les graphiques des instruments échangés sont générés sur la base du prix Last (le prix de la dernière transaction exécutée). Les Ordres Stop sont également déclenchés au prix Last. Les ordres Limit sont déclenchés aux prix Bid et Ask. Tous les types d'ordres sont toujours exécutés aux prix Bid/Ask actuels du marché. Le Strategy Tester a été mis à jour et émule dorénavant mieux les conditions réelles du marché :
      Avant
    Après
    Déclencheur Bid/Ask pour tous les types d'Ordres en Attente et SL/TP
    Bid/Ask pour les Ordres Limit
    Last pour les ordres Stop, Stop-Limit et SL/TP
    Exécution Le prix spécifié dans l'ordre pour tous les types d'Ordres en Attente et les SL/TP
    Bid/Ask au moment du déclenchement de l'ordre pour tous les types d'Ordres en Attente et les SL/TP

    Considérons l'exemple sur le symbole Si-6.16. Un nouvel ordre Buy Stop au prix de déclenchement = 72580 est défini alors que les prix actuels sont : Bid=72570, Ask=72572, Last=72552. De nouveaux prix courants sont reçus dans un flux de prix :

    • Bid=72588
    • Ask=72590
    • Last=72580


    Le déclencheur pour les Ordres Stops des instruments échangés est le prix Last. Donc le prix Last=72580 reçu dans le flux active l'ordre Buy Stop. Dans les versions précédentes, le même prix était utilisé pour exécuter cet ordre. Ce comportement est incorrect car il n'y a plus de prix Ask=72580 sur la marché pour exécuter la transaction Buy.


    Le prix actuel Ask=72590 est utilisé dans la version mise à jour du testeur, l'ordre Buy Stop est donc exécuté à ce prix. Le nouvel algorithme d'exécution du Tester est plus proche des conditions réelles du marché. L'opération de trading serait exécutée à un prix inexistant sur le marché en utilisant l'algorithme précédent, ce qui amènerait à des résultats de test inexacts.

    Quoi de Neuf pour les Autres Instruments
    L'algorithme n'a pas été changé pour les autres instruments : les prix Bid/Ask sont utilisés pour tous les types d'ordres en attente et pour les SL et TP. Cependant, le mode d'exécution a changé : dans les versions précédentes, les ordres étaient exécutés au prix spécifié dans l'ordre. Les prix Bid et Ask du marché au moment de l'activation de l'ordre sont maintenant utilisés.

    Quoi de Neuf pour le Test Visuel
    Durant le test visuel, les lignes des prix High Ask et Low Bid des barres ne sont pas affichées dans le testeur. Sur ces graphiques, il est plus pratique de tester les Expert Advisors qui tradent les instruments échangés car les barres de ces instruments, de même que le déclenchement des ordres, sont basées sur les prix Last, alors que les opérations au marché sont exécutées aux prix Bid et Ask.



    Nouvelle option sur le graphique de test visuel : navigation jusqu'à une date spécifiée. Double-cliquez sur le graphique et saisissez la date et l'heure désirées. Il est également possible de naviguer jusqu'à n'importe quel ordre ou n'importe quelle position : double-cliquez sur l'opération de trading souhaitée dans les onglets Trade, Historique ou Opérations.
  2. Améliorations des entrées du journal à propos des prix et de l'historique des ticks chargés avant le démarrage du test. Le journal contient maintenant les informations sur l'avancement du chargement de l'historique et sur la quantité de données téléchargées et le temps passé :
    2016.05.10 12:47:53    Core 1    5.10 Mb of history processed in 0:00.842
    2016.05.10 12:47:53    Core 1    GBPUSD: history synchronization completed [5225 Kb]

MQL5

  1. Correction du comportement de la fonction CopyTicks : elle pouvait retourner moins de ticks que demandé.
  2. Correction de la génération des fonctions template.
  3. Documentation mise à jour.

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

12 mai 2016
Plateforme Web MetaTrader 5 : Maintenant disponible en beta test

La version beta de la Plateforme Web MetaTrader 5 a été publiée. Le nouveau produit combine l'aspect pratique et la nature multi-plateformes du terminal web avec les avantages de la version de bureau de MetaTrader 5 – vitesse, support de plusieurs marchés et fonctions étendues de trading.

La plateforme web MetaTrader 5 est disponible sur la MQL5.community et elle permet aux traders d'effectuer des opérations de trading sur les marchés financiers depuis n'importe quel navigateur et n'importe quel système d'exploitation, incluant Windows, Mac et Linux. Vous n'avez besoin que d'une connexion internet. Aucun logiciel supplémentaire n'est requis.

Les fonctionnalités suivantes sont disponibles dans la version beta :

  • Système de couverture
  • 30 indicateurs techniques
  • 24 objets d'analyse
  • Ensemble complet d'ordres de trading de MetaTrader 5
  • Interface en 41 langues
La publication de la version beta vise à fournir un test public grandeur nature et à permettre aux traders d'évaluer les nouvelles capacités.
22 avril 2016
MetaTrader 5 build 1325 : Option de couverture (hedging) et test sur les ticks réels

Terminal

  1. Nous avons ajouté le second système de comptabilisation - la couverture (hedging) qui étend les possibilités des traders Forex. Il est maintenant possible d'avoir plusieurs positions par symbole, incluant des positions dans des directions opposées. Cela ouvre la voie à l'implémentation des stratégies de trading basées sur le fameux "blocage" - si le prix se déplace contre un trader, il peut ouvrir une position dans la direction opposée.

    Puisque le nouveau système est similaire à celui utilisé dans MetaTrader 4, il sera familier aux traders. En même temps, les traders pourront profiter de tous les avantages de la 5ème version de la plateforme - remplissage des ordres avec des transactions multiples (incluant les remplissages partiels), multi-devises et testeur multi-threads avec le support du réseau MQL5 Cloud Network, et bien plus.

    Vous pouvez maintenant utiliser un compte pour trader les marchés qui adhèrent au système de compensation et permettent de n'avoir qu'une seule position par instrument, et utiliser un autre compte dans la même plateforme pour trader le Forex et appliquer la couverture (hedging).

    Ouverture d'un compte couvert et visualisation du type de comptabilisation des positions
    Un système de comptabilisation des positions est défini au niveau du compte et affiché dans l'en-tête de la fenêtre du terminal et dans le Journal :



    Pour ouvrir un compte de démo avec la couverture, activez l'option correspondante :




    Système de compensation
    Avec ce système, vous ne pouvez avoir qu'une seule position pour un symbole au même moment :

    • Si une position ouverte existe pour un symbole, l'exécution d'une transaction dans la même direction augmente le volume de cette position.
    • Si une transaction est exécutée dans la direction opposée, le volume de la position existante peut être diminué, la position peut être fermée (lorsque le volume de la transaction est égal au volume de la position) ou renversé (si le volume de la transaction opposée est supérieur à celui de la position actuelle).

    Ce qui a causé la transaction opposée n'importe pas - un ordre au marché exécuté ou un ordre en attente déclenché.

    L'exemple ci-dessous montre l'exécution de deux transactions Buy sur l'EURUSD de 0,5 lots chacunes :


    L'exécution des deux transactions a résulté en une seule position d'1 lot.

    Système de couverture
    Avec ce système, vous pouvez avoir plusieurs positions ouvertes d'un seul et même symbole, incluant des positions opposées.

    Si vous avez une position ouverte pour un symbole et que vous exécutez une nouvelle transaction (ou qu'un ordre en attente est déclenché), une nouvelle position est ouverte en supplément. Votre position actuelle ne change pas.

    L'exemple ci-dessous montre l'exécution de deux transactions Buy sur l'EURUSD de 0,5 lots chacunes :


    L'exécution de ces transactions a résulté dans l'ouverture de deux positions séparées.

    Nouveau type d'opération - Close By
    Un nouveau type d'opération de trading a été ajouté pour les comptes de couverture - fermer une position par une position opposée. Cette opération permet de fermer deux positions dans des directions opposées d'un même symbole. Si les positions opposées ont des nombres de lots différents, un seul des deux ordres reste ouvert. Son volume sera égal à la différence des lots des positions fermées, tandis que la direction de la position et le prix d'ouverture correspondront (en volume) à la plus grande des positions fermées.

    Comparée à une fermeture simple des deux positions, la fermeture par une position opposée permet aux traders d'économiser un spread :

    • Dans le cas d'une fermeture simple, les traders doivent payer un spread deux fois : lors de la fermeture d'une position buy à un prix inférieur (Bid) et lors de la fermeture d'une position sell à un prix supérieur (Ask).
    • Lors de l'utilisation d'une position opposée, le prix d'ouverture de la seconde position est utilisé pour fermer la première, tandis que le prix d'ouverture de la première position est utilisé pour fermer la seconde position.


    Dans ce dernier cas, un ordre "close by" est placé. Les tickets des positions fermées sont spécifiés dans leurs commentaires. Une paire de positions opposées est fermée par deux transactions "out by". Le profit/perte résultant de la fermeture des deux positions n'est spécifié que dans une seule transaction.


  2. En plus du support de la couverture, la version de la nouvelle plateforme fournit de plus grandes opportunités pour migrer les comptes depuis MetaTrader 4. Les courtiers peuvent maintenant transférer automatiquement les comptes vers MetaTrader 5, en incluant toutes les opérations : ordres ouverts et ordres en attente, et historique de trading complet.

    Une fenêtre de bienvenue s'affiche lors de la première connexion au compte migré depuis MetaTrader 4. La transmission des données est cryptée de façon sécurisée pendant la migration. Pour commencer, spécifiez le mot de passe de votre compte que vous avez utilisé dans MetaTrader 4, et saisissez un nouveau mot de passe.



    Une fois connecté, vous pourrez continuer à utiliser votre compte, comme s'il avait été ouvert depuis MetaTrader 5. L'historique complet de toutes les positions de MetaTrader 4 est ajouté automatiquement au nouveau compte.

    Les tickets des ordres et des positions (incluant l'historique des ordres) ne sont pas conservés pendant l'import, car un enregistrement de l'historique de MetaTrader 4 peut être importé en 4 opérations d'historique dans MetaTrader 5. Les nouveaux tickets sont assignés à tous les enregistrements de trading.

    Les numéros des comptes peuvent être préservés ou remplacés suivant la façon dont le courtier les importe.

  3. Ajout du Chat (messagerie instantanée). Maintenant, vous pouvez communiquer avec vos amis et collègues de la MQL5.community. Le chat affiche tous les messages personnels de votre compte MQL5. Pour commencer à communiquer, connectez-vous à votre compte directement depuis la fenêtre de chat ou via les paramètres de la plateforme : Outils -> Options -> Communauté.




  4. Fenêtre de création d'un compte de démo simplifiée, ajout de la possibilité de créer des comptes utilisant la couverture (hedging). Vous n'avez plus besoin de remplir le formulaire en entier. Il suffit de spécifier les données de base et de sélectionner les paramètres de trading : type de compte, dépôt, effet de levier, et la capacité de couverture.



  5. Ajout de l'attribution automatique d'un compte de démonstration pour un démarrage rapide. Si la plateforme n'a pas encore de compte, un compte de démonstration sur le premier serveur disponible est alloué lors du lancement. Après l'ouverture, la connexion au compte est immédiatement établie.

  6. Maintenant, chaque position a un ticket - un numéro unique. Il correspond habituellement au ticket d'un ordre utilisé pour l'ouverture de la position, sauf si le ticket a changé comme étant le résultat d'une opération de service sur le serveur, par exemple, lors de la facturation d'un swap pour la réouverture d'une position. Un ticket est attribué automatiquement à toutes les positions disponibles après la mise à jour du terminal.



  7. Correction de la définition des niveaux de Stop Loss et de Take Profit lors du placement d'un ordre au marché menant à un renversement de position. Jusqu'à récemment, aucun des niveaux correspondants n'étaient définis pour une nouvelle position.
  8. Correction des prix affichés avec quatre décimales ou plus sur les éléments du panneau de trading en un clic.
  9. Corrrection de l'affichage des nouvelles dans la fenêtre d'aperçu avant impression.
  10. Correction de l'affichage du graphique des ticks.
  11. Correction de l'ouverture du Market Depth après l'arrêt d'urgence du terminal.
  12. Ajout d'une vérification si les ordres du marché sont autorisés lors de l'affichage des éléments de contrôle du panneau de trading en un clic.
  13. Calculs du profit et de la marge optimisés dans le cas d'un grand nombre d'ordres et de positions ouvertes.
  14. Ajout de la traduction de l'interface utilisateur en malais.
  15. Manuel Utilisateur entièrement révisé. Nouveau design, des captures d'écran interactifs et des vidéos intégrées - apprenez le trading dans MetaTrader 5 avec un maximum de confort :



  16. Correction de l'affichage des objets graphiques dans le mode "Graphique en arrière plan".

Tester

  1. Ajout de la possibilité de tester les robots de trading et les indicateurs techniques avec l'historique réel des ticks.

    Le test et l'optimisation sur les ticks réels est aussi proche que possible des conditions réelles. Au lieu de générer des ticks basés sur les données 1-minute, il est possible d'utiliser les ticks réels accumulés par un courtier. Ce sont les ticks reçus des bourses et des fournisseurs de liquidités.

    Pour commencer le test ou l'optimisation en ticks réels, sélectionnez le mode correspondant dans le testeur de stratégie :



    Les données des ticks sont plus grosses comparées à celles en 1-minute. Les télécharger peut prendre un peu plus de temps lors du premier test. Les données téléchargées des ticks sont stockées par mois dans les fichiers TKC situés dans \bases\[nom du serveur de trading]\ticks\[nom du symbole]\.

    Test sur des ticks réels
    Lors d'un test sur des ticks réels, un spread peut changer pendant une barre d'une minute, tandis qu'en générant les ticks pendant une minute, le spread est fixé si la barre correspondante est utilisée.

    Si le Market of Depth est affiché pour un symbole, les barres sont construites selon le dernier cours de transaction exécuté (Last). Sinon, le tester essaye d'abord de construire les barres sur les prix Last, et s'ils n'existent pas, il utilise les prix Bid. L'évènement OnTick est déclenché sur tous les ticks, indépendamment de la présence ou non du prix Last.

    Veuillez noter que les opérations de trading sont toujours effectuées aux prix Bid et Ask, même si le graphique est construit sur les prix Last. Par exemple, si un Expert Advisor, qui n'utilise que les prix d'ouverture des barres pour le trading (par exemple la Moyenne Mobile intégrée), reçoit un signal au prix Last, il effectue une opération à un autre prix (Bid ou Ask suivant la direction). Si le mode "Chaque tick" est utilisé, les barres sont construites avec les prix Bid, alors que les trades sont effectués aux prix Bid et Ask. Le prix Ask est calculé comme Bid + spread fixe de la barre 1 minute correspondante.

    Si l'historique d'un symbole a une barre 1-minute sans données de ticks, le tester génère les ticks dans le mode "Chaque tick". Cela permet de tester l'EA sur une certaine période dans le cas où les données des ticks d'un courtier sont insuffisantes. Si l'historique d'un symbole n'a pas de barre 1-minute mais que les données des ticks pour la minute sont présentes, ces ticks sont ignorés. Les données en minute sont considérées comme plus fiables.

    Test sur des ticks réels sur le réseau MQL5 Cloud Network
    Le test sur les ticks réels est disponible non seulement sur les agents locaux et distants, mais également sur le réseau MQL5 Cloud Network. L'optimisation d'une stratégie qui pourrait prendre des mois peut être terminée en seulement quelques heures en utilisant la puissance de calcul de milliers d'ordinateurs.

    Pour tester une stratégie en utilisant le réseau MQL5 Cloud Network, activez l'utilisation des agents du cloud :



    Les tests sur des ticks réels en utilisant le réseau MQL5 Cloud Network peuvent consommer beaucoup de données. Ceci peut affecter de manière significative le paiement pour l'utilisation de la puissance du réseau.
  2. Correction d'une erreur qui empêchait le calcul des commissions sur plusieurs types de symboles de trading.
  3. Correction du remplissage du champ Expert pour les ordres de trading résultant de l'activation des SL/TP selon le champ Expert de la position correspondante. Auparavant, il n'était pas rempli.
  4. Correction du basculement entre les onglets de résultats des tests normaux et avancés.
  5. Correction du calcul et de l'affichage de l'indicateur "Enveloppes".
  6. Test visuel optimisé.
  7. Calculs du profit et de la marge optimisés dans le cas d'un grand nombre d'ordres et de positions ouvertes.
  8. Opérations de trading optimisées pendant le trading à haute fréquence.
  9. La synchronisation de l'historique n'est maintenant plus effectuée si une demande pour des propriétés non critiques du symbole (ne nécessitant pas les cotations actuelles) a été faite. Par exemple, SYMBOL_SELECT, SYMBOL_DIGITS, SYMBOL_SPREAD_FLOAT, SYMBOL_TRADE_CALC_MODE, SYMBOL_TRADE_MODE, SYMBOL_TRADE_STOPS_LEVEL, SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_EXEMODE, etc. Auparavant, l'historique était synchronisé à chaque demande d'une propriété du symbole, même non critique.
  10. Correction du calcul des swaps comme pourcentage par an.

MQL5

  1. Le format des fichiers exécutables EX5 a changé pour implémenter les nouvelles fonctionnalités du langage MQL5 et la nouvelle option de couverture dans MetaTrader 5. Toutes les applications EX5 compilées avec les builds précédents de MetaEditor fonctionneront correctement après la mise à jour, c'est à dire que la compatibilité ascendante est complètement préservée.

    Les programmes EX5 compilés avec le build 1325 et supérieur ne fonctionneront pas avec les anciens builds du terminal - la compatibilité descendante n'est pas supportée.

  2. Ajout du support des classes abstraites et des fonctions virtuelles pures.

    Les classes abstraites sont utilisées pour créer des entités génériques que vous prévoyez d'utiliser pour créer des classes dérivées spécifiques. Une classe abstraite ne peut être utilisée que comme classe de base pour d'autres classes, c'est pourquoi il est impossible de créer un objet du type d'une classe abstraite.

    Une classe contenant au moins une fonction virtuelle pure est abstraite. Les classes dérivées d'une classe abstraite doivent donc implémenter toutes ses fonctions virtuelles pures, autrement, elles seront également des classes abstraites.

    Une fonction virtuelle est déclarée "pure" en utilisant la syntaxe du spécificateur pure. Considérons l'exemple de la classe CAnimal, qui n'est créée que pour fournir des fonctions communes - les objets du type CAnimal sont trop généraux pour un usage pratique. La classe CAnimal est donc un bon exemple de classe abstraite :
    class CAnimal
      {
    public:
                          CAnimal();     // Constructeur
       virtual void       Sound() = 0;   // Une fonction virtuelle pure
    private:
       double             m_legs_count;  // Le nombre de pattes de l'animal
      };
    Ici Sound() est une fonction virtuelle pure, car elle est déclarée avec le spécificateur de fonction virtuelle pure (=0).

    Les fonctions virtuelles pures sont les fonctions virtuelles pour lesquelles le spécificateur pure est utilisé : (=NULL) ou (=0). Exemple de déclaration et d'utilisation d'une classe abstraite :
    class CAnimal
      {
    public:
       virtual void       Sound()=NULL;   // méthode PURE, doit être surchargée dans la classe dérivée, CAnimal est maintenant abstraite et ne peut pas être créée
      };
    //--- Dérivée d'une classe abstraite
    class CCat : public CAnimal
     {
    public:
      virtual void        Sound() { Print("Myau"); } // la méthode pure est surchargée, CCat n'est pas abstraite et peut être créée
     };
    
    //--- exemples de mauvaises utilisations
    new CAnimal;         // Erreur de 'CAnimal' - le compilateur retourne l'erreur "ne peut pas instantier une classe abstraite"
    CAnimal some_animal; // Erreur de 'CAnimal' - le compilateur retourne l'erreur "ne peut pas instancier une classe abstraite"
    
    //--- exemples d'utilisations correctes
    new CCat;  // aucune erreur - la classe CCat n'est pas abstraite
    CCat cat;  // aucune erreur - la classe CCat n'est pas abstraite
    Restrictions concernant les classes abstraites
    Si le constructeur d'une classe abstraite appelle une fonction virtuelle pure (directement ou indirectement), le résultat est indéterminé.
    //+------------------------------------------------------------------+
    //| Une classe de base abstraite                                     |
    //+------------------------------------------------------------------+
    class CAnimal
      {
    public:
       //--- une fonction virtuelle pure
       virtual void      Sound(void)=NULL;
       //--- fonction
       void              CallSound(void) { Sound(); }
       //--- constructeur
       CAnimal()
        {
         //--- un appel explicite à la méthode virtuelle
         Sound();
         //--- un appel implicite (en utilisant une troisième fonction)
         CallSound();
         //--- un constructeur et/ou un destructeur appelle toujours ses propres fonctions,
         //--- même si elles sont virtuelles et surchargées par une fonction appellée dans une classe dérivée
         //--- si la fonction appelée est purement virtuelle
         //--- l'appel génère une erreur critique d'exécution "appel à une fonction virtuelle pure"
        }
      };
    Cependant, les constructeurs et les destructeurs des classes abstraites peuvent appeler d'autres fonctions membres.

  3. Ajout du support des pointeurs de fonctions pour simplifier l'organisation des modèles d'événements.

    Pour déclarer un pointeur de fonction, spécifiez le type "pointeur de fonction", par exemple :
    typedef int (*TFunc)(int,int);
    TFunc est maintenant un type, et il est possible de déclarer une variable pointant vers la fonction :
    TFunc func_ptr;
    La variable func_ptr peut stocker l'adresse de la fonction pour la déclarer par la suite :
    int sub(int x,int y) { return(x-y); }
    int add(int x,int y) { return(x+y); }
    int neg(int x)       { return(~x);  }
    
    func_ptr=sub;
    Print(func_ptr(10,5));
    
    func_ptr=add;
    Print(func_ptr(10,5));
    
    func_ptr=neg;           // erreur : neg n'est pas du type  int (int,int)
    Print(func_ptr(10));    // erreur : il devrait y avoir 2 paramètres
    Les pointeurs de fonctions peuvent être stockés et passés comme paramètres. Vous ne pouvez pas avoir un pointeur vers une méthode de classe non statique.

  4. MqlTradeRequest comporte deux nouveaux champs :

    • position - ticket de la position. Remplissez-le lorsque vous changez et fermez une position pour une identification claire lors du trading en mode "couverture" (hedging). Dans le système de compensation, le remplissage de ce champ n'affecte rien puisque les positions sont identifiées par le nom du symbole.
    • position_by - ticket de la position opposée. Il est utilisé lors de la fermeture d'une position par la position opposée (ouverte sur le même symbole mais dans une direction opposée). Le ticket est utilisé uniquement dans le système de couverture (hedging).

  5. Ajout de la valeur TRADE_ACTION_CLOSE_BY dans l'énumération ENUM_TRADE_REQUEST_ACTIONS des types d'opérations de trading - ferme une position par une position opposée. Le ticket est utilisé uniquement dans le système de couverture (hedging).

  6. Ajout des tickets de l'opération de trading dans les énumérations des propriétés des ordres, des transactions et des positions correspondantes :

    • Ajout de la propriété ORDER_TICKET à ENUM_ORDER_PROPERTY_INTEGER - ticket de l'ordre. Un numéro unique attribué à chaque ordre.
    • Ajout de la propriété DEAL_TICKET à ENUM_DEAL_PROPERTY_INTEGER - ticket de la transaction. Un numéro unique attribué à chaque transaction.
    • Ajout de la propriété POSITION_TICKET à ENUM_POSITION_PROPERTY_INTEGER - ticket de la position. Numéro unique attribué à chaque nouvelle ouverture de position. Il correspond habituellement au ticket d'un ordre utilisé pour l'ouverture de la position, sauf si le ticket a changé comme étant le résultat d'une opération de service sur le serveur, par exemple, lors de la facturation d'un swap pour la réouverture d'une position. Pour trouver l'ordre utilisé pour ouvrir une position, appliquez la propriété POSITION_IDENTIFIER. La valeur POSITION_TICKET correspond à MqlTradeRequest::position.

  7. Ajout de la valeur ORDER_TYPE_CLOSE_BY à l'énumération ENUM_ORDER_TYPE des types d'ordres - ordre close by.
  8. Ajout de la valeur ORDER_POSITION_BY_ID à l'énumération ENUM_ORDER_PROPERTY_INTEGER des propriétés de l'ordre - l'identifiant de la position opposée pour les types d'ordres ORDER_TYPE_CLOSE_BY.
  9. Ajout de la valeur DEAL_ENTRY_OUT_BY à l'énumération ENUM_DEAL_ENTRY des directions de transactions - une transaction est exécutée comme le résultat d'une opération close by.
  10. MqlTradeTransaction comporte également deux champs similaires :

    • position - ticket d'une position affectée par une transaction. Il est rempli pour les transactions liées à la manipulation des ordres du marché (TRADE_TRANSACTION_ORDER_* excepté TRADE_TRANSACTION_ORDER_ADD, où le ticket de la position n'est pas encore assigné) et de l'historique de l'ordre (TRADE_TRANSACTION_HISTORY_*).
    • position_by - ticket de la position opposée. Il est utilisé lors de la fermeture d'une position par la position opposée (ouverte sur le même symbole mais dans une direction opposée). Il n'est rempli que pour les ordres fermant une position par une position opposée (close by) et les transactions fermées par une transaction opposée (out by).

  11. Ajout de la fonction PositionGetTicket - retourne le ticket de la position par son index dans la liste des positions ouvertes et la sélectionne automatiquement pour travailler avec par la suite en utilisant les fonctions PositionGetDouble, PositionGetInteger et PositionGetString.
    ulong  PositionGetTicket(
       int  index      // index dans la liste des positions
       );

  12. Ajout de la fonction PositionSelectByTicket - sélectionne une position ouverte pour la poursuite du travail avec un ticket spécifié.
    bool  PositionSelectByTicket(
       ulong   ticket     // ticket de la position
       );

  13. Ajout de la valeur SYMBOL_MARGIN_HEDGED à l'énumération ENUM_SYMBOL_INFO_DOUBLE des propriétés des symboles - taille d'un contrat ou marge pour un lot de positions couvertes (positions opposées pour un même symbole).

    • Si la marge initiale (SYMBOL_MARGIN_INITIAL) est spécifiée pour un symbole, la marge couverte est spécifiée comme une valeur absolue (en termes monétaires).
    • Si la marge initiale n'est pas définie (égale à 0), une taille de contrat à utiliser dans le calcul de la marge est spécifiée dans SYMBOL_MARGIN_HEDGED. La marge est calculée en utilisant l'équation correspondant au type du symbole (SYMBOL_TRADE_CALC_MODE).

    La calcul de la marge pour les positions couvertes est décrit en détails dans l'Aide de la plateforme de trading MetaTrader 5.

  14. Ajout de la valeur ACCOUNT_MARGIN_MODE à l'énumération des propriétés du compte ENUM_ACCOUNT_INFO_INTEGER - mode de calcul de marge pour le compte de trading actuel :

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING - utilisé pour le marché over-the-counter avec le mode de compensation des positions (une position par symbole). Le calcul de la marge est basé sur le type du symbole (SYMBOL_TRADE_CALC_MODE).
    • ACCOUNT_MARGIN_MODE_EXCHANGE - utilisé sur les marchés des changes. La calcul de la marge est basé sur les remises spécifiées dans les paramètres du symbole. Les remises sont définies par le courtier, elles ne peuvent cependant pas être inférieures aux valeurs définies par la place boursière.
    • ACCOUNT_MARGIN_MODE_RETAIL_HEDGING - utilisé pour le marché over-the-counter avec comptabilisation indépendante des positions (couverture, il peut y avoir plusieurs position pour un même symbole). Le calcul de la marge est basé sur le type du symbole (SYMBOL_TRADE_CALC_MODE). La taille de la marge couverte (SYMBOL_MARGIN_HEDGED) est également prise en compte.

  15. Ajout de la valeur TERMINAL_SCREEN_DPI à l'énumération ENUM_TERMINAL_INFO_INTEGER des propriétés du terminal client - la résolution d'affichage des données est mesurée en points par pouce (PPP ou DPI). La connaissance de ce paramètre permet de spécifier la taille des objets graphiques afin qu'ils apparaissent de façon similaire sur des écrans ayant des résolutions différentes.

  16. Ajout de la valeur TERMINAL_PING_LAST aux propriétés du terminal client - la dernière valeur connue du ping vers le serveur de trading en microsecondes. Une seconde contient un million de microsecondes.

  17. Correction du résultat de retour de l'appel à la fonction SendFTP. Auparavant, FALSE était retourné après un envoi réussi au lieu de TRUE.
  18. MQL5 : Correction d'une erreur dans la fonction StringConcatenate qui provoquait occasionnellement des erreurs d'exécution "Access violation".
  19. Correction d'erreurs pouvant survenir lors de l'utilisation de fonctions templatées.
  20. Ajout de la possibilité d'afficher des lignes dépassant 4.000 caractères pour les fonctions Print, Alert et Comment.
  21. Correction d'une erreur dans la fonction ArrayCompare qui se produisait lors de la comparaison d'un tableau avec lui-même avec des points de départ différents.
  22. Ajout du support de la couverture (hedging) à la Bibliothèque Standard :

    CPosition
    Méthodes ajoutées :

    • SelectByMagic - sélectionne une position par son nombre magique et son symbole pour l'utiliser ensuite.
    • SelectByTicket - sélectionne une position par son ticket pour l'utiliser ensuite.

    CTrade
    Méthodes ajoutées :

    • RequestPosition - retourne le ticket de la position.
    • RequestPositionBy - retourne le ticket de la position opposée.
    • PositionCloseBy - ferme la position avec le ticket spécifié par une position opposée.
    • SetMarginMode - définit le mode de calcul de la marge en fonction des paramètres du compte courant.

    Ajout de la prise en compte de la surcharge des méthodes :

    • PositionClose - ferme la position par son ticket.
    • PositionModify - modifie la position par son ticket.

    CAccountInfo
    Méthodes modifiées :

    • MarginMode - retourne le mode de calcul de la marge. Jusqu'à récemment, la méthode fonctionnait de façon similaire à la nouvelle méthode StopoutMode.
    • MarginDescription - retourne le mode de calcul de la marge sous forme de chaîne de caractères. Jusqu'à récemment, la méthode fonctionnait de façon similaire à la nouvelle méthode StopoutModeDescription.

    Méthodes ajoutées :

    • StopoutMode - retourne le mode de spécification du niveau minimum de marge.
    • StopoutModeDescription - retourne le mode de spécification du niveau minimum de marge sous forme de chaîne de caractères.

    CExpert
    Méthodes ajoutées :

    • SelectPosition - sélectionne une position pour l'utiliser ensuite.

  23. Ajout de quelques améliorations à la Bibliothèque Standard.
  24. Correction du déchargement des DLL.
  25. Ajout du support des constructeurs de classes templatées.

Signaux

  1. Corrections de quelques signaux de trading présentant des erreurs d'affichage.

MetaEditor

  1. Correction de la recherche de mots par fichiers en mode "Mot Entier Uniquement".
  2. Ajout du déplacement vers un fichier en double cliquant sur la ligne correspondante du résultat de la compilation.
  3. Correction de l'affichage de certains éléments de contrôle dans Windows XP.
Documentation mise à jour.
1 avril 2016
MetaTrader 5 Platform Build 1295

Terminal

  1. Pour étendre les possibilités des traders de Forex, nous avons ajouté un second système de comptabilisation - la couverture (hedging). Il est maintenant possible d'avoir plusieurs positions par symbole, incluant des positions dans des directions opposées. Cela ouvre la voie à l'implémentation des stratégies de trading basées sur le fameux "blocage" - si le prix se déplace contre un trader, il peut ouvrir une position dans la direction opposée.

    Puisque le nouveau système est similaire à celui utilisé dans MetaTrader 4, il sera familier aux traders. En même temps, les traders pourront profiter de tous les avantages de la 5ème version de la plateforme - remplissage des ordres avec des transactions multiples (incluant les remplissages partiels), multi-devises et testeur multi-threads avec le support du réseau MQL5 Cloud Network, et bien plus.

    Vous pouvez maintenant utiliser un compte pour trader les marchés qui adhèrent au système de compensation et permettent de n'avoir qu'une seule position par instrument, et utiliser un autre compte dans la même plateforme pour trader le Forex et appliquer la couverture (hedging).

    Ouverture d'un compte couvert et visualisation du type de comptabilisation des positions
    Un système de comptabilisation des positions est défini au niveau du compte et est affiché dans l'en-tête de la fenêtre du terminal et dans le Journal :



    Pour ouvrir un compte de démo avec la couverture, activez l'option correspondante :




    Système de compensation
    Avec ce système, vous pouvez n'avoir qu'une seule position commune pour un symbole à la fois :

    • Si une position ouverte existe pour un symbole, l'exécution d'une transaction dans la même direction augmente le volume de cette position.
    • Si une transaction est exécutée dans la direction opposée, le volume de la position existante peut être diminué, la position peut être fermée (lorsque le volume de la transaction est égal au volume de la position) ou renversé (si le volume de la transaction opposée est supérieur à celui de la position actuelle).


    Ce qui a causé la transaction opposée n'importe pas - un ordre au marché exécuté ou un ordre en attente déclenché.

    L'exemple ci-dessous montre l'exécution de deux transactions Buy sur l'EURUSD de 0.5 lots chacunes :


    L'exécution des deux transactions a résulté en une seule position d'1 lot.

    Système de couverture
    Avec ce système, vous pouvez avoir plusieurs positions ouvertes d'un seul et même symbole, incluant des positions opposées.

    Si vous avez une position ouverte pour un symbole et que vous exécutez une nouvelle transaction (ou qu'un ordre en attente est déclenché), une nouvelle position est ouverte en supplément. Votre position actuelle ne change pas.

    L'exemple ci-dessous montre l'exécution de deux transactions Buy sur l'EURUSD de 0.5 lots chacunes :


    L'exécution de ces transactions a résulté dans l'ouverture de deux positions séparées.

    Nouveau type d'opération - Close By
    Un nouveau type d'opération de trading a été ajouté pour les comptes de couverture - fermer une position par une position opposée. Cette opération permet de fermer deux positions dans des directions opposées d'un même symbole. Si les positions opposées ont des nombres de lots différents, un seul des deux ordres reste ouvert. Son volume sera égal à la différence des lots des positions fermées, tandis que la direction de la position et le prix d'ouverture correspondront (en volume) à la plus grande des positions fermées.

    Comparée à une fermeture simple des deux positions, la fermeture par une position opposée permet aux traders d'économiser un spread :

    • Dans le cas d'une fermeture simple, les traders doivent payer un spread deux fois : lors de la fermeture d'une position buy à un prix inférieur (Bid) et lors de la fermeture d'une position sell à un prix supérieur (Ask).
    • Lors de l'utilisation d'une position opposée, le prix d'ouverture de la seconde position est utilisé pour fermer la première, tandis que le prix d'ouverture de la première position est utilisé pour fermer la seconde position.


    Dans ce dernier cas, un ordre "close by" est placé. Les tickets des positions fermées sont spécifiés dans leurs commentaires. Une paire de positions opposées est fermée par deux transactions "out by". Le profit/perte résultant de la fermeture des deux positions n'est spécifié que dans une seule transaction.



  2. Ajout de la possibilité de tester les robots de trading et les indicateurs techniques avec l'historique réel des ticks.

    Le test et l'optimisation sur les ticks réels est aussi proche que possible des conditions réelles. Au lieu de générer des ticks basés sur les données 1-minute, il est possible d'utiliser les ticks réels accumulés par un courtier. Ce sont les ticks reçus des bourses et des fournisseurs de liquidités.

    Pour commencer le test ou l'optimisation en ticks réels, sélectionnez le mode correspondant dans le testeur de stratégie :



    Les données des ticks sont plus grosses comparées à celles en 1-minute. Les télécharger peut prendre un peu plus de temps lors du premier test. Les données téléchargées des ticks sont stockées par mois dans les fichiers TKC situés dans \bases\[nom du serveur de trading]\ticks\[nom du symbole]\.

    Test sur des ticks réels
    Lors d'un test sur des ticks réels, un spread peut changer pendant une barre d'une minute, tandis qu'en générant les ticks pendant une minute, le spread est fixé si la barre correspondante est utilisée.

    Si le Market of Depth est affiché pour un symbole, les barres sont construites selon le dernier cours de transaction exécuté (Last). Sinon, le tester essaye d'abord de construire les barres sur les prix Last, et s'ils n'existent pas, il utilise les prix Bid. L'évènement OnTick est déclenché sur tous les ticks, indépendamment de la présence ou non du prix Last.

    Veuillez noter que les opérations de trading sont toujours effectuées aux prix Bid et Ask, même si le graphique est construit sur les prix Last. Par exemple, si un Expert Advisor, qui n'utilise que les prix d'ouverture des barres pour le trading (par exemple la Moyenne Mobile intégrée), reçoit un signal au prix Last, il effectue une opération à un autre prix (Bid ou Ask suivant la direction). Si le mode "Chaque tick" est utilisé, les barres sont construites avec les prix Bid, alors que les trades sont effectués aux prix Bid et Ask. Le prix Ask est calculé comme Bid + spread fixe de la barre 1 minute correspondante.

    Si l'historique d'un symbole a une barre 1-minute sans données de ticks, le tester génère les ticks dans le mode "Chaque tick". Cela permet de tester l'EA sur une certaine période dans le cas où les données des ticks d'un courtier sont insuffisantes. Si l'historique d'un symbole n'a pas de barre 1-minute mais que les données des ticks pour la minute sont présentes, ces ticks sont ignorés. Les données en minute sont considérées comme plus fiables.
    Actuellement, les tests et l'optimisation sur de vrais tics ne sont possibles que sur les agents locaux et distants. Le support au MQL5 Cloud Network sera ajouté prochainement.

  3. Ajout du Chat (messagerie instantanée). Maintenant, vous pouvez communiquer avec vos amis et collègues de la MQL5.community. Le chat affiche tous les messages personnels de votre compte MQL5. Pour commencer à communiquer, connectez-vous à votre compte directement depuis la fenêtre de chat ou via les paramètres de la plateforme : Outils -> Options -> Communauté.




  4. Fenêtre de création d'un compte de démo simplifiée, ajout de la possibilité de créer des comptes utilisant la couverture (hedging). Vous n'avez plus besoin de remplir le formulaire en entier. Il suffit de spécifier les données de base et de sélectionner les paramètres de trading : type de compte, dépôt, effet de levier, et la capacité de couverture.



  5. Ajout de l'attribution automatique d'un compte de démonstration pour un démarrage rapide. Si la plateforme n'a pas encore de compte, un compte de démonstration sur le premier serveur disponible est alloué lors du lancement. Après l'ouverture, la connexion au compte est immédiatement établie.

  6. Maintenant, chaque position a un ticket - un numéro unique. Il correspond habituellement au ticket d'un ordre utilisé pour l'ouverture de la position, sauf si le ticket a changé comme étant le résultat d'une opération de service sur le serveur, par exemple, lors de la facturation d'un swap pour la réouverture d'une position. Un ticket est attribué automatiquement à toutes les positions disponibles après la mise à jour du terminal.




  7. Correction de la définition des niveaux de Stop Loss et de Take Profit lors du placement d'un ordre au marché menant à un renversement de position. Jusqu'à récemment, aucun des niveaux correspondants n'étaient définis pour une nouvelle position.
  8. Correction des prix affichés avec quatre décimales ou plus sur les éléments du panneau de trading en un clic.
  9. Corrrection de l'affichage des nouvelles dans la fenêtre d'aperçu avant impression.
  10. Correction de l'affichage du graphique des ticks.
  11. Correction de l'ouverture du Market Depth après l'arrêt d'urgence du terminal.
  12. Ajout d'une vérification si les ordres du marché sont autorisés lors de l'affichage des éléments de contrôle du panneau de trading en un clic.
  13. Calculs du profit et de la marge optimisés dans le cas d'un grand nombre d'ordres et de positions ouvertes.
  14. Ajout de la traduction de l'interface utilisateur en malais.
  15. Manuel Utilisateur entièrement révisé. Nouveau design, des captures d'écran interactifs et des vidéos intégrées - apprenez le trading dans MetaTrader 5 avec un maximum de confort :




MQL5

  1. Ajout du support des classes abstraites et des fonctions virtuelles pures.

    Les classes abstraites sont utilisées pour créer des entités génériques que vous prévoyez d'utiliser pour créer des classes dérivées spécifiques. Une classe abstraite ne peut être utilisée que comme classe de base pour d'autres classes, c'est pourquoi il est impossible de créer un objet du type d'une classe abstraite.

    Une classe contenant au moins une fonction virtuelle pure est abstraite. Les classes dérivées d'une classe abstraite doivent donc implémenter toutes ses fonctions virtuelles pures, autrement, elles seront également des classes abstraites.

    Une fonction virtuelle est déclarée "pure" en utilisant la syntaxe du spécificateur pure. Considérons l'exemple de la classe CAnimal, qui n'est créée que pour fournir des fonctions communes - les objets du type CAnimal sont trop généraux pour un usage pratique. La classe CAnimal est donc un bon exemple de classe abstraite :
    class CAnimal
      {
    public:
                          CAnimal();     // constructeur
       virtual void       Sound() = 0;   // fonction virtuelle pure
    private:
       double             m_legs_count;  // nombre de pattes de l'animal
      };
    Ici Sound() est une fonction virtuelle pure car elle est déclarée avec le spécificateur de fonction virtuelle pure (=0).

    Les fonctions virtuelles pures sont les fonctions virtuelles pour lesquelles le spécificateur pure est utilisé : (=NULL) ou (=0). Exemple de déclaration et d'utilisation d'une classe abstraite :
    class CAnimal
      {
    public:
       virtual void       Sound()=NULL;   // méthode pure, doit être surchargée dans la classe dérivée, CAnimal est maintenant abstraite et ne peut pas être créée
      };
    //--- descendant de la classe abstraite
    class CCat : public CAnimal
     {
    public:
      virtual void        Sound() { Print("Myau"); } // la méthode pure est surchargée, CCat n'est pas abstraite et peut être créée
     };
    
    //--- exemples de mauvaises utilisations
    new CAnimal;         // Erreur de 'CAnimal' - le compilateur retourne l'erreur "ne peut pas instantier une classe abstraite"
    CAnimal some_animal; // Erreur de 'CAnimal' - le compilateur retourne l'erreur "ne peut pas instancier une classe abstraite"
    
    //--- exemples d'utilisations correctes
    new CCat;  // aucune erreur - la classe CCat n'est pas abstraite
    CCat cat;  // aucune erreur - la classe CCat n'est pas abstraite
    Restrictions concernant les classes abstraites
    Si le constructeur d'une classe abstraite appelle une fonction virtuelle pure (directement ou indirectement), le résultat est indéterminé.
    //+------------------------------------------------------------------+
    //| Une classe de base abstraite                                     |
    //+------------------------------------------------------------------+
    class CAnimal
      {
    public:
       //--- une fonction virtuelle pure
       virtual void      Sound(void)=NULL;
       //--- fonction
       void              CallSound(void) { Sound(); }
       //--- constructeur
       CAnimal()
        {
         //--- un appel explicite à la méthode virtuelle
         Sound();
         //--- un appel implicite (en utilisant une troisième fonction)
         CallSound();
         //--- un constructeur et/ou un destructeur appelle toujours ses propres fonctions,
         //--- même si elles sont virtuelles et surchargées par une fonction appellée dans une classe dérivée
         //--- si la fonction appelée est purement virtuelle
         //--- l'appel génère une erreur critique d'exécution "appel à une fonction virtuelle pure"
        }
      };
    Cependant, les constructeurs et les destructeurs des classes abstraites peuvent appeler d'autres fonctions membres.

  2. Ajout du support des pointeurs de fonctions pour simplifier l'organisation des modèles d'événements.

    Pour déclarer un pointeur de fonction, spécifiez le type "pointeur de fonction", par exemple :
    typedef int (*TFunc)(int,int);
    TFunc est maintenant un type, et il est possible de déclarer une variable pointant vers la fonction :
    TFunc func_ptr;
    La variable func_ptr peut stocker l'adresse de la fonction pour la déclarer par la suite :
    int sub(int x,int y) { return(x-y); }
    int add(int x,int y) { return(x+y); }
    int neg(int x)       { return(~x);  }
    
    func_ptr=sub;
    Print(func_ptr(10,5));
    
    func_ptr=add;
    Print(func_ptr(10,5));
    
    func_ptr=neg;           // erreur : neg n'est pas du type  int (int,int)
    Print(func_ptr(10));    // erreur : il devrait y avoir 2 paramètres
    Les pointeurs de fonctions peuvent être stockés et passés comme paramètres. Vous ne pouvez pas avoir un pointeur vers une méthode de classe non statique.

  3. MqlTradeRequest comporte deux nouveaux champs :

    • position - ticket de la position. Remplissez-le lorsque vous changez et fermez une position pour une identification claire lors du trading en mode "couverture" (hedging). Dans le système de compensation, le remplissage de ce champ n'affecte rien puisque les positions sont identifiées par le nom du symbole.
    • position_by - ticket de la position opposée. Il est utilisé lors de la fermeture d'une position par la position opposée (ouverte sur le même symbole mais dans une direction opposée). Le ticket est utilisé uniquement dans le système de couverture (hedging).

  4. Ajout de la valeur TRADE_ACTION_CLOSE_BY dans l'énumération ENUM_TRADE_REQUEST_ACTIONS des types d'opérations de trading - ferme une position par une position opposée. Le ticket est utilisé uniquement dans le système de couverture (hedging).

  5. Ajout des tickets de l'opération de trading dans les énumérations des propriétés des ordres, des transactions et des positions correspondantes :

    • Ajout de la propriété ORDER_TICKET à ENUM_ORDER_PROPERTY_INTEGER - ticket de l'ordre. Un numéro unique attribué à chaque ordre.
    • Ajout de la propriété DEAL_TICKET à ENUM_DEAL_PROPERTY_INTEGER - ticket de la transaction. Un numéro unique attribué à chaque transaction.
    • Ajout de la propriété POSITION_TICKET à ENUM_POSITION_PROPERTY_INTEGER - ticket de la position. Numéro unique attribué à chaque nouvelle ouverture de position. Il correspond habituellement au ticket d'un ordre utilisé pour l'ouverture de la position, sauf si le ticket a changé comme étant le résultat d'une opération de service sur le serveur, par exemple, lors de la facturation d'un swap pour la réouverture d'une position. Pour trouver l'ordre utilisé pour ouvrir une position, appliquez la propriété POSITION_IDENTIFIER. La valeur POSITION_TICKET correspond à MqlTradeRequest::position.

  6. Ajout de la valeur ORDER_TYPE_CLOSE_BY à l'énumération ENUM_ORDER_TYPE des types d'ordres - ordre close by.
  7. Ajout de la valeur ORDER_POSITION_BY_ID à l'énumération ENUM_ORDER_PROPERTY_INTEGER des propriétés de l'ordre - l'identifiant de la position opposée pour les types d'ordres ORDER_TYPE_CLOSE_BY.
  8. Ajout de la valeur DEAL_ENTRY_OUT_BY à l'énumération ENUM_DEAL_ENTRY des directions de transactions - une transaction est exécutée comme le résultat d'une opération close by.
  9. MqlTradeTransaction comporte également deux champs similaires :

    • position - ticket d'une position affectée par une transaction. Il est rempli pour les transactions liées à la manipulation des ordres du marché (TRADE_TRANSACTION_ORDER_* excepté TRADE_TRANSACTION_ORDER_ADD, où le ticket de la position n'est pas encore assigné) et de l'historique de l'ordre (TRADE_TRANSACTION_HISTORY_*).
    • position_by - ticket de la position opposée. Il est utilisé lors de la fermeture d'une position par la position opposée (ouverte sur le même symbole mais dans une direction opposée). Il n'est rempli que pour les ordres fermant une position par une position opposée (close by) et les transactions fermées par une transaction opposée (out by).

  10. Ajout de la fonction PositionGetTicket - retourne le ticket de la position par son index dans la liste des positions ouvertes et la sélectionne automatiquement pour travailler avec par la suite en utilisant les fonctions PositionGetDouble, PositionGetInteger et PositionGetString.
    ulong  PositionGetTicket(
       int  index      // index dans la liste des positions
       );

  11. Ajout de la fonction PositionSelectByTicket - sélectionne une position ouverte pour la poursuite du travail avec un ticket spécifié.
    bool  PositionSelectByTicket(
       ulong   ticket     // ticket de la position
       );

  12. Ajout de la valeur SYMBOL_MARGIN_HEDGED à l'énumération ENUM_SYMBOL_INFO_DOUBLE des propriétés des symboles - taille d'un contrat ou marge pour un lot de positions couvertes (positions opposées pour un même symbole).

    • Si la marge initiale (SYMBOL_MARGIN_INITIAL) est spécifiée pour un symbole, la marge couverte est spécifiée comme une valeur absolue (en termes monétaires).
    • Si la marge initiale n'est pas définie (égale à 0), une taille de contrat à utiliser dans le calcul de la marge est spécifiée dans SYMBOL_MARGIN_HEDGED. La marge est calculée en utilisant l'équation correspondant au type du symbole (SYMBOL_TRADE_CALC_MODE).

    La calcul de la marge pour les positions couvertes est décrit en détails dans l'Aide de la plateforme de trading MetaTrader 5.

  13. Ajout de la valeur ACCOUNT_MARGIN_MODE à l'énumération des propriétés du compte ENUM_ACCOUNT_INFO_INTEGER - mode de calcul de marge pour le compte de trading actuel :

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING - utilisé pour le marché over-the-counter avec le mode de compensation des positions (une position par symbole). Le calcul de la marge est basé sur le type du symbole (SYMBOL_TRADE_CALC_MODE).
    • ACCOUNT_MARGIN_MODE_EXCHANGE - utilisé sur les marchés des changes. La calcul de la marge est basé sur les remises spécifiées dans les paramètres du symbole. Les remises sont définies par le courtier, elles ne peuvent cependant pas être inférieures aux valeurs définies par la place boursière.
    • ACCOUNT_MARGIN_MODE_RETAIL_HEDGING - utilisé pour le marché over-the-counter avec comptabilisation indépendante des positions (couverture, il peut y avoir plusieurs position pour un même symbole). Le calcul de la marge est basé sur le type du symbole (SYMBOL_TRADE_CALC_MODE). La taille de la marge couverte (SYMBOL_MARGIN_HEDGED) est également prise en compte.

  14. Ajout de la valeur TERMINAL_SCREEN_DPI à l'énumération ENUM_TERMINAL_INFO_INTEGER des propriétés du terminal client - la résolution d'affichage des données est mesurée en points par pouce (PPP ou DPI). La connaissance de ce paramètre permet de spécifier la taille des objets graphiques afin qu'ils apparaissent de façon similaire sur des écrans ayant des résolutions différentes.

  15. Ajout de la valeur TERMINAL_PING_LAST aux propriétés du terminal client - la dernière valeur connue du ping vers le serveur de trading en microsecondes. Une seconde contient un million de microsecondes.

  16. Correction du résultat de retour de l'appel à la fonction SendFTP. Auparavant, FALSE était retourné après un envoi réussi au lieu de TRUE.
  17. Correction d'une erreur dans la fonction StringConcatenate qui provoquait occasionnellement des erreurs d'exécution "Access violation".
  18. Correction d'erreurs pouvant survenir lors de l'utilisation de fonctions templatées.
  19. Ajout de la possibilité d'afficher des lignes dépassant 4.000 caractères pour les fonctions Print, Alert et Comment.
  20. Correction d'une erreur dans la fonction ArrayCompare qui se produisait lors de la comparaison d'un tableau avec lui-même avec des points de départ différents.
  21. Ajout du support de la couverture (hedging) à la Bibliothèque Standard :

    CPosition
    Méthodes ajoutées :

    • SelectByMagic - sélectionne une position par son nombre magique et son symbole pour l'utiliser ensuite.
    • SelectByTicket - sélectionne une position par son ticket pour l'utiliser ensuite.

    CTrade
    Méthodes ajoutées :

    • RequestPosition - retourne le ticket de la position.
    • RequestPositionBy - retourne le ticket de la position opposée.
    • PositionCloseBy - ferme la position avec le ticket spécifié par une position opposée.
    • SetMarginMode - définit le mode de calcul de la marge en fonction des paramètres du compte courant.

    Ajout de la prise en compte de la surcharge des méthodes :

    • PositionClose - ferme la position par son ticket.
    • PositionModify - modifie la position par son ticket.

    CAccountInfo
    Méthodes modifiées :

    • MarginMode - retourne le mode de calcul de la marge. Jusqu'à récemment, la méthode fonctionnait de façon similaire à la nouvelle méthode StopoutMode.
    • MarginDescription - retourne le mode de calcul de la marge sous forme de chaîne de caractères. Jusqu'à récemment, la méthode fonctionnait de façon similaire à la nouvelle méthode StopoutModeDescription.

    Méthodes ajoutées :

    • StopoutMode - retourne le mode de spécification du niveau minimum de marge.
    • StopoutModeDescription - retourne le mode de spécification du niveau minimum de marge sous forme de chaîne de caractères.

    CExpert
    Méthodes ajoutées :

    • SelectPosition - sélectionne une position pour l'utiliser ensuite.

  22. Ajout de quelques améliorations à la Bibliothèque Standard.


Signaux

  1. Corrections de quelques signaux de trading présentant des erreurs d'affichage.


Tester

  1. Correction d'une erreur qui empêchait le calcul des commissions sur plusieurs types de symboles de trading.
  2. Correction du remplissage du champ Expert pour les ordres de trading résultant de l'activation des SL/TP selon le champ Expert de la position correspondante. Auparavant, il n'était pas rempli.
  3. Correction du basculement entre les onglets de résultats des tests normaux et avancés.
  4. Correction du calcul et de l'affichage de l'indicateur "Enveloppes".
  5. Test visuel optimisé.
  6. Calculs du profit et de la marge optimisés dans le cas d'un grand nombre d'ordres et de positions ouvertes.
  7. Opérations de trading optimisées pendant le trading à haute fréquence.
  8. La synchronisation de l'historique n'est maintenant plus effectuée si une demande pour des propriétés non critiques du symbole (ne nécessitant pas les cotations actuelles) a été faite. Par exemple, SYMBOL_SELECT, SYMBOL_DIGITS, SYMBOL_SPREAD_FLOAT, SYMBOL_TRADE_CALC_MODE, SYMBOL_TRADE_MODE, SYMBOL_TRADE_STOPS_LEVEL, SYMBOL_TRADE_FREEZE_LEVEL, SYMBOL_TRADE_EXEMODE, etc. Auparavant, l'historique était synchronisé à chaque demande d'une propriété du symbole, même non critique.

MetaEditor

  1. Correction de la recherche de mots par fichiers en mode "Mot Entier Uniquement".
  2. Ajout du déplacement vers un fichier en double cliquant sur la ligne correspondante du résultat de la compilation.
  3. Correction de l'affichage de certains éléments de contrôle dans Windows XP.


  1. Documentation mise à jour.
31 mars 2016
MetaTrader 5 iOS build 1261
  1. La plateforme de trading prend désormais en charge le deuxième système de comptabilité - Couverture. Le nouveau système permet d'ouvrir des positions multiples du même instrument financier, y compris des positions opposées. Maintenant, la plateforme fournit à la fois le trading d'échange avec le système de compensation et le trading du Forex avec l'un des deux systèmes disponibles.

    Le nouveau système de comptabilité d'une position est similaire à celle de MetaTrader 4, combiné avec tous les avantages de la plateforme de cinquième génération - exécution des ordres en utilisant plusieurs offres (y compris remplissage partiel), ordres stop-limit, etc.

    Mettez maintenant à jour la plateforme pour voir comment fonctionne l'option de couverture. Lors de l'ouverture d'un nouveau compte de démonstration, activez l'option \ "Utiliser couverture \". L'option sera disponible si le serveur de votre courtier a été mis à jour et configuré.

  2. Ainsi, la nouvelle version inclut des corrections de bugs mineurs et des améliorations.
123456789101112131415