Discussion de l'article "Plusieurs indicateurs sur un seul graphique (Partie 04) : Passer à un Expert Advisor"

 

Un nouvel article Plusieurs indicateurs sur un seul graphique (Partie 04) : Passer à un Expert Advisor a été publié :

Dans mes articles précédents, j'ai expliqué comment créer un indicateur utilisant plusieurs sous-fenêtres, ce qui est intéressant lorsqu'on utilise des indicateurs personnalisés. Cette fois-ci, nous allons voir comment ajouter plusieurs fenêtres à un même Expert Advisor.

Lorsque j'ai décidé de créer quelque chose de nouveau en utilisant la POO (Programmation Orientée Objet), je l'ai fait parce que je savais déjà qu'il y avait de gros avantages à utiliser cette approche, notamment la sécurité et l'héritage. Il existe également le polymorphisme. Nous l'utiliserons plus tard lors de la création d'un système d'ordres croisés. Dans ce cas particulier, nous allons utiliser l'un des avantages de la POO : l'héritage. C_TemplateChart est déjà une classe entièrement fonctionnelle. En voyant cela, vous ne voudriez pas devoir tout reprogrammer, ou courir le risque d'ajouter du code à la classe qui l’empêcherait d'être utilisée à d'autres endroits. La solution consiste à utiliser l'héritage. Il permet d'ajouter un nouveau code ou une nouvelle fonction sans modifier le code d'origine.

L'utilisation de l'héritage présente un certain nombre d'avantages : le code déjà testé reste testé ; la complexité augmente sans que la taille du code n'augmente dans les mêmes proportions ; seules les nouvelles fonctionnalités doivent réellement être testées ; ce qui ne change pas est simplement hérité, ce qui assure la stabilité. En d'autres termes, les choses s'améliorent avec un effort minimal, mais avec une sécurité maximale. Pour comprendre cela, regardons le schéma ci-dessous.

Auteur : Daniel Jose

 
MetaQuotes:

Nouvel article Plusieurs indicateurs sur un graphique (Partie 04) : Starting with EA a été publié :

Auteur : Daniel Jose

Bonjour Daniel, j'ai suivi vos articles, mais qu'en est-il de la partie 03 ?
 
Mateus Lopes #:
Bonjour Daniel, j'ai suivi vos articles, mais qu'en est-il de la partie 03 ?

Il y a eu un petit problème au moment de la demande de publication, mais j'ai déjà autorisé la publication de la partie 03, elle sera bientôt disponible aussi, ce problème était plutôt dû au nombre d'articles que j'ai déjà envoyés... il y a actuellement 15 autres articles à analyser, tous impliqués dans le développement de cette EA et avec chacun d'entre eux les choses deviennent de plus en plus complexes .... mais merci de suivre la série ... attendez vous à beaucoup de nouveautés à partir de l'article 05, à partir de là ça va vraiment valoir le coup parce que ça va devenir quelque chose de gros, ces premiers articles sont juste pour vous présenter ce qui va venir...😁👍👍.

 

Bonjour Daniel,

J'ai des problèmes avec les indicateurs multicolores et vos articles, que j'apprécie, m'indiquent que vous pourriez en connaître la solution.

Je veux produire une fonction qui définit tous les attributs de l'indicateur sans utiliser les options #property, par exemple #property indicator_color1 clrCrimson,clrWhite,clrLime

Ce que je constate dans le programme de test ci-dessous, c'est qu'avec la #property indicator_color1 clrCrimson,clrWhite,clrLime incluse, le programme fonctionne correctement, alors que si je la commente, le programme ne fonctionne pas correctement.Dans ce cas, il semble qu'il ne trace que certains des points de données, comme s'il utilisait un cadre temporel "supérieur" ou qu'il sautait plusieurs points de données. Je soupçonne que la directive "property color" définit d'autres attributs que je n'ai pas identifiés lorsque plusieurs couleurs sont spécifiées.

