Problème avec l'indicateur ZigZag - page 4

 
aed71:

OK Merci FMIC.

En fait, mon problème concernait l'expert que j'ai partagé sur le forum. Votre script fonctionne bien et je vous en remercie, mais j'ai besoin d'un expert qui puisse travailler en temps réel.

Vos questions initiales sur ce fil de discussion étaient :

  1. Comment accéder correctement aux données de l'indicateur ZigZag via l'utilisation de la fonction "iCustom" ?
  2. Comment collecter et traiter les points hauts et bas de ZigZag pour une analyse statistique ?

Mon script vous a fourni un exemple de code et les connaissances nécessaires pour répondre à ces deux questions, de sorte que vous pouvez maintenant appliquer ces connaissances à d'autres utilisations telles qu'un EA que vous souhaitez développer. Tout ce que vous avez à faire est d'utiliser mon code pour l'utilisation de iCustom() et le test des points hauts et bas de ZigZag et de l'appliquer à votre code EA.

Cependant, l'autre question, que vous avez mentionnée plus tard, à savoir comment utiliser les données ZigZag dans un EA spécifique aux besoins d'optimisation d'une stratégie qui fonctionne déjà dans un autre EA, n'a pas été présentée ou décrite de manière suffisamment détaillée ici sur ce fil. Par conséquent, je ne suis pas en mesure de vous conseiller ou de vous aider car je ne sais pas ce dont vous avez besoin.

Si vous lisez l'article qui accompagne mon indicateur ZigZagZug dans la base de code, vous verrez que l'utilisation du ZigZag dans les stratégies et les EA n'est pas facile en raison de la peinture constante, et nécessite une compréhension approfondie de son fonctionnement et de la façon dont il peut éventuellement être utilisé dans différentes stratégies et EA.

En d'autres termes, le mariage entre les données ZigZag et une stratégie EA est complexe et doit être bien défini. Ainsi, sans rien savoir de votre stratégie actuelle ou de la manière dont elle doit être optimisée, je ne peux pas vous offrir plus d'aide ou de conseils.

Comme il est compréhensible que vous ne souhaitiez pas être plus ouvert en public, je vous ai même offert la possibilité de le faire en privé, et sans frais. Je suis un développeur de logiciels et je fais normalement payer ces services.

En dehors de ce que je vous ai déjà proposé, je ne peux rien faire de plus ni vous offrir d'autres conseils sans comprendre la nature du problème que vous voulez résoudre.

 

Salut,

J'ai réussi à corriger mon code. Il y avait une erreur dans la logique des boucles, maintenant il fonctionne bien d'après mes tests.

Ceux qui sont intéressés pourraient l'utiliser. Il est conçu pour être utilisé comme expert et il utilise l'indicateur ZigZag standard de metaquotes.

Ce qu'il fait, c'est trouver les vrais points hauts et bas dans l'indicateur zigzag. Il peut être utilisé pour trouver les points hauts et bas dans les données historiques ainsi que pour l'analyse de la période et de l'amplitude.

Il n'est pas en temps réel ! Il revient aux dernières valeurs hautes et basses, donc en fonction de la durée de la dernière tendance, il peut revenir en arrière et corriger les valeurs. Ne l'utilisez pas avant un test rapide dans le testeur de stratégie.

FMIC, merci pour vos efforts et votre aide.

Dossiers :
 

Bonjour aed71,

Il y a encore quelques erreurs de logique dans votre code.

  1. Votre soi-disant "tick loop", est en fait une "New Bar Condition", puisque vous testez le "Time[0]" pour un changement de temps afin de détecter une nouvelle barre. Je suggère de modifier le commentaire afin de ne pas déformer le code.
  2. Vous assignez des valeurs au tableau avant de tester les conditions et ensuite vous testez certaines variables plusieurs fois sans avoir besoin de les effacer à nouveau. Cela ne fera que ralentir votre code et rendra également difficile le suivi de la logique.
  3. Votre façon de trouver les points de repeinte est incorrecte et pas du tout robuste. Vous devriez vraiment étudier le fonctionnement du ZigZag afin de trouver les points de repeint correctement. Lisez son code, ou celui du ZigZagZug (celui qui est le plus facile à suivre pour vous) afin de comprendre sa logique.
  4. Vous stockez des valeurs nulles dans le tableau sans nécessité. Pourquoi continuer à incrémenter le compteur et à ajouter au tableau même s'il n'y a pas de point ZigZag disponible. Vous ne faites que gaspiller des ressources précieuses (RAM et cycles CPU) sans nécessité. Cela ralentira l'exécution de votre code. Il est préférable d'utiliser des tableaux à croissance dynamique plutôt que statique, car vous ne pouvez pas garantir une certaine taille à l'avance.
  5. Afin d'analyser les données par la suite, comme les périodes d'onde ou les fréquences, vous devrez également garder la trace de l'indice de temps et/ou de l'indice de décalage de barre.

