Discussion de l'article "Le MQL5 Cookbook : Implémentation d'un tableau associatif ou d'un dictionnaire pour un accès rapide aux données" - page 3
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
J'ai décidé d'utiliser cette classe dans mon EA en tant que conteneur de stratégies de la forme (StrategyGUID, Strategy), où StrategyGUID est un identifiant de type ulong ; Strategy est une stratégie créée sur la base d'une classe avec héritage de CObject.
En conséquence, je déclare les variables nécessaires, y compris le CDictionary StrategyBook - le livre des stratégies actives ; je crée les stratégies nécessaires Strategy01, Strategy02, qui dans la fonction OnInit() de l' EA initient divers paramètres, y compris en leur assignant des GUID uniques. A la fin de la fonction OnInit(), je décide de sauvegarder les stratégies dans le livre des stratégies en appelant le code suivant
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
Et j'obtiens alors l'erreur "StrategyXX - parameter conversion not allowed" sur les deux lignes.
D'après mon expérience avec C#, tout est fait correctement. Mais en MQL5, j'obtiens cette erreur.
À quoi cela peut-il être lié ?
J'ai décidé d'utiliser cette classe dans mon EA en tant que conteneur de stratégies de la forme (StrategyGUID, Strategy), où StrategyGUID est un identifiant de type ulong ; Strategy est une stratégie créée sur la base d'une classe avec héritage de CObject.
En conséquence, je déclare les variables nécessaires, y compris le CDictionary StrategyBook - le livre des stratégies actives ; je crée les stratégies nécessaires Strategy01, Strategy02, qui dans la fonction OnInit() de l' EA initient divers paramètres, y compris en leur assignant des GUID uniques. A la fin de la fonction OnInit(), je décide de sauvegarder les stratégies dans le livre des stratégies en appelant le code suivant
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
Et j'obtiens alors l'erreur "StrategyXX - parameter conversion not allowed" sur les deux lignes.
D'après mon expérience avec C#, tout est fait correctement. Mais en MQL5, j'obtiens cette erreur.
À quoi cela peut-il être lié ?
Il peut y avoir plusieurs raisons. Le plus probable est une incompatibilité de type ou un travail incorrect avec les pointeurs. Nous ne pouvons pas non plus exclure les particularités du travail avec les méthodes template (elles ont aussi leurs propres nuances).
En général, il est préférable d'utiliser un moteur de négociation prêt à l'emploi, ce qui vous permettra d'économiser beaucoup de temps et de nerfs : https://www.mql5.com/fr/articles/2166.
Oui, c'est ce que j'ai finalement décidé de faire.
Nouvel article MQL5 Cookbook : Implementing an Associative Array or a Dictionary for Quick Data Access a été publié :
Auteur : Vasiliy Sokolov
Merci pour tous ces efforts, mais je n'arrive pas à faire fonctionner les exemples de code.
Il semble que Dictionary dict ; devrait être CDictionary dict ;
Que diriez-vous d'un exemple simple et fonctionnel ?
Concernant le nouveau MT4 (Build 1080, 12 mai 2017) ces erreurs se produisent lors de la compilation et empêche l'exécution :
'm_array' - les structures contenant des objets ne sont pas autorisées Dictionary.mqh 303 25
Bonjour,
Comme dit précédemment par une autre personne, il n'y a pas d'exemple compilable.
Seulement un fichier avec des commentaires en russe.
Je suis reconnaissant d'utiliser avec succès la bibliothèque de Vasiliy. C'est une aide précieuse !
Je me souviens que j'avais aussi des erreurs de compilation et que j'ai pu les corriger. Cependant, je ne peux pas vraiment dire lesquelles et ce que j'ai fait.
Et comme je suis extrêmement ennuyé par le formatage du code MQL5 et que je reformate toujours tout dans un format C++ moderne (indentation correcte, évitement des crochets inutiles, pas d'encombrement des commentaires, et ainsi de suite), il m'est impossible de dire quel était le véritable changement dans le code. Tout ce dont je me souviens, c'est que les changements étaient minimes.
Au cas où vous voudriez utiliser la bibliothèque correctement formatée, la voici :
(Notez que j'utilise des tabulations, donc le formatage semble cassé ici, mais dans le MetaEditor il ne l'est pas !)
Je pense avoir trouvé un bug en supprimant un élément et en essayant d'atteindre le dernier élément :
L'erreur dans le CDictionary.mqh sera :
accès aupointeur invalide dans 'Dictionary.mqh' (463,9)
Quelqu'un peut-il confirmer cette erreur ? Des idées pour résoudre ce problème ?