Le deuxième problème est que je ne comprends manifestement pas les détails et les exigences de l'utilisation de graphiques multicolores. J'ai cherché dans la documentation et je n'ai trouvé aucun article donnant un aperçu de l'utilisation d'indicateurs multicolores. Alors que le premier graphique change de couleur correctement, le second, qui représente les creux, ne change pas de couleur selon l'appel de ma fonction. Ce tracé nécessite les trois propriétés : type2, color2, & width2, pour fonctionner correctement. Je suis également perplexe quant à la raison pour laquelle les déclarations de propriétés utilisent 2 au lieu de 3. J'ai utilisé l'indicateur Laguerre Adaptive Filter de Mladen pour identifier que les indicateurs de propriétés utilisent le numéro de tracé, 2, et non le numéro d'indicateur 3 pour s'afficher correctement.

Toute suggestion, référence ou aide sera grandement appréciée.

Cordialement, CapeCoddah

Dossiers :
 
CapeCoddah indicateurs multicolores. Alors que le premier graphique change de couleur correctement, le second, qui trace les points bas, ne change pas de couleur selon mon appel de fonction. Ce graphique nécessite les trois propriétés : type2, color2 et width2, pour fonctionner correctement. J'ai utilisé l'indicateur Laguerre Adaptive Filter de Mladen pour identifier que les indicateurs de propriétés utilisent le graphique numéro 2, et non l'indicateur numéro 3, pour s'afficher correctement.

Toute suggestion, référence ou aide sera grandement appréciée.

Cordialement, CapeCoddah

Vous êtes un peu perdu, je peux le comprendre... mais toute la confusion vient du fait que vous ne regardez pas les détails de votre code. Je vais essayer d'expliquer certains des détails qui se trouvent dans le commentaire, puis je parlerai un peu de votre code....

Le premier point est que vous pouvez même produire un indicateur multicolore sans utiliser #property indicator_colorN mais pour l'utilisateur et même pour vous il est plus pratique, plus sûr et plus simple de comprendre et de modifier le code, car tout ce que vous avez à faire en allant dans les propriétés est de modifier les couleurs qui y sont présentes, et pour l'utilisateur c'est plus simple car il n'aura qu'à choisir la couleur à modifier et faire le changement, ceci dans la fenêtre standard que MT5 crée pour les indicateurs. D'une certaine manière, vous faites déjà la bonne chose en utilisant la commande PlotIndexSetInteger pour générer les changements de couleur, et c'est le cas lorsque nous n'utilisons pas #property indicator_colorN, mais lorsque nous utilisons les propriétés, il n'est souvent pas judicieux d'utiliser la commande PlotIndexSetInteger pour définir d'autres couleurs, En effet, cela peut être plus compliqué à maintenir et plus déroutant pour l'utilisateur, car il peut ne pas vraiment comprendre ce que la norme de couleur essaie de dire, même si le code est le vôtre et que vous serez le seul à utiliser l'indicateur, cela n'a pas beaucoup de sens, sauf dans de rares cas où vous créez un modèle de couleur dynamique.

Passons maintenant au deuxième point : Le problème dans ce cas est que vous confondez le nombre de choses que l'indicateur va tracer ( 2 pour 2 lignes ) avec les propriétés de l'objet ( dans ce cas ligne ) et pour que la ligne soit tracée, vous devez en fait déclarer au moins 3 informations, qui sont TypeN, ColorN, WidthN, où le N indique le numéro de l'objet, avec de la pratique et du temps vous finirez par comprendre ces petites différences entre la propriété de l'indicateur et les propriétés des objets qu'il utilise.... N'abandonnez pas... continuez à étudier et bientôt les choses deviendront plus claires.... 😁👍