Meilleures salutations,
FMIC

 
FMIC:

Bonjour aed71,

Il y a encore quelques erreurs de logique dans votre code.

  1. Votre soi-disant "tick loop", est en fait une "New Bar Condition", puisque vous testez le "Time[0]" pour un changement de temps afin de détecter une nouvelle barre. Je suggère de modifier le commentaire afin de ne pas déformer le code.
  2. Vous assignez des valeurs au tableau avant de tester les conditions et ensuite vous testez certaines variables plusieurs fois sans avoir besoin de les effacer à nouveau. Cela ne fera que ralentir votre code et rendra également difficile le suivi de la logique.
  3. Votre façon de trouver les points de repeinte est incorrecte et pas du tout robuste. Vous devriez vraiment étudier le fonctionnement du ZigZag afin de trouver les points de repeint correctement. Lisez son code, ou celui du ZigZagZug (celui qui est le plus facile à suivre pour vous) afin de comprendre sa logique.
  4. Vous stockez des valeurs nulles dans le tableau sans nécessité. Pourquoi continuer à incrémenter le compteur et à ajouter au tableau même s'il n'y a pas de point ZigZag disponible. Vous ne faites que gaspiller des ressources précieuses (RAM et cycles CPU) sans nécessité. Cela ralentira l'exécution de votre code. Il est préférable d'utiliser des tableaux à croissance dynamique plutôt que statique, car vous ne pouvez pas garantir une certaine taille à l'avance.
  5. Afin d'analyser les données par la suite, comme les périodes d'onde ou les fréquences, vous devrez également garder la trace de l'indice de temps et/ou de l'indice de décalage de barre.

Meilleures salutations,
FMIC

Merci encore pour vos commentaires ;

Je ne suis pas un bon programmeur donc le code lui-même peut ne pas être parfait :-) Cependant, laissez-moi essayer d'expliquer ma logique ;

1-) La partie commentaire pourrait être changée en "chaque nouvelle barre"...

2-) 4-) 5-) La logique de l'utilisation de grands tableaux est qu'après un nouveau processus, je vais compter les barres de valeur nulle entre les hauts ou entre les hauts et les bas afin de trouver la période, l'amplitude, etc. Je dois donc initialiser le tableau avant de l'utiliser et je n'ai pas besoin de m'occuper de l'indice de temps, etc. Juste un tampon supplémentaire qui n'est pas un gros problème pour mon projet actuel.

3-) J'ai tracé le zigzag et le zigzagzug plusieurs fois. Dans le zigzag, bien que vous ayez de vrais hauts et bas à la fin, si vous mettez ces valeurs dans un tableau, vous verrez qu'il y a des hauts et des bas entre les deux. Vous ne pouvez pas les éviter, que vous utilisiez le mode 0 ou la combinaison mode 1/mode 2. Il y a toujours des creux et des bosses entre les deux. Dans le zigzagzug, vous pouvez clairement voir ces points. En plus de cela, je vois qu'il y a des cas où le mode0 est égal à zéro mais où le mode1 ou le mode2 est supérieur à zéro, ce qui est incorrect. J'ai donc décidé de mettre un code supplémentaire pour éviter ces points.

Comme je l'ai mentionné, ce n'est peut-être pas le meilleur code pour trouver des points en zigzag, mais le code lui-même fonctionne correctement dans mes tests. J'ai testé plusieurs fois. Je recommande toujours à ceux qui veulent l'utiliser de le tester avant.

