Un modérateur a mis en forme le code incorrectement collé. En général, ce type de code est supprimé.
@StanislavKorotky Pouvez-vous nous aider à résoudre cette erreur, je pense qu'elle a commencé après les mises à jour de MT5 car je savais que le code fonctionnait les mois précédents sans aucune modification.
parameter convertion type 'long[][2]' to 'string[][] &' is not allowed SymbolFilter.mqh 199 20
Je pense que le code ci-dessous aidera à reproduire le problème :
void printSymbols() { SymbolFilter f; // objet filtre string symbols[]; // tableau pour les noms long permissions[][2]; // tableau pour les données (valeurs des propriétés) // liste des propriétés du symbole demandées ENUM_SYMBOL_INFO_INTEGER modes[] = { SYMBOL_TRADE_MODE, SYMBOL_ORDER_MODE }; // appliquer le filtre, obtenir des tableaux avec les résultats f.let(SYMBOL_VISIBLE, true).select(true, modes, symbols, permissions); const int n = ArraySize(symbols); PrintFormat("===== Trade permissions for the symbols (%d) ===== ", n); for(int i = 0; i < n; ++i) { Print(symbols[i] + ":"); for(int j = 0; j < ArraySize(modes); ++j) { // afficher les descriptions des bits et des nombres "tels quels" PrintFormat(" %s (%d)", SymbolMonitor::stringify(permissions[i][j], modes[j]), permissions[i][j]); } } }
parameter convertion type 'long[][2]' to 'string[][] &' is not allowed SymbolFilter.mqh 199 20
Je pense que le code ci-dessous aidera à reproduire le problème :
Veuillez trouver les lignes :
// nous avons besoin de cette surcharge parce que le tri intégré ArraySort // ne prend pas en charge les tableaux de chaînes de caractères void ArraySort(string &s[][]) const { QuickSortTm<string> qt(s); }
dans les fichiers d'en-tête SymbolFilter.mqh et TradeFilter.mqh, et ajoutez la surcharge de méthode suivante à côté d'elles :
// nous avons besoin de cette surcharge parce que le tri intégré ArraySort // ne prend pas en charge les tableaux de chaînes de caractères void ArraySort(string &s[][]) const { QuickSortTm<string> qt(s); } template<typename T> void ArraySort(T &s[][]) const { ::ArraySort(s); }PS. Cette question ne semble pas avoir de rapport avec l'article.
Veuillez trouver les lignes :
dans les fichiers d'en-tête SymbolFilter.mqh et TradeFilter.mqh, et ajoutez la surcharge de méthode suivante à côté d'elles :
PS. Cette question ne semble pas liée à l'article.Merci pour votre réponse rapide, après avoir fait la mise à jour, j'ai eu plus d'erreurs qui s'affichent :
parameter convertion type 'double[][2]' to 'string[][] &' is not allowed TradeFilter.mqh 338 20 cannot convert parameter 'double[][2]' to 'OrderMonitor&[][]' TradeFilter.mqh 338 20 parameter convertion type 'double[][2]' to 'string[][] &' is not allowed TradeFilter.mqh 338 20 cannot convert parameter 'double[][2]' to 'PositionMonitor&[][]' TradeFilter.mqh 338 20 parameter convertion type 'long[][2]' to 'string[][] &' is not allowed TradeFilter.mqh 163 17 cannot convert parameter 'long[][2]' to 'OrderMonitor&[][]' TradeFilter.mqh 163 17 parameter convertion type 'long[][2]' to 'string[][] &' is not allowed TradeFilter.mqh 163 17 cannot convert parameter 'long[][2]' to 'PositionMonitor&[][]' TradeFilter.mqh 163 17 etc..
J'ai remarqué que le fait d'appeler directement le QuickSortTm générique au lieu de l'ArraySort corrigeait temporairement le problème, bien que je ne pense pas que ce soit la solution optimale.
QuickSortTm<V> qt(array);
//ArraySort(array) ;
Merci pour votre réponse rapide, après avoir fait la mise à jour, j'ai eu d'autres erreurs disant :
C'est étrange, après la correction suggérée ci-dessus, j'ai compilé et exécuté ce script /MQL5/Scripts/MQL5Book/p6/SymbolFilterTradeMode.mq5 avec succès sur la build 5346. Vous n'avez pas montré votre code source.
Je fonctionne sur la version 5 build 5327
void printActiveOrders() { OrderFilter filter; ENUM_ORDER_PROPERTY_DOUBLE properties[] = {ORDER_VOLUME_INITIAL, ORDER_PRICE_OPEN, ORDER_SL, ORDER_TP}; double d[][4]; ENUM_ORDER_TYPE types[]; ulong tickets[], magics[]; string symbols[], comments[]; filter.select(properties, tickets, d); filter.select(ORDER_SYMBOL, tickets, symbols); filter.select(ORDER_COMMENT, tickets, comments); filter.select(ORDER_TYPE, tickets, types); filter.select(ORDER_MAGIC, tickets, magics); Print("Orders .................. ", ArraySize(tickets)); for (int i=0; i < ArraySize(tickets); i++) { Print(tickets[i], "\t", magics[i], "\t", symbols[i], "\t", EnumToString(types[i]), " \t", NormalizeDouble(d[i][0],3), "\t", d[i][1], " \t ", d[i][2], " \t", d[i][3], "\t", comments[i]); } } void printPositions() { PositionFilter filter; ENUM_POSITION_PROPERTY_DOUBLE properties[] = {POSITION_PRICE_OPEN, POSITION_VOLUME, POSITION_SL, POSITION_TP, POSITION_PROFIT, POSITION_SWAP}; ENUM_POSITION_TYPE types[]; double d[][6]; ulong tickets[], extIds[]; string symbols[], comments[]; filter.let(POSITION_MAGIC, sets.MagicNumber).select(properties, tickets, d); filter.select(POSITION_SYMBOL, tickets, symbols); filter.select(POSITION_COMMENT, tickets, comments); filter.select(POSITION_TYPE, tickets, types); filter.select(POSITION_IDENTIFIER, tickets, extIds); Print("Tickets\t Parent Id\tSymbols \t Trade Type \t\t\t\t\t\tEntry \t Lots \t\t SL \t\t\t TP \t\t\t\t Profit \tSwat \t\tComments"); for ( int i =0; i < ArraySize(tickets); i++) { Print(tickets[i], "\t", extIds[i] == 0 ? "\t\t\t\t\t\t\t\t\t" : (string)extIds[i], "\t", symbols[i], "\t", EnumToString(types[i]), " \t", (string)NormalizeDouble(d[i][0],3), "\t", d[i][1], " \t ", d[i][2], " \t", d[i][3], " \t", d[i][4], " \t ", d[i][5], "\t", comments[i]); //Print(tickets[i], "\t", extIds[i] == 0 ? "\t\t\t\t\t\t\t\t\t" : extIds[i], "\t", symbols[i], "\t", EnumToString(types[i]), " \t", NormalizeDouble(d[i][0],3), "\t", d[i][1], " \t ", d[i][2], " \t", d[i][3], " \t", d[i][4], " \t ", d[i][5]); } }
Sur le côté, je vois souvent ces messages :
This single line message always shows whenever I attach my EA to a chart: Unresolved int value as enum: 8 for MonitorInterface<ENUM_POSITION_PROPERTY_INTEGER,ENUM_POSITION_PROPERTY_DOUBLE,ENUM_POSITION_PROPERTY_STRING>::TradeState While these ones below shows when it is detached 2025.10.17 19:30:01.347 Deriv Trader (Volatility 10 (1 s) Index.0,M15) 8 leaked strings left 2025.10.17 19:30:01.347 Deriv Trader (Volatility 10 (1 s) Index.0,M15) 2 undeleted dynamic objects found: 2025.10.17 19:30:01.347 Deriv Trader (Volatility 10 (1 s) Index.0,M15) 1 object of class 'WebSocketConnectionHybi' 2025.10.17 19:30:01.347 Deriv Trader (Volatility 10 (1 s) Index.0,M15) 1 object of class 'MqlWebSocketTransport' 2025.10.17 19:30:01.347 Deriv Trader (Volatility 10 (1 s) Index.0,M15) 576 bytes of leaked memory found
Pardonnez-moi d'avoir omis ma source, j'ai donc repris la correction que vous m'avez suggérée afin d'obtenir à nouveau les erreurs et il semble que ces parties de mon code soient celles qui conduisent à l'erreur d'après le journal
. Par ailleurs, je vois souvent ces messages :
J'ai oublié que la lettre T était déjà utilisée comme typename du template de la classe (c'est étrange que le compilateur n'ait pas produit d'erreur dans ce cas), donc changer T par n'importe quelle autre lettre libre sera correct, par exemple X :
template<typename X> void ArraySort(X &s[][]) const { ::ArraySort(s); }
En ce qui concerne le premier avertissement, voici une explication tirée des forums (que je vous ai donnée plus tôt) :
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Experts : MQL5 Programming for Traders - Source Codes from the Book. Partie 7
Stanislav Korotky, 2025.06.14 16:26
Il s'agit simplement d'un avertissement causé par le fait que l'énumération intégrée correspondante de MQL5 présente une lacune dans les constantes qui sont normalement assignées consécutivement. Cette lacune est due au fait que MQL5 est en constante évolution et que certaines constantes peuvent devenir obsolètes et être éliminées. Vous pouvez éditer le code source pour éviter de tels avertissements.
Et à propos de la fuite de mémoire, je crains qu'il n'y ait une omission dans votre code source personnalisé, le livre n'a pas montré ce genre de choses. Vous devriez fournir un code de test complet pour reproduire le problème.
PS. Il est plus efficace d'exécuter une seule sélection pour toutes les propriétés qui vous intéressent :
// EXEMPLE : demande de profit, de symbole, de ticket pour les positions // par nombre magique spécifique, trié par profit #include <MQL5Book/Tuples.mqh> #include <MQL5Book/PositionFilter.mqh> #property script_show_inputs input ulong Magic; void OnStart() { int props[] = {POSITION_PROFIT, POSITION_SYMBOL, POSITION_TICKET}; Tuple3<double,string,ulong> tuples[]; PositionFilter filter; filter.let(POSITION_MAGIC, Magic).select(props, tuples, true); ArrayPrint(tuples); }
NB : Je pense que les modérateurs devraient déplacer toutes les questions et réponses concernant le livre (à partir de #41) vers le fil de discussion approprié, par exemple, ici - https://www.mql5.com/en/forum/459067.
- 2023.12.15
- www.mql5.com
J'ai oublié que la lettre T était déjà utilisée comme modèle de classe typename (il est étrange que le compilateur n'ait pas produit d'erreur dans ce cas), donc remplacer T par n'importe quelle autre lettre libre sera correct, par exemple X :
En ce qui concerne le premier avertissement, voici une explication tirée des forums (que je vous ai donnée plus tôt) :
Et à propos de la fuite de mémoire - je crains qu'il y ait une omission dans votre code source personnalisé, le livre n'a pas montré de telles choses. Vous devriez fournir un code de test complet pour reproduire le problème.
PS. Il est plus efficace d'exécuter une seule sélection pour toutes les propriétés qui vous intéressent :
NB : Je pense que les modérateurs devraient déplacer toutes les questions et réponses concernant le livre (à partir de #41) vers le fil de discussion approprié, par exemple, ici - https://www.mql5.com/en/forum/459067.
Je crois que vous avez raison à propos de la fuite, je pense que j'ai déjà une idée d'où elle vient.
Merci beaucoup mon frère.
void printActiveOrders() { int properties[] = {ORDER_VOLUME_INITIAL, ORDER_PRICE_OPEN, ORDER_SL, ORDER_TP, ORDER_TICKET, ORDER_MAGIC, ORDER_TYPE, ORDER_SYMBOL, ORDER_COMMENT}; Tuple9<double,double,double,double,long,long,long,string,string> values[]; OrderFilter filter; filter.select(properties, values); Print("\nFound: ", ArraySize(values), " Orders\n{ORDER_VOLUME_INITIAL, ORDER_PRICE_OPEN, ORDER_SL, ORDER_TP, ORDER_TICKET, ORDER_MAGIC, ORDER_TYPE, ORDER_SYMBOL, ORDER_COMMENT}"); ArrayPrint(values); } void printDeals() { DealFilter filter; int properties[] = {DEAL_TIME, DEAL_SYMBOL, DEAL_TICKET, DEAL_TYPE, DEAL_VOLUME, DEAL_PRICE, DEAL_COMMISSION, DEAL_PROFIT}; Tuple8<long,string,long,long,double,double,double,double> data[]; filter.select(properties, data, true); // Filtrer par temps Print("\nFound: ", ArraySize(data), " Deals\nTIME, SYMBOL, TICKET, TYPE, VOLUME, PRICE, COMMISSION, PROFIT"); ArrayPrint(data); }
@StanislavKorotky
Je peux accéder aux transactions et aux ordres avec ce code, mais je n'ai pas réussi à comprendre comment y accéder pour une période spécifique. Je n'ai pas réussi à comprendre comment accéder à la même chose pour une période spécifique. Pouvez-vous me guider vers un document ou un exemple sur la façon de faire la même chose pour une période spécifique ?
Je peux accéder aux transactions et aux ordres avec ce code, mais je n'ai pas réussi à comprendre comment y accéder pour une période de temps spécifique. Je n'ai pas réussi à comprendre comment accéder à la même chose pour une période spécifique. Pouvez-vous me guider vers un document ou un exemple sur la façon de faire la même chose pour une période spécifique ?
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Programmation MQL5 pour les Traders - Codes Source du livre. Partie 6:
Dans la partie 6 de la "Programmation MQL5 pour les traders", nous étudierons un élément clé du langage MQL5 : l'automatisation du trading. Nous commencerons par une description des entités fondamentales, telles que les spécifications des instruments financiers et les paramètres du compte de trading. Il s'agit de conditions préalables à la création d’Expert Advisors fonctionnant correctement.
Auteur : MetaQuotes