Voyons maintenant un peu de votre code... Je ne vais pas vous montrer exactement comment le corriger (si je le fais ce ne sera pas amusant... .... 😁👍✌ ) Je veux que vous fassiez attention au fait suivant, et c'est important :

      Buf=Set_IndexBuffer5(Buf, dataHi, INDICATOR_DATA , DRAW_COLOR_LINE , 4 ,
"High" , clrYellow , clrWhite , clrDodgerBlue );
      Buf=Set_IndexBuffer5(Buf, dataHic, INDICATOR_COLOR_INDEX );
      Buf=Set_IndexBuffer5(Buf, dataLo, INDICATOR_DATA , DRAW_COLOR_LINE , 4 ,
"Low" , clrYellow , clrWhite , clrDodgerBlue );
      Buf=Set_IndexBuffer5(Buf, dataLoc, INDICATOR_COLOR_INDEX );

Notez que j'ai marqué deux choses dans votre code... maintenant, voyons ce qui se passe lorsqu'il est joué sur le graphique.....


Voyez qu'un seul des labels est tel que vous l'avez déclaré dans le code, seulement le HIGH .... et le LOW ? !?! où est-elle ? !?! c'est le premier point que vous devriez corriger, parce que le fait que le tag LOW n'est pas montré indique que le modèle de couleur utilisé est ce qui est déclaré dans #property indicator_color2, c'est-à-dire que vous avez un échec à ce point, si vous essayez de supprimer les propriétés de l'indicateur 2 qui créent en fait la ligne LOW, même en gardant le reste du code, la ligne HIGH sera tracée, mais la ligne LOW ne le sera pas....pourquoi ?!?! parce qu'en fait vous ne définissez pas les informations nécessaires pour tracer la ligne LOW, ceci dynamiquement via l'utilisation de l'appel PlotIndexSetInteger... cela semble étrange ... mais c'est ce qui se passe ....

Lorsque vous aurez résolu ce problème, si vous souhaitez vraiment utiliser la méthode dynamique de déclaration des données de l'objet row à l'aide de PlotIndexSetInteger, vous pourrez supprimer les commandes de compilation #property indicator_color de la scène, car les données nécessaires seront définies dynamiquement, mais si vous ne souhaitez pas faire un tel effort, c'est très bien.....

Maintenant je veux que vous regardiez l'image ci-dessus et que vous la compariez avec les couleurs que vous utilisez dans #property indicator_color ... regardez ces couleurs très attentivement .... si vous faites cela vous remarquerez quelque chose d'étrange .... encore une fois je ne dirai pas de ne pas perdre le plaisir, mais essayez d'utiliser des couleurs différentes, sans répéter aucune d'entre elles ... quand vous les répétez il devient plus difficile de comprendre où est l'erreur ... 😁👍

Maintenant un dernier détail : Le fait que tu penses qu'il ne trace que certains points et qu'il en saute d'autres peut avoir deux raisons : Le motif de couleur ne contraste pas avec le fond du graphique, essayez d'utiliser des couleurs qui contrastent avec le fond du graphique, et la seconde, mais je ne crois pas que ce soit réellement le cas, est qu'il peut y avoir un échec dans l'événement OnCalcule, vous retournez -1 ou la valeur de i, la chose correcte est de retourner rates_total, donc changez cela dans le code pour éviter les problèmes futurs....

 

Bonjour Daniel,

Je pensais que les caractéristiques du dessin étaient définies à l'aide de la spécification de la mémoire tampon, comme dans MQ4, alors que, pour les spécifications DRAW_COLOR... au moins, les caractéristiques du dessin sont définies à l'aide de l'identificateur de tracé séquentiel. Je n'ai pas déterminé si les spécifications DRAW_LINE etc. nécessitent également des spécifications de tracé. De plus, la propriété indicator_colorX a en fait deux fonctions, d'abord pour compter et définir le nombre de couleurs et ensuite pour placer chaque couleur spécifiée dans sa position de tableau appropriée.Je joins deux fichiers, Color Test qui fonctionne maintenant correctement bien qu'il nécessite plus de raffinements, et MLADEN's MACD Original2_1 légèrement modifié. Le programme de Mladen est intéressant car il a défini deux tracés mais n'utilise qu'un seul tampon d'index de couleur.


Merci pour votre aide.

Dossiers :