#import "TestLib.dll" //+------------------------------------------------------------------+ //| Fonction de lancement du programme | //+------------------------------------------------------------------+ void OnStart() { int x=41; TestClass::Inc(x); Print(x); }Le code C# de la fonction Inc de TestClass ressemble à :
public class TestClass { public static void Inc(ref int x) { x++; } }Le script retourne la valeur 42 comme résultat de l'exécution.
struct MqlTick { datetime time; // Heure de mise à jour du prix Last double bid; // Prix Bid actuel double ask; // Prix Ask actuel double last; // Prix actuel de la dernière transaction ulong volume; // Volume du prix Last actuel long time_msc; // Heure de mise à jour du prix Last en millisecondes uint flags; // Flags du tick double volume_real; // Volume du prix Last actuel avec une précision étendue };
struct MqlBookInfo { ENUM_BOOK_TYPE type; // type d'ordre de l'énumération ENUM_BOOK_TYPE double price; // prix long volume; // volume double volume_real; // volume avec précision étendue };
//+------------------------------------------------------------------+ //| Alignement par défaut | //+------------------------------------------------------------------+ struct A { char a; int b; }; //+------------------------------------------------------------------+ //| Alignement spécifié | //+------------------------------------------------------------------+ struct B pack(4) { char a; int b; }; //+------------------------------------------------------------------+ //| Fonction de lancement du programme | //+------------------------------------------------------------------+ void OnStart() { Print("sizeof(A)=",sizeof(A)); Print("sizeof(B)=",sizeof(B)); } //+------------------------------------------------------------------+Conclusion :
sizeof(A)=5 sizeof(B)=8Obtenez plus d'informations sur l'alignement dans les structures dans MSDN.
enum Main { PRICE_CLOSE_, PRICE_OPEN_ }; input Main Inp=PRICE_CLOSE; //+------------------------------------------------------------------+ //| Fonction de lancement | //+------------------------------------------------------------------+ void OnStart() { }Le compilateur affiche l'avertissement suivant :
class X { }; void f(int) { } template<typename T> void a(T*) { new T(2); } // le compilateur générait l'erreur ici auparavant template<typename T> void a() { f(0); } void OnInit() { a<X>(); }
Mise à jour de la documentation.
La documentation a été mise à jour.
datetime iTime( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int shift // Décalage );
double iOpen( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int shift // Décalage );
double iHigh( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int shift // Décalage );
double iLow( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int shift // Décalage );
double iClose( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int shift // Décalage );
long iVolume( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int shift // Décalage );
int iBars( string symbol, // Symbole ENUM_TIMEFRAMES timeframe // Période );
int iBarShift( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période datetime time, // Heure bool exact=false // Mode );
int iLowest( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int type, // Identifiant de la timeserie int count, // Nombre d'éléments int start // Indice );
int iHighest( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int type, // Identifiant de la timeserie int count, // Nombre d'éléments int start // Indice );
long iRealVolume( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int shift // Décalage );
long iTickVolume( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int shift // Décalage );
long iSpread( string symbol, // Symbole ENUM_TIMEFRAMES timeframe, // Période int shift // Décalage );
void TesterHideIndicators( bool hide // Flag );
La documentation a été mise à jour.
Correction d'erreurs reportées dans les journaux de crash.
MetaTrader 5 build 1745 sera la dernière version de la plateforme supportant Microsoft Windows XP/2003/Vista.
Nous avons annoncé il y a quelques mois la prochaine fin du support des anciennes versions des systèmes d'exploitation. Windows 2003, Windows Vista et spécialement Microsoft Windows XP sont des systèmes d'exploitation dépassés. Microsoft a mis fin au support de Windows XP il y a 3 ans, car des possibilités matérielles potentielles ne pouvaient plus être réalisées sur ce système en raison de limitations techniques.
MetaTrader 5 build 1745 et les versions précédentes continueront de fonctionner sur les systèmes d'exploitations mentionnés ci-dessus, mais ne seront plus mis à jour. Les installateurs ne s'exécuteront pas non plus sur ces systèmes d'exploitation.
Le système d'exploitation minimum requis pour faire fonctionner MetaTrader 5 est Windows 7. Nous recommandons cependant fortement d'utiliser les versions 64 bits de Windows 10.
Le support des anciennes versions des terminaux de bureau et mobile prendre fin avec la publication de la nouvelle version de la plateforme :
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.
Pour supporter les nouveaux projets partagés, nous avons mis à jour le protocole des opérations du MQL5 Storage. Vous devrez donc effectuer un checkout de toutes les données du dépôt après la mise à jour de la plateforme. Les données stockées sur le MQL5 Storage ne seront pas perdues ou modifiées pendant la mise à jour.
Avant de mettre à jour la plateforme vers la nouvelle version, nous vous recommandons d'effectuer une opération de Commit pour envoyer tous les changements locaux vers le MQL5 Storage.
Comment Cela Fonctionne
Par exemple, vous pouvez créer un instrument affichant l'indice du dollar (USDX). Il utilise la formule suivante :
50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)
Note : les paires USDEUR et USDGBP sont utilisées dans la formule source de l'indice du dollar. Puisque seules les paires inverses sont disponibles dans la plateforme, une puissance négatique et Ask au lieu de Bid sont utilisés dans la formule du symbole synthétique.
La plateforme calculera en temps réel le prix du nouvel instrument sur la base des cotations des six autres symboles fournis par votre courtier. Les changements de prix seront visualisés dans la fenêtre du Market Watch et sur le graphique :
int CustomTicksAdd( const string symbol, // Nom du symbole const MqlTick& ticks[] // Le tableau contenant les ticks devant être appliqués au symbole personnalisé );La fonction CustomTicksAdd permet de fournir les cotations comme si elles étaient reçues du serveur du courtier. Les données sont envoyées dans la fenêtre du Market Watch au lieu d'être directement écrites dans la base de données des ticks. Le terminal sauvegarde ensuite les ticks depuis le Market Watch vers la base de données. Si un gros volume de données est passé dans un appel, le comportement de la fonction est adapté afin d'économiser des ressources. Si plus de 256 ticks sont transmis, les données sont divisées en 2 parties. Une grande partie est directement enregistrée dans la base de données des ticks (de façon similaire à CustomTicksReplace). La seconde partie correspondant aux 128 derniers ticks est envoyée au Market Watch, d'où le terminal sauvegarde les ticks dans une base de données.
Les projets complets sont maintenant disponibles dans MetaEditor. Le processus de développement d'un programme est maintenant plus pratique.
Le fichier MQ5 principal du programme n'apparaît plus comme un projet. Le projet est un fichier "MQPROJ" séparé, qui stocke les paramètres du programme, les paramètres de compilation et toutes les informations des fichiers utilisés. Les principaux paramètres du projet sont accessibles depuis une boîte de dialogue séparée, il n'est donc plus besoin de les spécifier dans le code source via #property.
Un onglet séparé dans le Navigateur est fourni pour travailler de façon plus pratique dans le projet. Tous les fichiers, tels que les fichiers include, les ressources, les headers et les autres fichiers sont ordonnés par catégories dans cet onglet. Tous les fichiers sont automatiquement ajoutés dans le navigateur du projet. Par exemple, si vous incluez un nouveau fichier MQH, il apparaîtra automatiquement dans la section "Dépendences" du navigateur.
Le support des nouveaux projets a également été implémenté dans le dépôt MQL5 Storage mis à jour en ligne. Il est maintenant devenu plus pratique de développer de gros projets en collaboration avec d'autres membres de la MQL5.community.
La nouvelle section Projets Partagés est fournie pour les projets de groupe. Un projet créé dans cette section est immédiatement envoyé dans le dépôt : vous pouvez donner des permissions à d'autres utilisateurs et démarrer votre collaboration immédiatement.
Lorsque vous compilez un projet dans les Projets Partagés, un fichier EX5 exécutable est automatiquement copié dans le répertoire Experts, Indicators ou Scripts suivant le type du programme. Vous pouvez facilement lancer le programme sur un graphique sans avoir à copier les fichiers manuellement.
Quelles sont les nouveautés dans les Opérations du MQL5 Storage
Pour implémenter le support des nouveaux projets partagés, nous avons modifié le protocole des opérations avec le MQL5 Storage. Vous devrez donc effectuer un checkout de toutes les données du dépôt après la mise à jour de la plateforme. Les données stockées sur le dépôt MQL5 ne seront pas perdues ou modifiées pendant la mise à jour.
La commande 'Checkout depuis le Dépôt' n'est pas disponible. Au lieu de cela, les commandes 'Activer le MQL5 Storage' et 'Mettre à Jour depuis le Storage' sont utilisées pour récupérer les données :
Nouveaux Projets : Exemples des Détails de Création et d'Opération
Une nouvelle entité projet a été ajoutée dans MetaEditor. Un projet est un fichier mqproj qui stocke les propriétés communes du programme et les informations sur les fichiers utilisés. Les propriétés du programme peuvent maintenant être gérées depuis une boîte de dialogue séparée de MetaEditor au lieu de modifier manuellement les propriétés dans le code source (en utilisant la directive #property).
Si vous du code disponible, vous pouvez facilement tester de nouveaux projets en utilisant la commande 'Nouveau Projet depuis une Source'.
Dans le répertoire où est situé le fichier sélectionné, un nouveau fichier projet sera créé avec le même nom et l'extension mqproj. Les principales propriétés du programme spécifiées dans le code source via #property seront automatiquement ajoutées au projet, incluant le nom, le copyright, la version, le lien vers le site web du développeur et la description du programme.
Deux nouvelles options de compilation des programmes MQL5 ont été ajoutées aux propriétés du projet :
Pour utiliser les projets, utilisez un onglet Projet séparé dans la fenêtre du Navigateur. Tous les fichiers utilisés dans un projet sont affichés dans cet onglet sous une forme pratique. Lorsqu'un projet est généré depuis un fichier sources, tous les fichiers include utilisés (spécifiés avec la directive #include dans le principal fichier MQ5 et dans ses fichiers include) sont automatiquement ajoutés dans la section Dépendences.
Lorsqu'un nouveau fichier include est ajouté dans le code source, il apparaît également dans le Navigateur du projet. Les fichiers header utilisés sont ajoutés dans la section Headers ; les images, les sons et les autres programmes MQL5 utilisés dans la section Ressources. Les fichiers MQ5 avec le code source sont affichés dans la section Sources. Dans la section 'Paramètres et fichiers', vous pouvez ajouter d'autres fichiers, tels que les fichiers set pour les tests et les modèles de graphique.
Utilisez les commandes du menu contextuel pour ajouter les fichiers existants dans un projet ou pour y supprimer des fichiers. Faites attention lors de la suppression de fichiers, car vous pouvez effacer un fichier du projet (enlever le lien) ou le supprimer complètement du disque dur :
La création d'un nouveau projet est aussi facile que la création d'un programme MQL5 normal. Cliquez sur 'Nouveau Projet', sélectionnez le type du nouveau programme et spécifiez les propriétés (telles que le nom, les gestionnaires d'évènements, etc.) dans le MQL5 Wizard.
Pour obtenir un fichier EX5 exécutable, vous pouvez ouvrir le projet et appuyer sur la touche F7 (la commande de compilation) ou ouvrir le principal fichier MQ5 du programme et le compiler.
Projets Partagés dans le MQL5 Storage : Détails des Opérations
Les projets partagés sont gérés dans une section Projets Partagés séparée. Si vous ne vous êtes pas encore connecté au dépôt, exécutez la commande 'Activer le MQL5 Storage' depuis le mneu contextuel du dossier désiré. MetaEditor vérifiera si votre dépôt contient des données sauvegardées et si des projets partagés sont disponibles pour vous. Toutes les données disponibles seront récupérées depuis le dépôt et téléchargées sur votre ordinateur (opération de checkout). Les projets de groupe disponibles apparaissent dans la section Projets Partagés. Pour récupérer les projets, exécutez "Checkout depuis le Storage" dans le menu contextuel.
Pour créer un nouveau projet de groupe, sélectionnez le dossier Projets Partagés et cliquez sur "Nouveau Projet" :
Complétez ensuite les étapes MQL5 classiques : définissez le type, le nom et les propriétés du programme désiré. Pour les projets de groupe, vous devriez utiliser des noms clairs et compréhensibles afin que les participants les retrouvent facilement. Seuls les caractères latins et les chiffres, sans espace, peuvent être utilisés dans les noms des projets.
Un objet créé est immédiatement ajouté au MQL5 Storage. Les fichiers de la Bibliothèque Standard utilisés dans le projet ne sont pas ajoutés au dépôt, et vous pouvez les ajouter manuellement.
Pour permettre aux autres participants de travailler avec le projet, ouvrez ses propriétés. Vous pouvez à partir de là donner les permissions aux utilisateurs sélectionnés en spécifiant leurs identifiants MQL5.community, mais aussi définir les paramètres communs pour le travail du groupe :
Lorsque vous compilez un projet de groupe, le fichier exécutable EX5 est automatiquement copié dans le répertoire Experts, Indicators ou Scripts suivant le type du programme. Cela vous permet d'exécuter instantanément le programme dans le terminal sans avoir à le copier manuellement dans le répertoire correspondant.
Projets Publics dans le MQL5 Storage : Participation au Développement
Comme mentionné ci-dessus, chaque projet de groupe du MQL5 Storage a des paramètres de publication : le projet peut être privé ou ouvert à d'autres utilisateurs. Maintenant, tous les projets que vous pouvez rejoindre librement sont affichés dans l'onglet "Projets Publics" séparé.
Chacun peut trouver un projet excitant et prendre part à son développement. Cliquez simplement sur Rejoindre et récupérez le projet depuis le dépôt.
//+------------------------------------------------------------------+ //| Fonction de démarrage du script | //+------------------------------------------------------------------+ void OnStart() { //--- Fichier du modèle sous la forme d'un tableau binaire unsigned char my_template[]= { 0xFF,0xFE,0x3C, ... ,0x00 // Le tableau des données est raccourci ici }; //--- Sauvegarde et applique le modèle if(FileSave("my_template.tpl",my_template)) { Print("Modèle personnalisé sauvegardé dans \\MQL5\\Files"); if(ChartApplyTemplate(0,"\\Files\\my_template.tpl")) Print("Modèle personnalisé appliqué au graphique courant"); else Print("Echec de l'application du modèle personnalisé"); } else Print("Echec de la sauvegarde du modèle personnalisé"); }
Fonction | Action |
---|---|
CustomSymbolCreate | Crée un symbole personnalisé avec le nom spécifié dans le groupe spécifié |
CustomSymbolDelete | Supprime le symbole personnalisé ayant le nom spécifié |
CustomSymbolSetInteger | Définit la valeur de la propriété de type integer pour un symbole personnalisé |
CustomSymbolSetDouble | Définit la valeur de la propriété de type real pour un symbole personnalisé |
CustomSymbolSetString | Définit la valeur de la propriété de type string pour un symbole personnalisé |
CustomSymbolSetMarginRate | Définit les taux de marge suivant le type de l'ordre et sa direction pour un symbole personnalisé |
CustomSymbolSetSessionQuote | Définit l'heure de début et de fin de la session de cotation spécifiée pour le symbole et le jour de la semaine spécifiés |
CustomSymbolSetSessionTrade | Définit l'heure de début et de fin de la session de trading spécifiée pour le symbole et le jour de la semaine spécifiés |
CustomRatesDelete | Supprime toutes les barres de l'historique des prix du symbole personnalisé dans l'intervalle de temps spécifié |
CustomRatesReplace | Remplace entièrement l'historique des prix du symbole personnalisé dans l'intervalle de temps spécifié avec les données du tableau de données du type MqlRates |
CustomRatesUpdate | Ajoute les barres manquantes dans l'historique du symbole personnalisé et remplace les données existantes avec celles du tableau de données de type MqlRates |
CustomTicksAdd | Ajoute les données d'un tableau de données de type MqlTick à l'historique des prix d'un symbole personnalisé. Le symbole personnalisé doit être sélectionné dans la fenêtre du Market Watch. |
CustomTicksDelete | Supprimer tous les ticks de l'historique des prix du symbole personnalisé dans l'intervalle de temps spécifié |
CustomTicksReplace | Remplace entièrement l'historique des prix du symbole personnalisé dans l'intervalle de temps spécifié et avec les données du tableau de données de type MqlTick |
La bibliothèque est placée dans le répertoire Include\Generic du répertoire de travail du terminal.
bool ArraySwap( void& array1[], // Le premier tableau void& array2[] // Le deuxième tableau );La fonction accepte des tableaux dynamiques du même type et de même dimension. Pour les tableaux à plusieurs dimensions, le nombre d'éléments doit correspondre dans toutes les dimensions exceptée la première.
La nouvelle version fournit la possibilité de voir les statistiques du marché des instruments financiers tradés dans le mode exécution boursière. Pour voir les statistiques, ouvrez le menu de n'importe quel symbole dans le Market Watch, et sélectionnez 'Statistiques'.
Les opérations sur les positions dans l'onglet Trade sont maintenant plus efficaces. Une simple tape sur une position ou un ordre révélera les informations détaillées et les actions disponibles, telles que la clôture, la modification ou l'augmentation du volume de la position, mais aussi l'ouverture du graphique du symbole de la position.
Avec MetaTrader 5 pour Android, il est maintenant possible de créer facilement des comptes de trading auprès d'un courtier. Sélectionner "Ouvrir un compte réel" dans le menu et choisissez votre courtier dans la liste des serveurs. Vous devrez seulement attacher deux documents, incluant un document d'identité et un compte bancaire. Votre requête sera envoyée au courtier, qui pourrait demander des informations supplémentaires requises pour ouvrir un compte.
union LongDouble { long long_value; double double_value; };Contrairement à une structure, différents membres d'une union appartiennent à la même zone mémoire. Dans cet exemple, l'union LongDouble est déclarée avec des valeurs de type long et double partageant la même zone mémoire. Veuillez noter qu'il est impossible de stocker dans l'union une valeur de type long integer et une valeur double réelle simultanément (contrairement à une structure), puisque les variables long_value et double_value se chevauchent (en mémoire). D'un autre côté, un programme MQL5 est capable de traiter des données contenant dans l'union une valeur de type integer (long) ou réelle (double) n'importe quand. L'union permet donc de reçevoir deux (ou plus) options pour représenter la même séquence de données.
union LongDouble { long long_value; double double_value; }; //+------------------------------------------------------------------+ //| Fonction de démarrage du script | //+------------------------------------------------------------------+ void OnStart() { //--- LongDouble lb; //--- récupère et affiche le nombre invalide -nan(ind) lb.double_value=MathArcsin(2.0); printf("1. double=%f integer=%I64X",lb.double_value,lb.long_value); //--- plus grande valeur normalisée (DBL_MAX) lb.long_value=0x7FEFFFFFFFFFFFFF; printf("2. double=%.16e integer=%I64X",lb.double_value,lb.long_value); //--- plus petite valeur normalisée (DBL_MIN) lb.long_value=0x0010000000000000; printf("3. double=%.16e integer=%.16I64X",lb.double_value,lb.long_value); } /* Résultat de l'exécution 1. double=-nan(ind) integer=FFF8000000000000 2. double=1.7976931348623157e+308 integer=7FEFFFFFFFFFFFFF 3. double=2.2250738585072014e-308 integer=0010000000000000 */
class Foo { int value; public: string Description(void){return IntegerToString(value);}; //--- constructeur par défaut Foo(void){value=-1;}; //--- constructeur paramétré Foo(int v){value=v;}; }; //+------------------------------------------------------------------+ //| structure contenant des objets de type Foo | //+------------------------------------------------------------------+ struct MyStruct { string s; Foo foo; }; //+------------------------------------------------------------------+ //| Fonction de démarrage du programme | //+------------------------------------------------------------------+ void OnStart() { //--- MyStruct a,b; Foo an_foo(5); a.s="test"; a.foo=an_foo; Print("a.s=",a.s," a.foo.Description()=",a.foo.Description()); Print("b.s=",b.s," b.foo.Description()=",b.foo.Description()); //--- Print("b=a"); b=a; //--- Print("a.s=",a.s," a.foo.Description()=",a.foo.Description()); Print("b.s=",b.s," b.foo.Description()=",b.foo.Description()); /* Résultat de l'exécution; a.s=test a.foo.Description()=5 b.s= b.foo.Description()=-1 b=a a.s=test a.foo.Description()=5 b.s=test b.foo.Description()=5 */ }La copie des membres des objets est effectuée dans l'opérateur implicite.
ENUM_POSITION_REASON | ENUM_DEAL_REASON | ENUM_ORDER_REASON | Description de la raison |
---|---|---|---|
POSITION_REASON_CLIENT | DEAL_REASON_CLIENT | ORDER_REASON_CLIENT | L'opération a été exécutée en raison de l'activation d'un ordre placé depuis un terminal de bureau |
POSITION_REASON_MOBILE | DEAL_REASON_MOBILE | ORDER_REASON_MOBILE | L'opération a été exécutée en raison de l'activation d'un ordre placé depuis une application mobile |
POSITION_REASON_WEB | DEAL_REASON_WEB | ORDER_REASON_WEB | L'opération a été exécutée en raison de l'activation d'un ordre placé depuis une plateforme web |
POSITION_REASON_EXPERT | DEAL_REASON_EXPERT | ORDER_REASON_EXPERT | L'opération a été exécutée en raison de l'activation d'un ordre placé depuis un programme MQL5, c'est à dire par Expert Advisor ou un script |
- | DEAL_REASON_SL | ORDER_REASON_SL | L'opération a été exécutée en raison de l'activation d'un Stop Loss |
- | DEAL_REASON_TP | ORDER_REASON_TP | L'opération a été exécutée en raison de l'activation d'un Take Profit |
- | DEAL_REASON_SO | ORDER_REASON_SO | L'opération a été exécutée en raison d'un évènement Stop Out |
- | DEAL_REASON_ROLLOVER | - | La transaction a été exécutée en raison d'un rollover |
- | DEAL_REASON_VMARGIN | - | La transaction a été exécutée après la facturation de la marge de variation |
- | DEAL_REASON_SPLIT | - | La transaction a été exécutée après le découpage (réduction du prix) d'une action ou d'un autre actif, qui a ouvert une position au moment de l'annonce du découpage |
La nouvelle version MetaTrader 5 pour iOS build 1605 fournit la possibilité d'ouvrir facilement un compte préliminaire de trading. Sélectionnez "Ouvrir un compte réel" depuis le menu et trouvez votre courtier dans la liste des serveurs. Remplissez votre informations personnelles, joignez deux documents pour confirmer votre identité et votre adresse, et envoyez votre demande. Votre courtier ouvrira un compte réel pour vous et vous demandera toute nouvelle information si nécessaire.
La nouvelle version de MetaTrader 5 iOS comprend également l'optimisation et une nouvelle conception de la section des emails :
Mise à jour de la documentation.
L'historique de trading dans MetaTrader 5 Android peut
maintenant être affiché sous la forme des positions. Précédemment,
l'onglet Historique ne contenait que les ordres et les transactions
tandis que maintenant le trading peut maintenant être analysé en terme
de positions. Toutes les transactions liées à une position sont
regroupées en un seul enregistrement et affichent les informations
suivantes :
L'historique de trading peut maintenant être présénté sous la forme des positions. Auparavant, l'onglet Historique ne contenait que les ordres et les transactions. Il présente maintenant également les positions. La plateforme de trading collecte les données des transactions liées à une position et les aggrège ensuite en un seul enregistrement. Cet enregistrement contient :
//+------------------------------------------------------------------+ //| Template de fonction | //+------------------------------------------------------------------+ template<typename T1,typename T2> string Assign(T1 &var1,T2 var2) { var1=(T1)var2; return(__FUNCSIG__); } //+------------------------------------------------------------------+ //| Surcharge spéciale pour bool+string | //+------------------------------------------------------------------+ string Assign(bool &var1,string var2) { var1=(StringCompare(var2,"true",false) || StringToInteger(var2)!=0); return(__FUNCSIG__); } //+------------------------------------------------------------------+ //| Fonction de lancement du programme | //+------------------------------------------------------------------+ void OnStart() { int i; bool b; Print(Assign(i,"test")); Print(Assign(b,"test")); }Nous pouvons voir dans le résultat de l'exécution que le template de fonction Assign() a été utilisé pour la paire int+string, tandis que la version surchargée a déjà été utilisée pour la paire bool+string pendant le deuxième appel.
string Assign<int,string>(int&,string) string Assign(bool&,string)
template<typename T> T Func() { return (T)0; } void OnInit() { Func<double>(); // spécialisation explicite du template de fonction }Le changement de type est effectué par la spécification explicite des types plutôt que via les paramètres d'appel.
Mise à jour de la documentation.
Mise à jour de la documentation.
Ajout de la possibilité de s'enregistrer
et de se connecter à votre compte MQL5.com avec Facebook. Si vous avez
un profil sur ce réseau social, vous pouvez accéder aux messageries et
l'ensemble complet des services de MetaTrader 5 en quelques clics.
#resource chemin_vers_le_fichier_de_ressource as type_de_la_variable_de_ressource nom_de_la_variable_de_ressource
#resource "data.bin" as int ExtData[] // déclaration d'un tableau numérique contenant les données du fichier data.bin #resource "data.bin" as MqlRates ExtData[] // déclaration d'un tableau de structures simples contenant les données du fichier data.bin #resource "data.txt" as string ExtCode // déclaration d'une chaîne de caractères contenant les données du fichier data.txt #resource "data.txt" as string ExtCode[] // déclaration d'une chaîne de caractères contenant les données du fichier data.txt #resource "image.bmp" as bitmap ExtBitmap[] // déclaration d'un tableau à 1 dimension contenant un bitmap du fichier BMP, taille du tableau = largeur * hauteur #resource "image.bmp" as bitmap ExtBitmap2[][] // déclaration d'un tableau à 2 dimensions contenant un bitmap du fichier BMP, taille du tableau = [hauteur][largeur]
Documentation mise à jour.
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.