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 :
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 :
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.
Correction d'erreurs reportées dans les journaux des crash.
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 compensation
Avec ce système, vous ne pouvez avoir qu'une seule position pour un symbole au même moment :
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 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.
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.
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).
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 abstraiteRestrictions concernant 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 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.
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ètresLes 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.
ulong PositionGetTicket( int index // index dans la liste des positions );
bool PositionSelectByTicket(
ulong ticket // ticket de la position
);
Système de compensation
Avec ce système, vous pouvez n'avoir qu'une seule position commune pour un symbole à la fois :
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 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.
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).
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 abstraiteRestrictions concernant 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 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.
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ètresLes 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.
ulong PositionGetTicket( int index // index dans la liste des positions );
bool PositionSelectByTicket(
ulong ticket // ticket de la position
);
MetaEditor : Ajout d'un lien vers le tutoriel vidéo "Comment Créer un Robot de Trading dans l'Assistant MQL5" pour l'Assistant MQL5. Regardez cette vidéo de trois minutes et développez un robot de trading sans écrire une seule ligne de code.
2015.10.14 14:48:18.486 Data Folder: C:\Program Files\MetaTrader 5 2015.10.14 14:48:18.486 Windows 7 Professional (x64 based PC), IE 11.00, UAC, 8 x Intel Core i7 920 @ 2.67GHz, RAM: 8116 / 12277 Mb, HDD: 534262 / 753865 Mb, GMT+03:00 2015.10.14 14:48:18.486 MetaTrader 5 build 1190 started (MetaQuotes Software Corp.)
struct MqlTick { datetime time; // Heure de la dernière mise à jour d'un prix double bid; // Prix Bid actuel double ask; // Prix Ask actuel double last; // Prix Last actuel ulong volume; // Volume du prix Last actuel long time_msc; // Heure de la dernière mise à jour d'un prix en millisecondes uint flags; // Flags du tick };Les paramètres de chaque tick sont remplis indépendamment du fait qu'il y ait des changements par rapport au tick précédent. Ainsi, il est possible de trouver un prix correct pour un moment donné dans le passé, sans avoir besoin de rechercher des valeurs antérieures. Par exemple, même si le prix Bid change pendant l'arrivée d'un tick, la structure contient toujours les autres paramètres, notamment le prix Ask précédent, le volume, etc. Vous pouvez analyser les flags des ticks pour savoir exactement quelles données ont été modifiées :
//+------------------------------------------------------------------+ //| 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" //+------------------------------------------------------------------+ //| Déclare un modèle 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. Le destructeur supprime | //| les objets stockés dans le tableau. | //| | //| Noter l'héritage de la classe templatée 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]; } }; //+--------------------------------------------------------------------------+ //| Déclare la classe. Les pointeurs vers ses 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 TArray (spécialiee TArray avec le type int) TArray<double> ExtDblArray; // instancie TArray (spécialise TArray avec le type double) TArrayPtr<CFoo> ExtPtrArray; // instancie TArrayPtr (spécialise TArrayPtr avec le type CFoo) //+------------------------------------------------------------------+ //| Fonction de démarrage du script | //+------------------------------------------------------------------+ void OnStart() { //--- remplit les tableaux avec les données 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); } //--- extrait les contenus du tableau string str="Int:"; for(int i=0;i<10;i++) str+=" "+(string)ExtIntArray[i]; Print(str); str="Dbl:"; for(int i=0;i<10;i++) str+=" "+DoubleToString(ExtDblArray[i],1); Print(str); str="Ptr:"; for(int i=0;i<10;i++) str+=" "+(string)ExtPtrArray[i].X(); Print(str); //--- Les objets CFoo créés via new ne devraient pas être effacés puisqu'ils sont supprimés dans le destructeur de l'objet TArrayPtr<CFoo> }Résultats d'exécution :
int ObjectsDeleteAll( long chart_id, // identifiant du graphique const string prefix, // préfixe du nom de l'objet int sub_window=-1, // indice de la fenêtre int object_type=-1 // type d'objet pour la suppression );
Documentation mise à jour.
Maintenant, vous pouvez acheter n'importe quelle application du Market en une seule étape directement à partir de votre terminal MetaTrader 4/5 sans inscription. Il suffit de cliquer sur Acheter et de sélectionner le mode de paiement.
Vous serez, ensuite, redirigé vers la page du système de paiement Web pour finaliser votre achat. PayPal, WebMoney, Neteller ou carte bancaire - vous pouvez choisir comment payer vos achats dans la boutique de robots et d'indicateurs prêts à l'emploi.
Après avoir effectué un achat, nous vous recommandons toujours de vous créer un compte MQL5.community, afin que votre produit acheté soit automatiquement lié à votre compte. Un compte MQL5 vous permet de mettre à jour le produit et de l'installer sur plusieurs ordinateurs. En outre, un compte MQL5.community vous donne accès un ensemble de services pour les plateformes MetaTrader tels que les signaux de trading pour copier les transactions de traders à succès, l'hébergement virtuel pour une utilisation continue de vos applications et le service Freelance pour commander des robots uniques auprès des développeurs.
Maintenant, vous connaissez la façon la plus rapide et la plus facile d'obtenir un robot de trading. Plus de 5.000 applications de MetaTrader sont déjà disponibles dans le Market - choisissez et achetez tout simplement !
Les Actifs sont ajoutés aux Fonds du client et augmentent la Marge Libre, augmentant donc les volumes des opérations de trading admises sur le compte.
Ainsi, il est maintenant possible d'ouvrir des comptes avec différents types de marge.
ulong GetMicrosecondCount();
Cette fonction peut être utilisée pour profiler l'exécution du programme et identifier des "étranglements".Correction d'erreurs rapportées dans les journaux.
Documentation mise à jour.
La mise à jour est disponible via le système LiveUpdate.
Some improvements and bug fixes have been made in the operation of the Strategy Tester. Time spent on intermediate preparatory operations and network latency has been significantly reduced. Testing and optimization are now faster in all operating modes: working with local testing agents, with a farm of agents in the local network and using MQL5 Cloud Network.
Fixed errors reported in crash logs.
Updated documentation.
The update is available through the LiveUpdate system.
Une nouvelle mise à jour de la plateforme MetaTrader 5 a été publiée. Elle contient les changements suivants :
Vous devez donc toujours changer le nombre de graphiques et la liste des symboles, l'ensemble des programmes lancés et leurs paramètres d'entrée, les paramètres du terminal et les abonnements aux Signaux.
Lors de la migration, toutes les données sont enregistrées dans le journal du terminal client.
MetaTrader 5 Android build 1052
La nouvelle version de MetaTrader 5 pour Android est maintenant disponible dans Google Play. Elle contient des corrections et une stabilité amliorée. Les objets d'analyse et le système de messagerie seront bientôt ajoutés.
L'application peut être téléchargée ici : https://download.mql5.com/cdn/mobile/mt5/android?hl=en&utm_source=www.metatrader5.com
La mise à jour est disponible via le système LiveUpdate.
Les agents du testeur ne fonctionne maintenant que sur les systèmes 64 bits. Cette décision est conduite par le besoin de suivre le développement de l'industrie IT. Basculer vers de nouvelles technologies augmente les performances de calcul et autorise de futurs développements du MQL5 Cloud Network.
Changements dans les composants de la plateforme :
int WebRequest (string method, string url,string headers,int timeout, const char &data[], int data_size,char &result[], string &result_headers)Cette fonction vous permet de former explicitement les contenus des en-têtes des requêtes HTTP fournissant une mécanisme plus flexible pour intéragir avec différents services Web.
Correction d'erreurs reportées dans les journaux de crash.
Mise à jour de la documentation.
La mise à jour sera disponible via le système LiveUpdate.
int CopyTicks( const string symbol_name, // Symbol name MqlTick &ticks_array[], // the array where ticks will be placed uint flags=COPY_TICKS_ALL, // the flag that defines the type of received ticks ulong from=0, // the date starting from which ticks will be received, specified in milliseconds since 01.01.1970 uint count=0 // the number of latest ticks that should be received );Ticks can be requested by the date if the 'from' value is specified, or based on their number using the 'count' value. If none of the parameters are specified, all available ticks are received, but not more than 2000. Ticks can also be requested based on their type using the 'flags' parameter. Available values:
Fixed errors reported in crash logs.
Documentation has been updated.
The update is available through the LiveUpdate system.
//+------------------------------------------------------------------+ //| MacroExample | //| Copyright 2014, MetaQuotes Software Corp. | //| https://www.metaquotes.net | //+------------------------------------------------------------------+ #property script_show_inputs input bool InpSecond=true; #define DEFCLASS(class_name) class class_name:public CBase{public:class_name(string name):CBase(name){}}; #define TOSTR(x) #x #define AUTODEL(obj) CAutoDelete auto_##obj(obj) #define NEWOBJ(type,ptr) do { ptr=new type(TOSTR(ptr)); \ Print("Create object '",TOSTR(type)," ",TOSTR(ptr),"' by macro NEWOBJ"); } \ while(0) //+------------------------------------------------------------------+ //| The basic class required for automatic deletion of objects | //+------------------------------------------------------------------+ class CBase { protected: string m_name; public: CBase(string name):m_name(name) { } string Name(void) const{ return(m_name); } }; //+------------------------------------------------------------------+ //| The object auto-delete class makes watching of created | //| objects unnecessary. It deletes them in its destructor | //+------------------------------------------------------------------+ class CAutoDelete { CBase *m_obj; public: CAutoDelete(CBase *obj):m_obj(obj) { } ~CAutoDelete() { if(CheckPointer(m_obj)==POINTER_DYNAMIC) { Print("Delete object '",m_obj.Name(),"' by CAutoDelete class"); delete m_obj; } } }; //+------------------------------------------------------------------+ //| Declaring two new classes CFoo and CBar | //+------------------------------------------------------------------+ DEFCLASS(CFoo); DEFCLASS(CBar); //+------------------------------------------------------------------+ //| The main script function | //+------------------------------------------------------------------+ void OnStart() { CFoo *foo; //--- Creating an object of the CFoo class NEWOBJ(CFoo,foo); //--- Creating an instance of the CFoo foo object auto-deletion class AUTODEL(foo); //--- if(InpSecond) { CBar *bar; //--- NEWOBJ(CBar,bar); AUTODEL(bar); } //--- No need to delete foo, it will be deleted automatically } //+------------------------------------------------------------------+
Fixed errors reported in crash logs.
Documentation has been updated.
Fixed errors reported in crash logs.
Updated documentation.
The update is available through the LiveUpdate system.
The money transfer option should be enabled on the trade
server. Depending on the settings, there are some restrictions on the
accounts, between which transfer is allowed. In particular, money
transfer can be allowed only for accounts with identical names and
emails.
Fixed display of the Label and Bitmap Label graphical objects with the anchor point located in one of the bottom corners of a chart.
int CryptEncode(ENUM_CRYPT_METHOD method,const uchar &data[],const uchar &key[],uchar &result[]); int CryptDecode(ENUM_CRYPT_METHOD method,const uchar &data[],const uchar &key[],uchar &result[]);A new enumeration ENUM_CRYPT_METHOD has been added for working with the functions:
CRYPT_BASE64, // BASE64 encryption (re-encoding) CRYPT_AES128, // AES encryption with 128-bit key CRYPT_AES256, // AES encryption with 256-bit key CRYPT_DES, // DES encryption (key length is 56 bits - 7 bytes) CRYPT_HASH_SHA1, // calculation of HASH SHA1 CRYPT_HASH_SHA256, // calculation of HASH SHA256 CRYPT_HASH_MD5, // calculation of HASH MD5 CRYPT_ARCH_ZIP, // ZIP archive
Fixed errors reported in crash logs.
Updated documentation.
The update will be available through the LiveUpdate system.
Fixed errors reported in crash logs.
Updated documentation.The update will be available through the LiveUpdate system.
Market: Added new product category in MetaTrader AppStore — Magazines. Now, users can buy not only trading applications but also trading and financial magazines quickly and easily.
Just like MetaTrader 5 applications, magazines can be purchased at MQL5.community Market as well as directly via MetaTrader 5 terminal. All magazines are accompanied by detailed descriptions and screenshot galleries:
The latest magazine issues are always displayed in the showcase, while the previous ones can be found on the Archive tab.
To buy a magazine, you should have an MQL5.com account and the necessary amount of funds on it. The account data should be specified at the Community tab of the terminal settings:
Click Buy on the magazine's page to purchase it. Purchase confirmation dialog appears:
To continue, agree to the rules of using the Market service and enter your MQL5.community password. After that, the specified amount of funds will be withdrawn from your account and the magazine will be downloaded. Buy button will be replaced by Open one.
Magazine files are downloaded to My Documents\MQL5 Market\Magazines\[Magazine name]\[Issue name]. The download may be performed in two formats:
MQB - this protected format is used for paid magazines. When purchasing and downloading a magazine file, it is encoded so that it can be opened only on the PC it has been downloaded to. Generation of an encoded copy is called activation. Each magazine can be activated at least 5 times on different hardware. Magazine sellers can increase the number of activations at their sole discretion.
PDF - this format is used for free magazines. After downloading, such file can be moved and viewed on other devices.
The special component called MetaViewer has been added to MetaTrader 5 terminal allowing users to view MQB files. This application is launched when you click Open at the downloaded magazine page. If User Account Control system is enabled on the user's PC, the user will be prompted to allow the terminal to associate MQB files with MetaViewer during the first launch. After the association, MQB files are automatically opened in MetaViewer when launched from Windows file explorer.
If you click ÎÊ, the files are associated and the selected magazine issue is opened in MetaViewer immediately. If you click Cancel, only the magazine issue is opened.
MetaViewer is a convenient application for viewing books and magazines in MQB and PDF formats. Keyboard arrows are used to turn over the pages: left and right arrows - for page-by-page navigation, while up and down arrows - for scrolling. MetaViewer menu and control panel contain additional commands for setting the journal's view and navigation:
Terminal: Added MQL tab to EX5 file properties. The tab contains the program's icon as well as its name and description specified in the application's source code via the appropriate #property parameters.
The tab appears only after MetaViewer is registered in the system. If a current user has sufficient rights and User Account Control system is disabled, MetaViewer is registered automatically during the terminal's first launch after the update. Otherwise, the user will see the dialog window requesting a one-time elevation of rights for MetaViewer during the first attempt to open a magazine.
Terminal: Added MQL5.community fast registration dialog in case a user has no account. Now, an MQL5.community account can be created without the need to leave the terminal.
Specify login and email address in the registration window. After clicking Register, an email for MQL5.community account activation is sent to the specified address.
MQL5.community account allows traders to use additional powerful services:
Terminal: Added information about margin charging rates for various order types, as well as the list of spreads that may include orders and positions for the symbol, to the trading symbol data dialog.
Margin Rates:
A multiplier for calculating margin requirements relative to the margin's main amount is specified for each order type. The main amount of margin is calculated depending on the specified calculation method (Forex, Futures, etc.).
Calculation of margin requirements is described in details in the client terminal user guide.
Spreads:
The margin can be charged on preferential basis in case trading positions are in spread relative to each other. The spread is defined as the presence of the oppositely directed positions at related symbols. Reduced margin requirements provide traders with more trading opportunities.
The spread has two legs - A and B. The legs are the oppositely directed positions in a spread - buy or sell. The leg type is not connected with some definite position direction (buy or sell). It is important that trader's positions at all leg's symbols are either long or short.
Several symbols with their own volume rates can be set for each spread leg. These rates are shown in parentheses, for example, LKOH-3.13 (1).
Take a look at the following example:
To keep positions in the spread, a trader should open positions of 1 and 2 lots for GAZR-9.12 and GAZR-3.13 respectively in one direction and a position of 1 lot for GAZR-6.13 in another.
Margin column displays margin charging type at this spread:
Specific values mean charging a fixed margin for a spread in a specified volume. The first value specifies the volume of the initial margin, while the second one specifies the volume of the maintenance one.
Maximal - initial and maintenance margin values are calculated for each spread leg. The calculation is performed by summing up the margin requirements for all leg symbols. The margin requirements of the leg having a greater value will be used for the spread.
CME Inter Spread - the rates (in percentage value) for margin are specified: the first one is for the initial margin, while the second is for the maintenance one. The total margin value will be defined by summing up the margin requirements for all symbols of the spread and multiplying the total value by the specified rate.
CME Intra Spread - two values for margin increase are specified: the first value is for the initial margin, while the second is for the maintenance one. During the calculation, the difference between the total margin of A leg symbols and the total margin of B leg symbols is calculated (the difference in absolute magnitude is used, so that it does not matter what leg is a deductible one). According to the type of the calculated margin, the first (for the initial margin) or the second (for the maintenance one) value is added to the obtained difference.
The specified margin is charged per spread unit - for the specified combination of positions. If any part of the position does not fit the spread, it will be charged by an additional margin according to the symbol settings. If the client's current positions have the volume the specified combination fits in several times, the charged margin is increased appropriately. For example, suppose that A and B symbols with the ratios of 1 and 2 are in spread. If a client has positions for these symbols with the volumes of 3 and 4 respectively, the total margin size is equal to the doubled value from the spread settings (two spreads: 1 lot of A and 2 lots of B, 1 lot of A and 2 lots of B) plus the margin for the single remaining A symbol lot.
Spreads are described in details in the client terminal user guide.
Market: Added product activation confirmation dialog displaying the number of remaining activations.
Each application purchased in MetaTrader AppStore is additionally protected, so that it can be launched only on the PC it has been downloaded to during the purchase. Generation of an encoded copy is called activation. Each product can be activated at least 5 times on different hardware. Sellers can increase the number of activations at their sole discretion.
The new dialog protects users from wasting activations by informing that their number is limited.
Signals: Added information about a signal, to which an account is subscribed, to the Navigator window:
If the account is subscribed to the signal, the appropriate icon with the signal's name is shown for it. When hovering the mouse cursor over the name, the subscription's expiration date is displayed. The context menu contains commands for viewing the signal and unsubscribing from it. The latter one is displayed only if the appropriate trading account is currently active in the terminal.
The subscription icon makes working with signals more convenient.
Signals: Added legend for equity, growth, balance and distribution graphs. Also, marks displaying funds depositing and withdrawal have been added to the equity graph. When hovering the mouse cursor over the balance operation triangle, a tooltip with the operation sum is displayed: