Erreurs, bugs, questions - page 3125

 
Alexey Viktorov #:
Tout le monde comprend votre penchant pour les kanvas depuis longtemps. Mais tout le monde n'y est pas habitué... ))))
Tu ne devrais pas.
L'habitude fait partie du passé.
 
Nikolai Semko #:
Tu ne devrais pas.
L'habitude fait partie du passé.

Ouais... si je ne meurs pas avant...

 
Les tampons sont plus faciles à utiliser, mais vous pouvez envoyer n'importe quoi à Kanvas. D'autre part, il existe également de nombreux types différents de tampons d'indicateurs dans les indicateurs personnalisés de MQL5. En général, le programmeur ne devrait pas commettre d'erreur en choisissant l'une de ces méthodes. Mais le choix devrait toujours dépendre de la tâche à accomplir...
 
Alexey Viktorov #:

Ce n'est probablement pas une béquille, mais jusqu'à présent, je n'ai aucune explication sur ce qui se passe. Merci...

Cela dépend probablement du tampon qui est le plus haut dans la construction. Il suffit de changer le + en -

et ça marchera aussi. Mais j'avais besoin de diriger l'épaisseur à l'intérieur de la barre.

Le tampon de remplissage a deux couleurs. Vous devez les définir en les séparant par des virgules. Celle qui est la plus haute sur l'écran détermine la couleur de remplissage. Vous ne spécifiez pas une des couleurs - elle est remplacée par clrNONE.

 
Mihail Matkovskij #:
Il est plus facile de travailler avec des tampons, mais vous pouvez sortir n'importe quoi sur Kanvas. D'autre part, dans les indicateurs personnalisés de MQL5, il y a aussi beaucoup de types différents de tampons d'indicateurs. En général, le programmeur ne devrait pas commettre d'erreur en choisissant l'une de ces méthodes. Mais le choix devrait toujours dépendre de la tâche à accomplir...

Bien entendu, les tampons sont plus difficiles à utiliser. C'est plus facile avec une toile.
Vous ne pouvez pas mettre #property dans une fonction.

Et vous pouvez ajouter une ligne de kanvas avec une seule ligne en passant un tableau à une fonction.
Personnellement, j'utilise kanvas plutôt pour la visualisation de certains processus et de données intermédiaires pendant le développement. De cette façon, il est plus facile de voir les problèmes et de trouver des solutions optimales.
Sauf, bien sûr, si nous parlons d'algorithmes primitifs construits sur des intersections.
Voici, par exemple, mon travail actuel.
Tout ce placage est un service et il m'aide beaucoup à trouver des solutions optimales.
Avec des tampons, bien sûr, ce n'est pas possible. De plus, cette solution fonctionne aussi bien dans les conseillers experts que dans les indicateurs. Et le code fonctionne également dans MT4.

Et elle est réalisée très facilement et rapidement. Littéralement à la volée.
 
Nikolai Semko #:

Bien entendu, les tampons sont plus difficiles à utiliser. C'est plus facile avec une toile.
Vous ne pouvez pas mettre #property dans une fonction.

Et vous pouvez ajouter une ligne de kanvas avec une seule ligne en passant un tableau à une fonction.
Personnellement, j'utilise kanvas plutôt pour la visualisation de certains processus et de données intermédiaires pendant le développement. De cette façon, il est plus facile de voir les problèmes et de trouver des solutions optimales.
Sauf, bien sûr, si nous parlons d'algorithmes primitifs construits sur des intersections.
Voici, par exemple, mon travail actuel.
Tout ce placage est un service et il m'aide beaucoup à trouver des solutions optimales.
Avec des tampons, bien sûr, ce n'est pas possible. De plus, cette solution fonctionne aussi bien dans les conseillers experts que dans les indicateurs. Et le code fonctionne également dans MT4.

Et ceci est mis en œuvre très facilement et rapidement. Littéralement à la volée.