L'avez-vous testé ? Ne donne-t-il pas les bons points ? Lorsque vous dites qu'il n'est pas robuste ou qu'il est incorrect, je suppose que vos tests ont échoué, n'est-ce pas ?

Merci.

 
aed71:

Merci encore pour vos commentaires ;

Je ne suis pas un bon programmeur donc le code lui-même peut ne pas être parfait :-) Cependant, laissez-moi essayer d'expliquer ma logique ;

1-) La partie commentaire pourrait être changée en "chaque nouvelle barre"...

2-) 4-) 5-) La logique de l'utilisation de grands tableaux est qu'après un nouveau processus, je vais compter les barres de valeur nulle entre les hauts ou entre les hauts et les bas afin de trouver la période, l'amplitude, etc. Je dois donc initialiser le tableau avant de l'utiliser et je n'ai pas besoin de m'occuper de l'indice de temps, etc. Juste un tampon supplémentaire qui n'est pas un gros problème pour mon projet actuel.

3-) J'ai tracé le zigzag et le zigzagzug plusieurs fois. Dans le zigzag, bien que vous ayez de vrais hauts et bas à la fin, si vous mettez ces valeurs dans un tableau, vous verrez qu'il y a des hauts et des bas entre les deux. Vous ne pouvez pas les éviter, que vous utilisiez le mode 0 ou la combinaison mode 1/mode 2. Il y a toujours des creux et des bosses entre les deux. Dans le zigzagzug, vous pouvez clairement voir ces points. En plus de cela, je vois qu'il y a des cas où le mode0 est égal à zéro mais où le mode1 ou le mode2 est supérieur à zéro, ce qui est incorrect. J'ai donc décidé de mettre un code supplémentaire pour éviter ces points.

Comme je l'ai mentionné, ce n'est peut-être pas le meilleur code pour trouver des points en zigzag, mais le code lui-même fonctionne correctement dans mes tests. J'ai testé plusieurs fois. Je recommande toujours à ceux qui veulent l'utiliser de le tester avant.

L'avez-vous testé ? Ne donne-t-il pas les bons points ? Lorsque vous dites qu'il n'est pas robuste ou qu'il est incorrect, je suppose que vos tests ont échoué, n'est-ce pas ?

Merci.


Vous passez à côté du problème ! Le code que je vous ai fourni vous montre comment identifier correctement les points de zigzag haut/bas ; pourtant, vous choisissez de l'ignorer et de le faire à votre façon, ce qui rend le code plus difficile à comprendre et plus lent, tout en utilisant plus de ressources que nécessaire. Pourquoi ?
 
Fernando Carreiro #:

Vous utilisez le ZigZag de manière incorrecte dans votre exemple iCustom. Le ZigZag standard de MetQuotes a TROIS (et non deux) tampons (Modes ou Line Index dans iCustom).

  1. Mode = 0 : Maintient les points de zigzag haut et bas.
  2. Mode = 1 : Points hauts mais pas nécessairement seulement les points ZigZag (car il contient aussi les points de repeint).
  3. Mode = 2 : Points bas mais pas nécessairement seulement des points ZigZag (car il contient aussi des points de repeint).

Vous devrez comparer le premier tampon (Mode 0) avec les deux autres tampons afin de décider s'il s'agit d'un point haut ou d'un point bas (par exemple, si les tampons 1 et 3 ont la même valeur, il s'agit d'un point bas de ZigZag, et si les tampons 1 et 2 ont la même valeur, il s'agit d'un point haut).

De plus, afin de mieux comprendre le fonctionnement d'un ZigZag et la façon dont il se repeint, je vous suggère de jouer avec mon indicateur ZigZagZug. Cependant, dans votre code, utilisez le ZigZag de MetaQuotes, car il est plus rapide. Ma version fait plus de traitement à cause des fonctions supplémentaires et est donc plus lente.

PS ! Si le tampon 1 (Mode = 0) a une valeur de 0.0, mais que les autres tampons ont des valeurs non nulles, alors il s'agit d'anciens points de repeint et NON de points ZigZag.

Dans votre code, vous utilisez le tampon Mode 0 comme valeur basse et le tampon Mode 1 comme valeur haute. C'est totalement incorrect.

vous ne croirez pas à quel point cela m'a aidé merci beaucoup