Questions sur l'assistant MQL5 et la bibliothèque standard de classes de trading - page 11
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
Trois questions :
En théorie, nous pouvons bien sûr construire l'EA à l'aide de l'assistant, puis ajouter toutes ces fonctionnalités manuellement au code. Mais il est souhaitable que tout cela soit implémenté sous la forme de méthodes standard, c'est-à-dire pour les nuls qui veulent utiliser l'assistant, afin qu'ils n'aient pas à entrer dans le code et à le modifier, par exemple, au cas où ils voudraient remplacer un module de signal par un autre.
Vous avez répondu vous-même à toutes vos questions : "... ...construire l'EA à l'aide d'un assistant et ensuite... manuellement ...". Il n'y a pas encore d'autres options. L'assistant, très probablement, ne sera pas développé dans un avenir proche.
Il est dommage qu'une si bonne entreprise soit abandonnée dans un coin lointain.
S'il avait été mis à jour, beaucoup de choses auraient pu être faites, c'est-à-dire que nous aurions pu créer des modules prêts à l'emploi à partir desquels les mannequins et autres utilisateurs pourraient assembler divers EA prêts à l'emploi sans devoir passer par les codes. Mais dans ce cas, nous obtenons le même désordre qu'avec la mql4 algorithmique, c'est-à-dire que vous prenez un algorithme, entrez dans le code et l'utilisez manuellement. Encore une fois, le principe de la POO est violé. Par exemple, si vous voulez remplacer un module par un autre, vous devrez retourner dans le code et tout modifier manuellement à nouveau. Vous obtenez beaucoup d'absurdités, car le seul fait de "ramper" dans les codes, afin de comprendre au moins où et quoi modifier, vous ferait perdre beaucoup de temps.
C'était un bon début. C'est dommage. J'ai créé un module de signal hier, mais je ne sais toujours pas comment faire fonctionner l'ensemble de l'EA sans passer par le code source à chaque fois. Je viens d'insérer le module, j'ai ajouté la gestion des positions, la gestion de l'argent et la gestion des risques, et tout fonctionne. Mais non, ça ne marchera pas. Si un utilisateur construit un EA en utilisant l'assistant, il ne fonctionnera pas. Il devra écrire des tas d'instructions pour savoir où regarder dans le code et ce qu'il faut changer. Sans compter que je dois encore m'occuper de tout cela moi-même avant de rédiger une instruction.
Il ne reste donc plus aux utilisateurs qu'à apprendre mql5, OpenCL, etc. pour gérer l'autotrading. Sinon, ils n'auront pas de chance.
Eh bien, puisque ce projet a été abandonné, je vais maintenant réfléchir dans une autre direction.
C'est dommage qu'une si bonne entreprise soit abandonnée dans un coin lointain.
Espérons qu'il ne soit pas abandonné mais reporté. J'ai moi-même beaucoup de réflexions intéressantes sur le développement du Sorcier. Mais...
L'espoir meurt en dernier (c) proverbe populaire
A la première question, c'est à dire comment tester le module de signal en ouvrant les prix et en négociant par ticks, j'ai trouvé une solution pour ne pas avoir à rentrer dans les codes, et même mieux que celle généralement admise.
Je n'ai pas encore compris comment lire les indications du module de signaux dans les modules de gestion des positions et de gestion des actions et des risques. J'ai cherché le code source et j'ai regardé autour de moi. Le module signal obtient ses résultats par la méthode direction(), c'est-à-dire qu'il me suffit d'adresser une instance de cette même classe de module dans les modules de gestion des positions et de gestion des capitaux et des risques et d'appeler cette même méthode pour lire ses valeurs. La façon dont cela peut être fait sans modifier le code n'est pas encore claire.
L'espoir est éternel (c) proverbe populaire
A la première question, c'est à dire comment tester le module de signal en ouvrant les prix et en négociant par ticks, j'ai trouvé une solution pour ne pas avoir à rentrer dans les codes, et même mieux que celle généralement admise.
Et je n'arrive pas à comprendre comment lire les lectures du module signal dans les modules gestion des positions et gestion des actions et des risques, sans creuser les codes. J'ai cherché le code source et fait mes devoirs. Le module signal obtient ses résultats par la méthode direction(), c'est-à-dire qu'il me suffit d'adresser une instance de cette même classe de module dans les modules de gestion des positions et de gestion des actions et des risques et d'appeler cette même méthode pour lire ses valeurs. La façon dont cela peut être fait sans modifier le code n'est pas encore claire.
Sans changer les codes, cela ne fonctionnera probablement pas.
Ne pas changer les codes ne fonctionnera probablement pas.
Tout n'est pas encore perdu. Vous pouvez créer des classes héritées de CExpert, CExpertMoneu et CExpertTrailing et leur ajouter les méthodes nécessaires pour accéder à une instance de la classe du module de signalisation. Mais il y a un problème ici aussi, car l'assistant écrit dans l'EA créé #include <Expert\Expert.mqh> et non son descendant.
Nous devons encore y réfléchir.
Si les développeurs avaient deviné dès le départ qu'un module de signaux peut être utilisé pour tous les autres modules comme le principal et que des signaux supplémentaires (comme dans cette version de l'assistant) peuvent être ajoutés aux modules de support de position et de gestion des actions et des risques, les codes auraient été plus faciles. Mais dans notre cas, chaque module nécessite de spécifier des conditions supplémentaires pour les signaux et donc ils ont besoin de paramètres externes supplémentaires, ce qui résulte en un tel monstre avec beaucoup de paramètres à optimiser. Sans oublier que les signaux d'un module peuvent entrer en conflit, c'est-à-dire qu'un module de signal peut ouvrir une position et un module auxiliaire la fermer au prochain tick, si les conditions d'entrée et de sortie du marché sont contradictoires.
Tout n'est pas encore perdu. Après tout, vous pouvez créer des classes héritées de CExpert, CExpertMoneu et CExpertTrailing et leur ajouter les méthodes nécessaires d'accès à une instance de la classe du module de signal. Mais il y a un problème ici aussi, car l'assistant écrit dans l'EA créé #include <Expert\Expert.mqh> et non son descendant.
Nous n'y avons pas encore réfléchi.
Si les développeurs avaient deviné dès le départ qu'un module de signaux peut être utilisé pour tous les autres modules comme le principal et que des signaux supplémentaires (comme dans cette version de l'assistant) peuvent être ajoutés aux modules de support de position et de gestion des actions et des risques et qu'ils l'avaient prévu dans les codes, ce serait beaucoup plus facile. Mais dans notre cas, chaque module nécessite de spécifier des conditions supplémentaires pour les signaux et donc ils ont besoin de paramètres externes supplémentaires, ce qui résulte en un tel monstre avec beaucoup de paramètres à optimiser. Sans mentionner le fait que les signaux d'un module peuvent entrer en conflit, c'est-à-dire qu'un module de signal peut ouvrir une position et un module auxiliaire la fermer au prochain tick, si les conditions d'entrée et de sortie du marché sont contradictoires.
C'est comme ça que c'est conçu. L'assistant crée le "poisson" de l'EA. Plus loin :
C'est ainsi que cela a été prévu. Le maître crée le "poisson" du conseiller. Suivant :
C'est ce qui est laid, des choses comme :
Nous voulions le meilleur. Il s'avère que c'est toujours la même chose (c) Tchernomyrdine
En général, la plupart des malentendus peuvent être corrigés, mais cela doit être fait au niveau de la classe mère racine, puis les classes corrigées peuvent être distribuées par des mises à jour de la plate-forme. C'est-à-dire que vous devez ouvrir l'accès à la méthode Direction() du module de signal à partir des modules de support de position et de gestion des actions et des risques. En effet, si les développeurs de modules individuels modifient le code source des classes parentes, il en résulte une incompatibilité du code source et les modules créés ne fonctionneront pas sur d'autres ordinateurs. Si les développeurs de modules créent des classes parentes avec des méthodes surchargées, l'incompatibilité sera toujours au niveau du maître, parce que ce dernier écrit ses propres inludes, et, par conséquent, les utilisateurs finaux doivent écrire à nouveau des instructions, et ils ne voudront guère entrer dans les sources, et s'ils le font, alors erreur dans un seul symbole ou ailleurs, etc....
C'est le problème, parce que dès le début, il y a des choses qui n'ont pas été prises en compte :
Nous voulions le meilleur. Il s'avère que c'est toujours la même chose (c) Tchernomyrdine
En général, la plupart des malentendus peuvent être corrigés, mais il est souhaitable de le faire au niveau de la classe mère racine et de distribuer ensuite les classes corrigées par le biais de mises à jour. En effet, si le code source des classes parentales est corrigé par les développeurs de modules, il en résultera une incompatibilité du code source et les modules créés ne fonctionneront pas sur d'autres ordinateurs. Si le développeur crée des classes parentes avec des méthodes surchargées, alors l'incompatibilité est déjà au niveau du maître, parce qu'il écrit ses propres inclusions, et doit donc à nouveau écrire des instructions aux utilisateurs finaux, et il est peu probable qu'ils veuillent entrer dans le code source, et s'ils y entrent, alors l'erreur dans un seul caractère ou ailleurs, et ainsi de suite.
Laissez-nous vous donner quelques suggestions. Nous allons les examiner.
Jusqu'à présent, il n'existe qu'une seule chose qui réponde aux inconvénients ci-dessus :
Ouvrir l'accès à la lecture des valeurs retournées par la méthode Direction() du module signal à partir des modules de gestion des positions et de gestion des capitaux et des risques.
Ajoutez une méthode supplémentaire, par exemple, avec l'identifiant double getMainSingnal(), qui fait référence à une instance de la classe du module de signaux et renvoie le résultat de la méthode Direction() du module de signaux. Comme cet échange d'informations a lieu en mode lecture seule, la sécurité ne sera en aucun cas rompue.
Pour ce faire
P.S. La classe CExpert a une référence à une instance de la classe module de signal.
CExpertSignal *m_signal; // trading signals object
Vous devez créer des champs analogues pour les classes CExpertMoney et CExpertTrailing et leur passer la même valeur du champ mentionné ci-dessus dans la classe CExpert pendant l'initialisation.