Ce problème nécessite l'utilisation de Canvas. Bien sûr, nous n'avons pas d'autre choix. Il y a une possibilité, c'est DirectX. Mais je ne sais pas qui l'utilise dans les applications MQL. Je n'ai jamais vu de tels exemples. Kanvass m'a beaucoup aidé lorsque j'ai eu besoin de faire apparaître l'oscillateur dans le graphique avec les indicateurs de tendance. Bien entendu, je ne peux pas obtenir un tel résultat en utilisant des mécanismes d'indicateurs personnalisés. J'ai créé deux classes basées sur CCanvas. L'un d'entre eux affiche des oscillateurs, le second des indicateurs de tendance à l'aide de méthodes, où des tableaux de valeurs d'indicateurs, des tableaux de couleurs et des tableaux d'indices de couleurs sont transmis. Mais lorsque j'ai besoin d'afficher un indicateur, j'utilise les méthodes des indicateurs personnalisés. Je ne sais pas pourquoi. Soit c'est une habitude, soit je ne veux pas trop compliquer le code, alors que le point principal et la complexité résident dans le calcul des valeurs, et non dans la méthode de leur sortie.

 
Mihail Matkovskij #:
Mais le choix devrait toujours dépendre de la tâche à accomplir...

J'ai oublié de te dire. L'utilisation de Kanvas est également très utile dans les robots où vous devez afficher des valeurs calculées dans un graphique, mais où les tampons des indicateurs ne sont pas disponibles. Ensuite, les valeurs ou les signaux ne peuvent être émis à l'aide de Kanvas que s'ils sont en nombre suffisant (pas 2 ou 3 signaux qui peuvent être émis à l'aide d'objets graphiques).

 
Nikolai Semko #:

Mon Dieu, ces indicateurs de tampon sont si inconfortables. Effrayant.
Avec le dessin sur toile, tout est beaucoup plus facile, il y a moins de code, plus clair, plus universel et une totale liberté d'action.

La polyvalence d'un canevas s'arrête lorsque ses valeurs doivent être obtenues d'un autre EA/indicateur.

Ou avez-vous déjà trouvé une solution pour cela aussi ? )

 
Andrey Khatimlianskii #:

La polyvalence de Kanvas s'arrête lorsque ses valeurs doivent être obtenues à partir d'un autre EA/indicateur.

Ou avez-vous déjà trouvé une solution à ce problème également ? )

Quels sont les problèmes, Andrei ?
Vous formez une structure de données ou un tableau de structures dans l'EA ou dans l'indicateur et l'envoyez à une ressource.
Et du côté de la réception, vous lisez cette structure ou ce tableau de structures.
C'est encore plus pratique, car vous avez à traiter des noms et différents types de données de tailles nécessaires, plutôt que des tableaux doubles numérotés de toute la longueur des guillemets.
S'il s'agit d'un indicateur pour un marché, mais vous devez fournir la classe qui lit les données de la ressource.
Le client doit seulement ajouter un include et déclarer une instance de la classe. Peut également appeler les méthodes de OnTimer et OnTick. Et ensuite, cette instance de la classe aura toujours les données réelles de l'indicateur de lecture sous la forme d'une structure ou d'un tableau de structures facilement lisible.

 
Nikolai Semko #:

Vous formez une structure de données ou un tableau de structures dans un EA ou dans un indicateur et vous l'envoyez à une ressource.

Kanvas lui-même fonctionne avec une ressource graphique (OBJ_BITMAP_LABEL/ OBJ_BITMAP). Il ne reste donc plus qu'à communiquer le nom de la ressource à une autre application, qui pourra facilement accéder aux pixels. Il devra également transmettre le format des pixels. Et vous pouvez lire les pixels ou les modifier avec un autre CCanvas. Il dispose d'une méthode, CCanvas::Attach, pour l'attacher à une ressource existante.

Raison: