Microsoft a publié il y a un mois une importante mise à jour de leur système d'exploitation Windows 10 Creators Update (Version 1703). Après avoir installé cette mise à jour, certains utilisateurs ne peuvent plus exécuter de programmes MQL4 dans leurs terminaux. Ce problème a été corrigé dans le nouveau build 1080 de la plateforme MetaTrader 4. Les Expert Advisors et les indicateurs s'exécutent maintenant correctement sur les graphiques, et aucune recompilation avec MetaEditor mis à jour n'est nécessaire.
Le support des versions du terminal client MetaTrader 4 inférieures à 1065 sera stoppé le 1er octobre 2017. Les versions non supportées du terminal ne pourront plus se connecter aux nouvelles versions du serveur. Nous vous recommandons fortement de mettre à jour vos terminaux en avance.
Dans la nouvelle version, une erreur liée au redémarrage des Expert Advisors sur les graphiques après le changement de période a été corrigée. Maintenant, les Expert Advisors ne s'arrêtent plus et sont correctement réinitialisés.
La mise à jout de la plateforme MetaTrader 4 correspondant à la publication du Windows 10 Insider Preview build 15007. En raison des mises à jour de sécurité dans la nouvelle version du système Windows 10, les terminaux clients MetaTrader 4 peuvent échouer à démarrer de façon occasionnelle.
Installez la nouvelle version de la plateforme pour préparer l'arrivée de la prochaine mise à jour de Windows 10.
Ajout du chat permettant aux traders de discuter avec d'autres membres de la MQL5.community. Spécifiez les noms des utilisateurs désirés dans les destinataires du message pour envoyer un message directement sur leurs appareils mobiles.
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 22 langues disponibles directement depuis la plateforme. Si vous préférez utiliser l'interface en anglais pendant que vous trader, vous pouvez le choisir dans les "Paramètres" ("A Propos" sur iPad) sans changer les paramètres de langue de votre appareil.
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 } //+------------------------------------------------------------------+
string text="Hello"; ushort symb=text[0]; // Renverra le code du symbole 'H'
Correction des erreurs signalées dans les journaux de crash.
class CAnimal { public: CAnimal(); // Constructeur virtual void Sound() = 0; // Une fonction virtuelle pure private: double m_legs_count; // Le nombre de jambes de l'animal };Ici Sound() est une fonction virtuelle pure, car elle est déclarée avec le spécificateur de fonction virtuelle pure PURE (=0).
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"); } // PURE est surchargée, CCat n'est pas abstraite et peut être créée }; //--- exemples de mauvaises utilisation new CAnimal; // Erreur de 'CAnimal' - le compilateur retourne l'erreur "ne peut pas instancier 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 abstraiteRestrictions sur les classes abstraites
//+------------------------------------------------------------------+ //| 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 constructor et/ou un destructeur appelle toujours ses propres fonctions, //--- même si elles sont virtuelles et surchargées par une fonction appelée dans une classe dérivée //--- si la fonction appelée est virtuelle pure //--- l'appel générera l'erreur d'exécution critique "appel à une fonction virtuelle pure" } };Cependant, les constructeurs et les destructeurs des classes abstraites peuvent appeler d'autres fonctions membres.
typedef int (*TFunc)(int,int);Maintenant, TFunc est un type, et il est possible de déclarer une variable comme un pointeur vers la fonction :
TFunc func_ptr;La variable func_ptr peut stocker le pointeur vers une fonction pour la déclarer plus tard :
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) type Print(func_ptr(10)); // erreur : il devrait y avoir deux paramètresLe 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.
Corrections d'erreurs rapportées dans les journaux de crash.
Vous pouvez maintenant définir un code PIN pour accéder à l'application. Il fournira à vos comptes une protection supplémentaire même si vous perdez votre appareil. Activez l'option "Verrouiller l'écran" dans les paramètres de l'application. Par défaut, le code PIN est identique à celui utilisé pour accéder au générateur de mot de passe à usage unique (OTP).
La nouvelle version inclut également différentes améliorations et corrections mineures.
La nouvelle version de la plateforme web MetaTrader 4 comporte l'ensemble complet d'indicateurs pour l'analyse technique. La plateforme web contient dorénavant 30 outils d'analyse techniques parmi les plus populaires fournis par la version de bureau de MetaTrader 4 :
Accelerator Oscillator |
DeMarker | Moyenne Mobile |
Accumulation/Distribution | Enveloppes | Moyenne Mobile d'un Oscillateur |
Alligator | Force Index |
On Balance Volume |
Average Directional Movement Index | Fractals | Parabolic SAR |
Average True Range |
Gator Oscillator | Relative Strength Index |
Awesome Oscillator | Ichimoku Kinko Hyo | Relative Vigor Index |
Bears Power |
MACD | Standard Deviation |
Bandes de Bollinger |
Market Facilitation Index |
Stochastic Oscillator |
Bulls Power |
Momentum | Volumes |
Commodity Channel Index |
Money Flow Index | Williams' Percent Range |
L'interface de la plateforme web est maintenant disponible en 38 langues. 14 nouvelles langues ont été ajoutées récemment :
hollandais |
lithuanien | croate |
grec | roumain | tchèque |
hébreux | serbe |
suédois |
italien | slovène |
estonien |
letton |
finlandais | |
Lancez la plateforme web dès maintenant et testez les nouvelles fonctionnalités!
La nouvelle version de la Plateforme Web MetaTrader 4 dispose de performances améliorées des graphiques, qui sont fournies par l'utilisation de la nouvelle technologie WebGL — maintenant, même avec plusieurs indicateurs en cours d'exécution, la plateforme web maintient des performances optimales.
La plateforme web dispose maintenant d'indicateurs techniques. Les indicateurs de Bill Williams suivants ont déjà été ajoutés :
Ajout d'un lien vers le tutoriel vidéo "Comment assembler un robot de trading" dans le MQL4 Wizard. Regardez la vidéo de trois minutes et développez un robot de trading sans écrire une seule ligne de code.
Correction des erreurs rapportées dans les journaux des crash.
//+------------------------------------------------------------------+ //| TemplTest.mq5 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Declaration d'un modele de classe | //+------------------------------------------------------------------+ template<typename T> class TArray { protected: T m_data[]; public: bool Append(T item) { int new_size=ArraySize(m_data)+1; int reserve =(new_size/2+15)&~15; //--- if(ArrayResize(m_data,new_size,reserve)!=new_size) return(false); //--- m_data[new_size-1]=item; return(true); } T operator[](int index) { static T invalid_index; //--- if(index<0 || index>=ArraySize(m_data)) return(invalid_index); //--- return(m_data[index]); } }; //+------------------------------------------------------------------+ //| Modèle de classe d'un tableau de pointeurs. Dans le destructeur, il supprime | //| les pointeurs vers lesquels ils étaient stockés dans le tableau. | //| | //| Noter l'heritage du modele de classe TArray | //+------------------------------------------------------------------+ template<typename T> class TArrayPtr : public TArray<T *> { public: void ~TArrayPtr() { for(int n=0,count=ArraySize(m_data);n<count;n++) if(CheckPointer(m_data[n])==POINTER_DYNAMIC) delete m_data[n]; } }; //+------------------------------------------------------------------------+ //| Declaration de la classe. Les pointeurs des objets seront stockés dans le tableau | //+------------------------------------------------------------------------+ class CFoo { int m_x; public: CFoo(int x):m_x(x) { } int X(void) const { return(m_x); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ TArray<int> ExtIntArray; // instancie le modele TArray (specialise le modele TArray avec le type int) TArray<double> ExtDblArray; // instancie le modele TArray (specialise le modele TArray avec le type double) TArrayPtr<CFoo> ExtPtrArray; // instancie le modele TArrayPtr (specialise le modelete TArrayPtr avec le type CFoo) //+------------------------------------------------------------------+ //| Fonction de demarrage du programme du script | //+------------------------------------------------------------------+ void OnStart() { //--- remplit les tableaux avec les donnees for(int i=0;i<10;i++) { int integer=i+10; ExtIntArray.Append(integer); double dbl=i+20.0; ExtDblArray.Append(dbl); CFoo *ptr=new CFoo(i+30); ExtPtrArray.Append(ptr); } //--- affiche le contenu du tableau string str="Int:"; for(i=0;i<10;i++) str+=" "+(string)ExtIntArray[i]; Print(str); str="Dbl:"; for(i=0;i<10;i++) str+=" "+DoubleToString(ExtDblArray[i],1); Print(str); str="Ptr:"; for(i=0;i<10;i++) str+=" "+(string)ExtPtrArray[i].X(); Print(str); //--- Lest objets CFoo crees avec new ne doivent pas etre supprimes car ils sont supprimes dans le destructeur de l'objet TArrayPtr<CFoo> }Résultat d'exécution :