Questions sur l'assistant MQL5 et la bibliothèque standard de classes de trading - page 12
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
Jusqu'à présent, il n'existe qu'une seule solution pour remédier aux inconvénients susmentionnés :
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 se fait en mode lecture seule, la sécurité n'est en aucun cas compromise.
Pour ce faire
Presque tout est clair. La seule chose que je veux clarifier : "pourquoi ce désir de votre part de voir le signal au niveau MM et au niveau de la queue doit être implémenté au niveau de la classe de base ?
Je ne pense pas que ce soit une bonne chose (c'est-à-dire une mauvaise chose). L'algorithme n'est pas typique (de mon point de vue). Si je comprends bien, vous disposez de vos propres modules MM et trailing (avec leurs propres algorithmes liés au signal).
Ici et mettez en eux correspondant 1.,2.,3.
Presque tout est clair. La seule chose que j'aimerais clarifier est "pourquoi ce désir de votre part de voir le signal au niveau MM et au niveau de la queue devrait être implémenté au niveau de la classe de base ?".
Je ne pense pas que ce soit une bonne chose (c'est-à-dire une mauvaise chose). L'algorithme n'est pas typique (de mon point de vue). Si j'ai bien compris, vous avez vos propres modules de MM et de trailing (avec vos propres algorithmes liés au signal).
Donc, mettez les 1, 2, 3 appropriés.
Le fait est que Master prend la classe SEhregt comme base. Et par conséquent, je ne peux pas surcharger les fonctions nécessaires dans les modules que je crée, parce qu'ils sont déjà incompatibles avec cette classe CEhregt très basique dès le début parce qu'ils n'ont pas accès à une instance de classe de module de signaux.
Parce que l'instance de la classe du module de signal est stockée uniquement dans le champ de la classe SEhregt dans le fichier Expert.mqh, ligne 67
CExpertSignal *m_signal; // trading signals object
et ce champ n'est pas partagé (inaccessible) avec les autres classes et modules créés à partir d'elles.
Pour cette raison, je ne peux pas modifier les classes CExpertMoney et CExpertTrailing pour les rendre compatibles avec l'assistant.
Après tout, si l'accès est refusé dans les classes mères, les descendants ne l'obtiendront en aucun cas.
Aller à la racine (c) "Aphorismes" par Kozma Prutkov
J'ai trouvé comment faire passer les signaux de trading du module de signaux aux modules de maintien des positions et de gestion de l'argent et des risques sans passer les instances de CExpertSignal.
Ajoutons deux lignes chacune aux classes CExpertMoney et CExpertTrailing :
Pour le fichier ExpertMoney.mqh :
Pour le fichier ExpertTrailing.mqh :
Ce faisant, nous avons défini les champs et les méthodes nécessaires pour transmettre les signaux de trading. Nous devons maintenant transmettre ces signaux de négociation aux classes du module. Nous le ferons dans Expert.mqh, c'est-à-dire pour la classe CExpert
Nous allons écrire une ligne pour transmettre nos signaux de trading à la classe de support des positions.
et l'insérer au tout début de la méthode, qui est appelée avant chaque trailing stop, c'est-à-dire CheckTrailingStop() :
Nous allons écrire une ligne pour passer les signaux de trading dans la classe de gestion de l'argent et des risques :
et l'insérer au tout début de la méthode, qui est appelée avant chaque ouverture de position, c'est-à-dire CheckOpen() :
Et c'est tout, le problème est résolu.
Maintenant, nous pouvons obtenir la valeur actuelle des signaux de négociation dans les modules de gestion des positions et de gestion des actions et des risques en accédant à la valeur du champ m_signaldirection. Il ne nous reste plus qu'à enregistrer les nouveaux champs et méthodes des classes CExpertMoney et CExpertTrailing dans la documentation et à ajouter les fichiers modifiés aux mises à jour.
Voici les fichiers. Dans l'Expert, les lignes 100 et 123 sont écrites à la main.
Si vous avez d'autres questions, n'hésitez pas à les poser.
Voici les fichiers. Dans l'Expert, les lignes 100 et 123 sont écrites à la main.
Si vous avez d'autres questions, n'hésitez pas à me contacter.
Quel genre de personnes sont ces développeurs ? Quand commenceront-ils à écouter les besoins des traders, qui ont déjà de l'expérience dans la création de systèmes de trading, au lieu de concevoir des systèmes de trading qui sont pratiquement inutilisables pour les utilisateurs finaux parce qu'ils doivent modifier manuellement le code source ? Combien de fois dois-je expliquer que je peux entrer manuellement dans le code source et le corriger, et que même dans ce cas, il me faudra beaucoup de temps pour comprendre ce qui se passe, même si je connais bien la programmation. Et l'utilisateur final a peu de chances d'entrer dans le code, car il ne comprend pas la programmation. Vous avez vous-même déclaré, et je cite :
"La connaissance des langages de programmation n'est plus un prérequis pour créer des robots de trading."Voir https://www.mql5.com/ru/articles/240.
"La première version de l'assistant MQL5 offrait déjà la possibilité de créer rapidement un Expert Advisor prêt à l'emploi sous la forme d'un ensemble de modules simples sous la forme d'un code source en MQL5. Vous n'aviez même pas besoin de connaître MQL5- il vous suffisait de lire"Build your own Expert Advisor in MQL5 Wizard" (voir https://www.mql5.com/ru/articles/275).
Il s'avère maintenant que la connaissance des langages de programmation est nécessaire, car l'utilisateur doit entrer le code après l'assistant et y modifier quelque chose. C'est-à-dire que toutes les déclarations précédentes sont des inventions et des tromperies des développeurs.
Par exemple, si j'écris mon propre module de gestion de l'argent et des risques qui doit ouvrir une position en fonction du niveau du signal de transaction émis par un module écrit par un autre développeur de modules. En conséquence, mon module sera incompatible avec l'assistant. Comment expliquer aux utilisateurs qu'ils doivent aller quelque part dans le code et insérer des chaînes de caractères pour que le module fonctionne ? Après tout, les développeurs de modules devraient créer des modules, et master devrait les combiner automatiquement en un système cohérent, de sorte que les modules, au minimum, n'entrent pas en conflit les uns avec les autres et soient entièrement compatibles entre eux. Mais dans votre cas, l'assistant ne le fait pas, car après l'assistant, vous devez aller dans le code et tout refaire manuellement.
Est-il vraiment si difficile de mettre seulement six lignes dans les fichiers de classe des parents, ce que j'ai signalé dans mon précédent message ? Et le problème se résoudra de lui-même et personne ne devra entrer dans les sources et y changer quelque chose. Qu'est-ce qui va tomber de vos mains ? Pourquoi perdre votre temps sur un charabia avec démonstration de la façon dont quelque chose doit être corrigé manuellement après l'assistant ? Ne pouvez-vous pas consacrer ce même temps à une tâche plus utile, afin que personne ne doive entrer dans le code pour résoudre des problèmes similaires plus tard ?
Quelle est l'idéologie de votre entreprise ? D'un côté, elle déclare l'automatisation complète, mais dans la pratique, elle suggère d'entrer dans le code et de tout refaire à la main après la soi-disant "automatisation" ?
En somme, comme je le comprends, il est inutile d'expliquer tout cela. Il ne faut pas s'étonner que les traders ne veuillent pas passer à MT5, car la plateforme est rudimentaire et développée non pas pour la commodité de l'autotrading, mais pour la commodité des développeurs de cette même plateforme. Et à moins que l'utilisateur n'apprenne à fond la programmation, il vaut mieux qu'il reste à l'écart du trading automatisé.
Si tu ne veux pas, tu n'es pas obligé de le faire. Si vous n'avez rien d'autre à faire, restez assis ici et expliquez à chaque utilisateur où et comment il doit entrer dans le code source avec ses mains et ce qu'il doit corriger exactement.
En tout cas, avec ce niveau d'argumentation et en prenant presque chaque question au-delà des limites de l'exagération, il ne peut y avoir de travail avec vous. Le vrai travail implique une prise de décision consciente, pas une démagogie verbale.
Je crains que vous ne soyez sous l'emprise du maximalisme ou que vous ne compreniez tout simplement pas les limites de l'applicabilité des outils.
En tout cas, avec ce niveau d'argumentation et en prenant presque chaque question au-delà du niveau acceptable d'exagération, il ne peut y avoir de travail avec vous. Le vrai travail implique une prise de décision consciente, et non une démagogie verbale.
En général, je n'ai pas demandé à travailler, c'est-à-dire à gagner de l'argent, et j'étais très heureux de coopérer sur une base volontaire. C'est moi qui décide comment et où je gagne ma vie.
Eh bien, ça ne sera pas le cas et ça n'a pas à l'être. Notre métier est de proposer, vous avez le droit de refuser. Comme on dit : le maître est le patron.
Si votre entreprise a déjà tout compris et a même appris aux nuls à créer des Expert Advisors dits "prêts à l'emploi". De plus, le fait est qu'ils ne sont bons que pour la démonstration de l'Assistant, mais ils ne sont pas très bons pour l'autotrading, car même sur les données historiques, la courbe d'équité semble inconsidérable.
Bonne chance !
...
Par exemple, si j'écris mon propre module de gestion de l'argent et des risques, qui doit ouvrir une position en fonction du niveau du signal de négociation émis par le module écrit par un autre développeur de modules. Le résultat sera que mon module est déjà incompatible avec l'assistant. Comment expliquer aux utilisateurs qu'ils doivent aller quelque part dans le code et insérer des chaînes de caractères pour que le module fonctionne ? Après tout, les développeurs de modules devraient créer des modules, et l'assistant devrait les combiner automatiquement en un système cohérent, de sorte que les modules, au minimum, n'entrent pas en conflit les uns avec les autres et soient entièrement compatibles entre eux. Et vous avez un assistant qui ne le fait pas, car après lui, vous devez aller dans le code et tout refaire manuellement.
Est-il vraiment si difficile d'écrire seulement six lignes dans les fichiers de classe des parents, comme je l'ai signalé dans mon précédent message ? Et le problème se résoudra de lui-même et personne ne devra aller dans les sources et y changer quelque chose. Qu'est-ce qui va tomber de vos mains ? Pourquoi perdre votre temps sur un charabia, en démontrant comment réparer manuellement quelque chose après l'assistant ? Ne pouvez-vous pas consacrer ce même temps à quelque chose de plus utile, de sorte que personne ne doive entrer dans le code plus tard pour résoudre des problèmes similaires ?
...Votre approche viole l'encapsulation des classes, ce qui entraîne une confusion hiérarchique.
Lisez le livre de Steve McConell "The Perfect Code" à votre guise.
Imaginez une usine de production de gants, il y a un timbre à cinq doigts pour la main droite et la main gauche, mais arrive ensuite une petite commande de gants à six doigts. Il y a des gens comme ça, après tout. Mais au lieu de leur fabriquer un tampon (qui fera un lot et y restera un moment), vous proposez de modifier le tampon à cinq doigts en fabriquant un doigt glissant. Il semble être universel et tout est génial, mais la force du timbre à cinq doigts sera affaiblie au nom de l'universalité (au nom d'un minuscule besoin de produire occasionnellement des gants à six doigts). Et puis un lot de 300 quatre-doigts sera commandé, et à nouveau, le modèle fiable et éprouvé s'effritera.
On vous l'a dit plus haut :
Je ne pense pas que ce serait bon (c'est-à-dire mauvais). L'algorithme n'est pas typique (de mon point de vue). Si je comprends bien, vous disposez de vos propres modules MM et trailing (avec leurs propres algorithmes liés au signal).
Au lieu de modifier la bible standard, il serait préférable d'effectuer des développements pour l'étendre (par héritage). Alors ce serait vraiment intéressant.
HZZ De plus, pour que les gens n'aient pas à s'occuper des subtilités du code (comme vous l'avez écrit plus haut), vous pouvez envelopper les modules prêts à l'emploi dans biblio et les déverser de façon transparente sur le marché, puis il suffit de brancher le module de Reshetov et d'appuyer sur le bouton [download dough].
Votre approche viole l'encapsulation des classes et, par conséquent, introduit une confusion hiérarchique.
Lisez le livre de Steve McConell "Perfect Code" à votre guise.
Pour faire simple, imaginez le sorcier comme une fabrique de gants. Il y a un timbre à cinq doigts pour la main droite et la main gauche, mais une petite commande arrive pour des gants à six doigts. Après tout, il y a des gens comme ça. Mais au lieu de leur fabriquer un tampon (qui fera un lot et y restera un moment), vous proposez de modifier le tampon à cinq doigts en fabriquant un doigt glissant. Il semble être universel et tout est génial, mais la force du timbre à cinq doigts sera affaiblie au nom de l'universalité (au nom d'un minuscule besoin de produire occasionnellement des gants à six doigts). Et puis un lot de 300 quatre-doigts sera commandé, et à nouveau, le modèle fiable et éprouvé s'effritera.
On vous l'a dit plus haut :
Au lieu d'apporter des modifications à la bible standard, il serait préférable d'effectuer des développements pour l'étendre (par le biais de l'héritage). Alors ce sera vraiment intéressant.Par exemple, un stop suiveur est exécuté selon un système de signaux distinct développé par un développeur tiers du module, tel qu'une onde mobile ou parabolique, dont les signaux contredisent à certains moments les signaux du module et le système de trading commence à fonctionner de manière incohérente. Le module de gestion de l'argent et des risques ne peut pas non plus deviner par télépathie que le signal de trading est faible et qu'il est temps de réduire le volume des positions ouvertes et d'agir selon certaines règles indépendantes du module de signal, c'est-à-dire que l'un d'eux demande de ralentir dans les virages et l'autre d'accélérer. Et tout le système de trading, créé avec l'aide de votre soi-disant maître, se révèle comme dans la fable de Krylov intitulée "Le crabe et le brochet". Ni plus ni moins. Et cette même idéologie de fable consistant à rassembler des conseillers téméraires, votre société tente de nous l'imposer pour l'autotrading. En avons-nous besoin ?
Il en résulte des systèmes de trading dont les graphiques d'équité et d'équilibre ne peuvent qu'effrayer les traders et les investisseurs, voir https://www.mql5.com/ru/code/833.
Ce n'est pas parce que le créateur du module, dans ce cas précis Nikolay Kositsin, a fait quelque chose de mal, mais parce que les autres modules du système de trading ne peuvent pas être coordonnés entre eux et fonctionnent de manière incohérente.
Mais il est inutile de l'expliquer. Les développeurs de la plateforme, au lieu d'écrire une misérable six lignes pour résoudre les problèmes, écriront des kilomètres de notes de bas de page dans les forums, accusant les développeurs de systèmes de trading de répandre la démagogie, les violations de l'encapsulation et autres péchés mortels, mais ils ne lèveront pas le petit doigt pour corriger leurs propres déficiences et incompréhensions.
Il n'y a donc pas lieu de poursuivre les discussions. Restez-en à votre opinion et faites ce que vous voulez. J'en ai marre et ça ne sert à rien, parce que les développeurs de la plateforme n'en ont rien à faire, parce qu'ils ne font pas leurs propres trucs et si ces mêmes outils peuvent être utilisés par les utilisateurs de la plateforme pour l'autotrading, les développeurs s'en fichent. Celui qui est plein d'affamés ne sait pas de quoi il a faim.
...
Reshetov, je ne peux même pas lire vos gribouillages émotionnels. Vous voulez argumenter, argumentez votre cas.
L'intérêt d'un assistant est de créer un modèle qui répond aux besoins de la plupart des traders. J'ai un modèle d'EA sur Cherver (je l'ai écrit moi-même), il définit la fonctionnalité de base. Et dans la pratique, elle doit toujours être corrigée. Mais les modifications sont minimes. Si j'avais créé un modèle pour ne pas l'éditer du tout, cela aurait été un énorme code pour toutes les occasions, dans lequel on aurait pu se perdre.
L'assistant crée un modèle qui fonctionne déjà, et une personne qui ne sait pas programmer peut l'utiliser tel quel. Si vous comprenez le codage, il est facile de le modifier pour obtenir ce que vous voulez. Il suffit d'une seule fois pour comprendre comment les choses sont créées et où elles sont séparées dans la bibliothèque standard. En outre, vous pouvez également utiliser la bibliothèque standard comme modèle et copier simplement les sections qui vous intéressent dans votre propre code.