void func(int &arr[ ][ ][ ][ ]) { }
struct MyStruct { string Array[]; }; void OnStart() { MyStruct a1,a2; ArrayResize(a1.Array,3); ArrayResize(a2.Array,1); a1=a2; }Auparavant, la taille du tableau "a1" était égale à 3 après l'appel de la fonction. Maintenant, la taille sera 1.
ENUM_FP_CLASS MathClassify( double value // nombre réel );L'énumération contient les valeurs suivantes :
if(MathClassify(value)>FP_ZERO) { Print("value n'est pas un nombre valide"); }
Nous avons révisé les critères d'optimisation qui incluent deux variables, dont le solde. Maintenant, les critères ne prennent en compte que la deuxième variable et ignorent le solde. Les nouveaux critères d'optimisation sont plus faciles à analyser.
Les colonnes valeur et magic de la position ont également été ajoutées à la section historique des trades.
import sys chart_symbol='unknown' chart_tf=1 if len(sys.argv) == 3: chart_symbol, chart_tf = sys.argv[1:3]; print("Hello world from", chart_symbol, chart_tf) >> Hello world from T.NYSE 15
Les résultats de la recherche à partir de ressources externes apparaissent dans la fenêtre de la boîte à outils MetaEditor :
long DatabaseImport( int database, // descripteur de base de données reçu par DatabaseOpen const string table, // nom de la table dans laquelle insérer les données const string filename, // nom du fichier à partir duquel importer les données uint flags, // combinaison de flags const string separator, // séparateur des données ulong skip_rows, // nombre de 1ères lignes à ignorer const string skip_comments // chaîne de caractères définissant les commentaires );
long DatabaseExport( int database, // descripteur de base de données reçu par DatabaseOpen const string table_or_sql, // nom de la table ou requête SQL const string filename, // nom du fichier CSV pour l'export des données uint flags, // combinaison de flags const string separator // séparateur des données in the CSV file );
long DatabasePrint( int database, // descripteur de base de données reçu par DatabaseOpen const string table_or_sql, // table ou requête SQL uint flags // combinaison de flags );
int FileSelectDialog( string caption, // titre de la fenêtre string initial_dir, // répertoire initial string filter, // filtre d'extensions uint flags, // combinaison de flags string& filenames[], // tableau contenant les noms des fichiers string default_filename // nom de fichier par défaut );La nouvelle fonction permet une interaction efficace de l'utilisateur avec le programme MQL5.
#property optimization_chart_mode "3d,InpX,InpY"La propriété permet de définir le type du graphique ouvert à la fin de l'optimisation, ainsi que les paramètres du programme pour les les axes X et Y.
double MathArctan2( double y // la coordonnée y du point double x // la coordonnée x du point );
Ajout de la traduction de l'interface utilisateur en punjabi (Inde).
La documentation a été mise à jour.
Corrections basées sur les journaux de crash.
La mise à jour sera disponible via le système Live Update.
class CFoo { public: struct Item { int x; }; }; //+------------------------------------------------------------------+ class CBar { public: struct Item { int x; }; }; CBar::Item item; // déclaration correcte de la structure Item de la classe Bar Item item; // déclaration incorrecteAjout du support de namespace fournissant plus de possibilités lors de l'utilisation de code/bibliothèques tierces dans les applications MQL5.
#define PrintFunctionName() Print(__FUNCTION__) namespace NS { void func() { PrintFunctionName(); } struct C { int x; C() { PrintFunctionName(); }; }; } struct C { int x; C() { PrintFunctionName(); }; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void func() { PrintFunctionName(); } //+------------------------------------------------------------------+ //| Fonction de lancement du script | //+------------------------------------------------------------------+ void OnStart() { func(); NS::func(); C c; NS::C ac; }Lors de l'exécution, le résultat suivant est affiché en sortie :
class A { void operator=(const A &)=delete; // interidt l'opérateur de copie d'objet }; class B : public A { }; //+------------------------------------------------------------------+ //| Fonction de lancement du script | //+------------------------------------------------------------------+ void OnStart() { A a1,a2; B b1,b2; a1=a2; b1=b2; }Dans cet exemple, le compilateur renverra des erreurs pour "a1=a2" et "b1=b2" :
input group "Signal" input int ExtBBPeriod = 20; // période des Bandes de Bollinger input double ExtBBDeviation=2.0; // déviation input ENUM_TIMEFRAMES ExtSignalTF=PERIOD_M15; // Période BB input group "Tendance" input int ExtMAPeriod = 13; // Période de la moyenne mobile input ENUM_TIMEFRAMES ExtTrendTF=PERIOD_M15; // Période MM input group "ReglesDeSortie" input bool ExtUseSL = true; // utilise le StopLoss input int Ext_SL_Points = 50; // StopLoss en points input bool ExtUseTP = false; // utilise le TakeProfit input int Ext_TP_Points = 100; // TakeProfit en points input bool ExtUseTS = true; // utilise le Trailing Stop input int Ext_TS_Points = 30; // Trailing Stop en points input group "MoneyManagement" sinput double ExtInitialLot =0.1; // valeur initiale du lot input bool ExtUseAutoLot =true; // calcul automatique du lot input group "Auxiliaire" sinput int ExtMagicNumber =123456; // Magic Number de l'EA sinput bool ExtDebugMessage=true; // affiche les messages de debugLorsqu'un tel Expert Advisor est lancé dans le Strategy Tester, les blocs de paramètres d'entrée peuvent être réduits ou développés par un double-clic sur le nom du groupe. Tous les paramètres d'un groupe peuvent être sélectionnés pour être optimisés à l'aide d'une seule case à cocher.
#import "lib.dll" int func(); #import //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int func() { return(0); } //+------------------------------------------------------------------+ //| Fonction de lancement du script | //+------------------------------------------------------------------+ void OnStart() { Print( func() ); }Dans les versions antérieures, l'erreur suivante était renvoyée lors de la compilation :
'func' - ambiguous call to overloaded function with the same parameters could be one of 2 function(s) int func() int func()Maintenant, au lieu de l'erreur, la fonction MQL5 intégrée avec une priorité plus élevée sera utilisée par défaut. La fonction importée peut être appelée en spécifiant explicitement la portée :
void OnStart() { Print( lib::func() ); }
if(condition) { //--- }
// before styling ParameterGetRange("InpX",enable,x_cur,x_start,x_step,x_stop); // after styling ParameterGetRange("InpX", enable, x_cur, x_start, x_step, x_stop);
// before styling if(x==1&y!=2) { int a=0; } // after styling if(x == 1 & y != 2) { int a = 0; }
L’interface utilisateur a également été traduite dans 18 nouvelles langues :
L’interface de la plateforme est maintenant disponible en 50 langues, parlées par plus de 4 milliards de personnes.
Pour définir la langue de votre interface, accédez au menu "Affichage \ Langue" situé en haut du terminal.
La documentation a été mise à jour.
Corrections basées sur les journaux de crash.
La mise à jour sera disponible via le système Live Update.
Python est un langage de programmation moderne et de haut niveau pour développer des scripts et des applications. Il contient de nombreuses bibliothèques pour le machine learning, l'automatisation des process, ainsi que l'analyse des données et la visualisation.
Le package MetaTrader pour Python est conçu pour obtenir rapidement et de façon efficace les données boursières via les communications inter-processeurs, directement depuis le terminal MetaTrader 5. Les données reçues de cette façon peuvent être ensuite utilisées pour les calculs statistiques et le machine learning.
Connexion
Fonctions
bool TesterDeposit( double money // le montant du dépôt );
La documentation a été mise à jour.
La mise à jour est disponible via le système LiveUpdate.
bool CalendarCountryById( const long country_id, // identifiant du pays MqlCalendarCountry& country // description du pays );CalendarEventById — retourne la description d'un évènement par son identifiant.
bool CalendarEventById( const long event_id, // identifiant de l'évènement MqlCalendarEvent& event // description de l'évènement );CalendarValueById — retourne le description de la valeur d'un évènement par son identifiant.
bool CalendarValueById( const long value_id, // identifiant de la valeur MqlCalendarValue& value // description de la valeur );CalendarEventByCountry — retourne le tableau des évènements disponibles pour le pays.
bool CalendarEventByCountry( string country_code, // code du pays MqlCalendarEvent& events[] // tableau d'évènements );CalendarEventByCurrency — retourne le tableau des évènements disponibles pour la devise affectée.
bool CalendarEventByCurrency( string currency, // devise MqlCalendarEvent& events[] // tableau d'évènements );CalendarValueHistoryByEvent — retourne le tableau de valeurs pour la période de temps spécifiée, par identifiant d'évènement.
bool CalendarValueHistoryByEvent( ulong event_id, // identifiant de l'évènement MqlCalendarValue& values[], // tableau de valeurs datetime datetime_from, // date de début de période datetime datetime_to=0 // date de fin de période );CalendarValueHistory — retourne le tableau de valeurs pour la période de temps spécifiée pour tous les évènements, filtrées par pays et/ou devise.
bool CalendarValueHistory( MqlCalendarValue& values[], // tableau de valeurs datetime datetime_from, // début de période datetime datetime_to=0, // fin de période string country_code=NULL, // code du pays string currency=NULL // devise );CalendarValueLastByEvent — retourne le tableau des valeurs des derniers évènements par identifiant. Cette fonction active la requête des valeurs qui sont apparues depuis la dernière requête. Le paramètre d'entrée/sortie "change_id" est en plus utilisé pour cette opération.
bool CalendarValueHistory( ulong event_id, // identifiant de l'évènement ulong& change_id, // dernier change_id du calendrier MqlCalendarValue& values[] // tableau de valeurs );CalendarValueLast — retourne le tableau des dernières valeurs pour tous les évènements, filtrées par pays et/ou devise. Cette fonction active la requête des valeurs qui sont apparues depuis la dernière requête. De façon similaire à CalendarValueLastByEvent, la propriété "change_id" est utilisée pour la requête.
bool CalendarValueHistory( ulong event_id, // identifiant de l'évènement ulong& change_id, // dernier change_id du calendrier MqlCalendarValue& values[], // tableau de valeurs string country_code=NULL, // code du pays string currency=NULL // devise );
struct MqlCalendarCountry { ulong id; // identifiant du pays en ISO 3166-1 string name; // nom du pays string code; // code du pays en ISO 3166-1 alpha-2 string currency; // code de la devise du pays string currency_symbol; // symbole/signe de la devise du pays string url_name; // nom du pays dans les URL sur mql5.com };MqlCalendarEvent — description de l'évènement.
struct MqlCalendarEvent { ulong id; // identifiant de l'évènement ENUM_CALENDAR_EVENT_TYPE type; // type de l'évènement ENUM_CALENDAR_EVENT_SECTOR sector; // secteur auquel appartient l'évènement ENUM_CALENDAR_EVENT_FREQUENCY frequency; // fréquence de publication de l'évènement ENUM_CALENDAR_EVENT_TIMEMODE time_mode; // mode d'heure de publication de l'évènement ulong country_id; // identifiant du pays ENUM_CALENDAR_EVENT_UNIT unit; // unité pour les valeurs de l'évènement ENUM_CALENDAR_EVENT_IMPORTANCE importance; // importance de l'évènement ENUM_CALENDAR_EVENT_MULTIPLIER multiplier; // multiplicateur de l'importance de l'évènement uint digits; // nombre de décimales dans la valeur de l'évènement string source_url; // URL source string event_code; // code de l'évènement string name; // texte de l'évènement dans la langue du terminal };MqlCalendarValue — description de la valeur de l'évènement.
struct MqlCalendarValue { ulong id; // identifiant de la valeur ulong event_id; // identifiant de l'évènement datetime time; // date et heure de l'évènement datetime period; // période pour laquelle l'évènement est publié int revision; // révision de l'indicateur publié en rapport avec la période de publication long actual_value; // valeur de l'évènement courant long prev_value; // valeur précédente de l'évènement long revised_prev_value; // valeur précédente révisée de l'évènement long forecast_value; // valeur prévue de l'évènement ENUM_CALENDAR_EVENT_IMPACRT impact_type; // impact potentiel sur le taux de devise };
enum ENUM_CALENDAR_EVENT_FREQUENCY { CALENDAR_FREQUENCY_NONE =0, // non utilisé CALENDAR_FREQUENCY_WEEK =1, // hebdomadaire CALENDAR_FREQUENCY_MONTH =2, // mensuel CALENDAR_FREQUENCY_QUARTER =3, // trimestriel CALENDAR_FREQUENCY_YEAR =4, // annuel CALENDAR_FREQUENCY_DAY =5, // quotidien }; enum ENUM_CALENDAR_EVENT_TYPE { CALENDAR_TYPE_EVENT =0, // évènement (réunion, discours, etc.) CALENDAR_TYPE_INDICATOR =1, // indicateur CALENDAR_TYPE_HOLIDAY =2, // vacances }; enum ENUM_CALENDAR_EVENT_SECTOR { CALENDAR_SECTOR_NONE =0, // aucun CALENDAR_SECTOR_MARKET =1, // marché CALENDAR_SECTOR_GDP =2, // PIB CALENDAR_SECTOR_JOBS =3, // emplois CALENDAR_SECTOR_PRICES =4, // prix CALENDAR_SECTOR_MONEY =5, // monnaie CALENDAR_SECTOR_TRADE =6, // commerce CALENDAR_SECTOR_GOVERNMENT =7, // gouvernement CALENDAR_SECTOR_BUSINESS =8, // affaires CALENDAR_SECTOR_CONSUMER =9, // consommateur CALENDAR_SECTOR_HOUSING =10, // logements CALENDAR_SECTOR_TAXES =11, // taxes CALENDAR_SECTOR_HOLIDAYS =12, // vacances }; enum ENUM_CALENDAR_EVENT_IMPORTANCE { CALENDAR_IMPORTANCE_LOW =0, // aucune CALENDAR_IMPORTANCE_NONE =1, // basse CALENDAR_IMPORTANCE_MODERATE =2, // modérée CALENDAR_IMPORTANCE_HIGH =3, // haute }; enum ENUM_CALENDAR_EVENT_UNIT { CALENDAR_UNIT_NONE =0, // aucune CALENDAR_UNIT_PERCENT =1, // pourcentage CALENDAR_UNIT_CURRENCY =2, // devise nationale CALENDAR_UNIT_HOUR =3, // nombre d'heures CALENDAR_UNIT_JOB =4, // nombre d'emplois CALENDAR_UNIT_RIG =5, // nombre de plateformes CALENDAR_UNIT_USD =6, // dollar US CALENDAR_UNIT_PEOPLE =7, // nombre de personnes CALENDAR_UNIT_MORTGAGE =8, // nombre d'hypothèques CALENDAR_UNIT_VOTE =9, // nombre de votes CALENDAR_UNIT_BARREL =10, // nombre de barils CALENDAR_UNIT_CUBICFEET =11, // volume en pieds cubes CALENDAR_UNIT_POSITION =12, // nombre d'offres d'emplois CALENDAR_UNIT_BUILDING =13 // nombre d'immeubles }; enum ENUM_CALENDAR_EVENT_MULTIPLIER { CALENDAR_MULTIPLIER_NONE =0, // aucun CALENDAR_MULTIPLIER_THOUSANDS =1, // milliers CALENDAR_MULTIPLIER_MILLIONS =2, // millions CALENDAR_MULTIPLIER_BILLIONS =3, // milliards CALENDAR_MULTIPLIER_TRILLIONS =4, // milliards }; enum ENUM_CALENDAR_EVENT_IMPACRT { CALENDAR_IMPACT_NA =0, // non disponible CALENDAR_IMPACT_POSITIVE =1, // positif CALENDAR_IMPACT_NEGATIVE =2, // négatif }; enum ENUM_CALENDAR_EVENT_TIMEMODE { CALENDAR_TIMEMODE_DATETIME =0, // la source publie l'heure exacte CALENDAR_TIMEMODE_DATE =1, // l'évènement est sur la journée entière CALENDAR_TIMEMODE_NOTIME =2, // la source ne publie pas l'heure de l'évènement CALENDAR_TIMEMODE_TENTATIVE =3, // la source ne fournit que la date, et pas l'heure exacte en avance, l'heure exacte n'est ajoutée qu'après la survenue de l'évènement };
ERR_CALENDAR_MORE_DATA =5400, // le tableau est trop petit pour le résultat entier (les valeurs qui tiennent dans le tableau sont passées) ERR_CALENDAR_TIMEOUT =5401, // time out suite à l'attente d'une réponse à la requête des données du calendrier ERR_CALENDAR_NO_DATA =5402, // données non trouvées
bool CharArrayToStruct( void& struct_object, // structure const uchar& char_array[], // tableau uint start_pos=0 // position de départ dans le tableau );StructToCharArray copie une structure POD dans un tableau de uchar.
bool StructToCharArray( const void& struct_object, // structure uchar& char_array[], // tableau uint start_pos=0 // position de départ dans le tableau );
ushort MathSwap(ushort value); uint MathSwap(uint value); ulong MathSwap(ulong value);
bool StringReserve( string& string_var, // string uint new_capacity // taille de buffer pour la string );StringSetLength définit la longueur de chaîne spécifiée en caractères.
bool StringSetLength( string& string_var, // string uint new_length // nouvelle longueur de la chaîne );
bool ArrayRemove( void& array[], // tableau de n'importe quel type uint start, // indice de départ de la suppression uint count=WHOLE_ARRAY // nombre d'éléments );ArrayInsert insère dans un tableau destination le nombre spécifié d'éléments du tableau source, en commencant à l'indice spécifié.
bool ArrayInsert( void& dst_array[], // tableau destination const void& src_array[], // tableau source uint dst_start, // indice dans le tableau destination où commencer l'insertion uint src_start=0, // indice dans le tableau source pour commencer la copie uint count=WHOLE_ARRAY // nombre d'éléments insérés );ArrayReverse inverse dans un tableau le nombre spécifié d'éléments en commencant à l'indice spécifié.
bool ArrayReverse( void& array[], // tableau de n'importe quel type uint start=0, // indice de début d'inversion uint count=WHOLE_ARRAY // nombre d'éléments );
int CustomBookAdd( const string symbol, // symbol name const MqlBookInfo& books[] // an array with the DOM elements descriptions uint count=WHOLE_ARRAY // nombre d'éléments to be used );
bool CustomSymbolCreate( const string symbol_name, // nom du symbole personnalisé const string symbol_path="", // nom du groupe dans lequel le symbole sera créé const string symbol_origin=NULL // nom du symbole à partir duquel le symbole personnalisé sera créé );Le nom du symbole, à partir duquel les propriétés du symbole personnalisé seront copiées, sera spécifié dans le paramètre "symbol_origin".
Ajout de la traduction de l'interface utilisateurs en croate.
La documentation a été mise à jour.
#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.