Problème avec l'indicateur ZigZag - page 3

 
FMIC:


Comme nous l'avons expliqué dans un précédent message, vous ne pouvez pas vous contenter d'utiliser les tampons haut et bas pour obtenir des points ZigZag, car ils comprennent également des points repeints (points cyan et roses sur le mien). Sur le ZigZag standard, c'est également le cas, mais vous ne les voyez pas. C'est pourquoi mon indicateur les montre pour que vous puissiez mieux le comprendre.

Vous devez comparer les tampons High et Low au premier qui contient les DEUX Low et Highs afin de filtrer UNIQUEMENT les points ZigZag.

NB ! 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 de zigzag bas, et si les tampons 1 et 2 ont la même valeur, il s'agit d'un point haut).

Si vous voulez, joignez votre fichier à un message, et je le corrigerai pour que vous puissiez voir comment l'utiliser correctement (joignez-le, n'utilisez pas de SRC pour ne pas faire un long message).


Bonjour FMIC,

Merci pour votre explication et votre aide. Je n'ai pas encore réussi à obtenir les valeurs hautes et basses. Le problème est qu'il se repeint (normalement) et je ne peux pas trouver le haut et le bas historique. J'utilise aussi le mode 0 et le mode 1 ou le mode 0 et le mode 2 dans l'indicateur zigzag original mais tous les résultats ont déjà les deux valeurs. Je veux dire qu'il n'y a pas de ligne unique avec zh (mode 1) ou zl (mode 2) avec des valeurs mais pas de zz (mode 0). Je n'ai donc pas réussi à utiliser cette méthode.

En outre, j'ai utilisé l'index de la fonction iCustom() mais sans succès. Cela semble très simple mais je travaille dessus depuis plus d'un jour sans trouver de solution.

Veuillez trouver mon code dans la pièce jointe (version 5). Toute aide est très appréciée.

Dossiers :
 

J'ai effectué d'autres tests et également un test visuel. J'ai même mis l'indice iCustom à 100 ticks en arrière afin d'éviter le repeint mais il le fait. Le problème est que lorsqu'on appelle l'indicateur zigzag, il regarde les données actuelles ; 100 ticks avant, 10 ticks avant ou 1000 ticks avant n'ont aucun impact sur lui. Il est donc préférable d'utiliser l'indice 1.

Si je comprends bien, je dois effectuer une autre boucle pour vérifier les tableaux et corriger les hauts et les bas en éliminant les données ; par exemple, s'il y a deux hauts consécutifs, il éliminera le plus bas et fera l'inverse pour les bas. Mon idée initiale est de revenir en arrière, disons 100 jours, dans le tableau et de vérifier s'il y a des sommets consécutifs. Je n'ai pas encore conclu à l'algorithme.

Avez-vous une meilleure idée ? Y compris l'utilisation d'une approche complètement différente pour identifier les hauts et les bas dans les données historiques ?

 
aed71:

J'ai effectué d'autres tests et également un test visuel. J'ai même mis l'indice iCustom à 100 ticks en arrière afin d'éviter le repeint mais il le fait. Le problème est que lorsqu'on appelle l'indicateur zigzag, il regarde les données actuelles ; 100 ticks avant, 10 ticks avant ou 1000 ticks avant n'ont aucun impact sur lui. Il est donc préférable d'utiliser l'indice 1.

Si je comprends bien, je dois effectuer une autre boucle pour vérifier les tableaux et corriger les hauts et les bas en éliminant les données ; par exemple, s'il y a deux hauts consécutifs, il éliminera le plus bas et fera l'inverse pour les bas. Mon idée initiale est de revenir en arrière, disons 100 jours, dans le tableau et de vérifier s'il y a des sommets consécutifs. Je n'ai pas encore conclu à l'algorithme.

Avez-vous une meilleure idée ? Y compris l'utilisation d'une approche complètement différente pour identifier les hauts et les bas dans les données historiques ?


Bonjour aed71,

Je viens de rentrer d'un travail et il est temps d'aller me coucher. Je regarderai votre code plus en détail dans la matinée et vous fournirai une solution correcte.

Cependant, comme une note rapide, vous n'avez pas besoin de regarder en arrière 1000 ou 100 barres, juste assez pour contempler la "profondeur" et les paramètres"backstep".

De plus, puisque vous ne faites que collecter et analyser les données, envisagez un script pour avancer instantanément sur l'ensemble des données de l'historique, au lieu d'un EA utilisant des intervalles de tick. De cette façon, vous n'aurez pas à vous soucier du repeuplement.

Demain, je vous fournirai une explication plus complète.

Meilleures salutations,
FMIC

 

Bonjour FMIC,

Depuis hier je travaille sur l'algorithme pour éliminer les faux hauts et bas et j'ai codé la version ci-jointe pour cela. Il élimine d'une certaine manière les faux signaux mais il supprime parfois le signal original alors qu'il ne devrait PAS le faire.

Le principe derrière ce code est le suivant :

S'il y a un haut, il retourne jusqu'au dernier bas connu et vérifie pas à pas si le haut actuel est plus haut que le précédent, alors il efface le haut précédent.

La même chose est valable pour la partie basse. J'ai mis quelques explications au code.

Au moins je n'ai plus de hauts ou de bas simultanés :-)

Maintenant je dois trouver le bug qui efface les points hauts et bas originaux.

Si vous pouvez jeter un coup d'oeil à mon code, vous pourrez peut-être comprendre le bug en peu de temps. Je suis trop concentré et je ne peux même pas voir les bugs les plus simples...

Merci encore pour votre aide.

Dossiers :
 

Bonjour "aed71",

Je n'ai pas encore regardé votre fichier le plus récent, mais voici mon script (pas un indicateur, pas une EA) pour examiner une certaine période de temps et sortir les ZigZag Highs et Lows dans un fichier CSV.

Il suffit d'attacher le script à un graphique pour qu'il s'exécute en quelques secondes. Il suffit ensuite de consulter le fichier CSV généré dans le dossier "MQL4\Files". J'ai inclus un exemple d'exécution sur le graphique quotidien EURUSD pour l'année 2013.

Puisqu'il s'agit d'un script, vous n'avez pas à vous soucier des repeints.

Meilleures salutations,
FMIC

PS ! Je vais examiner votre dernier fichier et vous donner mes commentaires.

EDIT : J'ai regardé votre dernier code et c'est un peu n'importe quoi. Jetez un coup d'oeil à mon code et vous verrez que les tests pour les hauts et les bas sont beaucoup plus simples. Pas besoin de toute cette confusion dans votre code. Voici un extrait (le code complet est dans le fichier ZIP) :

if( dblZigZagPoint > 0 )  // Test if a ZigZag Point is found
{
   intZZCount++;  // Increment ZigZag Counter

   // Test if it is a High, Low or Unknown
   string strZZType = strZZUnknown;
   if( dblZigZagHigh > 0 ) strZZType = strZZHigh;
   else if( dblZigZagLow > 0 ) strZZType = strZZLow;
               
   // Output the ZigZag Point Data to CSV File
   FileWrite( intCSVFileHandle, intZZCount, strZZType, DoubleToString( dblZigZagPoint, intDigits ), Time[ intBarShift ] );
}
Dossiers :
 
FMIC:

Bonjour "aed71",

Je n'ai pas encore regardé votre fichier le plus récent, mais voici mon script (pas un indicateur, pas une EA) pour examiner une certaine période de temps et sortir les ZigZag Highs et Lows dans un fichier CSV.

Il suffit d'attacher le script à un graphique pour qu'il s'exécute en quelques secondes. Il suffit ensuite de consulter le fichier CSV généré dans le dossier "MQL4\Files". J'ai inclus un exemple d'exécution sur le graphique quotidien EURUSD pour l'année 2013.

Puisqu'il s'agit d'un script, vous n'avez pas à vous soucier des repeints.

Meilleures salutations,
FMIC

PS ! Je vais revoir votre dernier fichier et vous donner mes commentaires.

EDIT : J'ai regardé votre dernier code et il est partout.
Jetez un coup d'oeil à mon code et vous verrez que le test des hauts et des bas est beaucoup plus simple.

Pas besoin de toute cette confusion dans votre code.


Excellent travail, a fonctionné sans problème, devrait être inclus dans le code base.... Merci.

J'ai deux questions, si vous le voulez bien :

1-) Mes données que j'ai téléchargées et que je vois dans le graphique montraient 4 chiffres mais la sortie du script était de 5 chiffres. Comment cela peut-il être possible ? Je veux dire 5 chiffres sans zéro à la fin.

Compte,Type,Prix,DateHeure

1,H,1.34962,2013.11.04 00:30:00

2,L,1.34861,2013.11.04 02:15:00

3,H,1.35015,2013.11.04 03:00:00

4,L,1.34417,2013.11.04 05:15:00

5,H,1.35127,2013.11.04 11:15:00

6,L,1.34910,2013.11.04 15:45:00

7,H,1.35236,2013.11.04 18:15:00

8,L,1.35045,2013.11.04 19:45:00

9,H,1.35203,2013.11.04 22:45:00

2-) Le script est très utile mais c'était la première partie de mon projet où j'analyse les données historiques. Ensuite, j'avais l'intention d'inclure le code à mon expert et en quelque sorte trouver la corrélation entre l'histoire récente et décider de l'optimisation des variables actuelles en conséquence. En d'autres termes, j'ai besoin d'exécuter quelque chose de similaire dans l'expert également. Alors comment serait-il possible de le convertir en expert ?

Merci encore pour votre aide :-)


 
aed71:


Excellent travail, a fonctionné sans problème, devrait être inclus dans le code base.... Merci.

J'ai deux questions, si vous le voulez bien :

1-) Mes données que j'ai téléchargées et que je vois dans le graphique montraient 4 chiffres mais la sortie du script était de 5 chiffres. Comment cela peut-il être possible ? Je veux dire 5 chiffres sans zéro à la fin.

2-) Le script est très utile mais c'était la première partie de mon projet où j'analyse les données historiques. Ensuite, j'avais l'intention d'inclure le code dans mon expert et de trouver la corrélation entre l'histoire récente et de décider de l'optimisation des variables actuelles en conséquence. En d'autres termes, j'ai besoin d'exécuter quelque chose de similaire dans l'expert également. Alors comment serait-il possible de le convertir en expert ?

Merci encore pour votre aide :-)

  1. Si vous avez un courtier à 5 chiffres, alors les données auront les 5 chiffres. Le problème de nombreux indicateurs est qu'ils n'utilisent pas la fonction "IndicatorDigits()" et finissent par afficher uniquement le nombre de chiffres par défaut, indépendamment de ce qui est fourni par le courtier. Si vous regardez mon code ZigZagZug, vous verrez que je l'ai explicitement défini, pour corriger le problème, ce que MetaQuotes n'a pas fait dans son propre code :

    // Set Number of Digits (Precision)
       IndicatorDigits( Digits );

  2. Quant à l'utilisation du code dans un expert, cela dépend vraiment de beaucoup de choses, comme la stratégie et la façon dont les repeints vont l'affecter. Certaines stratégies ne sont pas affectées par les repaints, d'autres y sont très sensibles. Je ne pourrai pas donner beaucoup de conseils pour une stratégie "inconnue". Dans ce cas, vous devrez être plus précis. Mais rappelez-vous que vous n'avez pas besoin de regarder 1000 barres en arrière. Si vous apprenez comment fonctionne ZigZag et comment il utilise les cassures hautes et basses et comment il recherche en arrière, parfois vous n'avez besoin de regarder en arrière que sur une distance de (Profondeur + Backstep) barres - selon la stratégie, cela pourrait être légèrement plus ou même moins, mais jamais les 1000 ou 100 que vous utilisez.

 

Merci pour les informations sur les chiffres. C'est un mal de tête pour moi, j'ai besoin de lire et de comprendre les détails...

Permettez-moi d'élaborer davantage ce que j'essaie d'atteindre. J'ai un expert assez rentable (actuellement) que j'ai testé au cours des 10 dernières années. Cependant, l'expert ne se comporte pas très bien dans chaque condition, pas très mauvais mais pas prometteur dans certaines années/mois. Il a certaines variables pré-optimisées qui ont un impact sur sa rentabilité. Je suis prêt à trouver une corrélation entre l'histoire récente et aujourd'hui afin d'auto-optimiser les variables.

J'ai donc besoin de trouver les pics et les creux dans les données historiques pour calculer les périodes et l'amplitude des données historiques. Je vais essayer de trouver manuellement une corrélation entre les données historiques récentes et les variables rentables actuelles de l'expert. Si je peux la trouver d'une manière ou d'une autre, j'ajouterai un code similaire à mon expert, chaque jour il vérifiera les données statistiques de la dernière semaine et en fonction des constantes corrélées il auto-optimisera les variables de l'expert.

Voilà donc la stratégie. J'ai travaillé sur de nombreux autres sujets pour analyser les données historiques, y compris Fourier, Hurts Cycles, Goertzel, MESA, etc, mais j'ai conclu que l'utilisation d'une méthode qui fonctionne sur les données existantes sera beaucoup mieux.

Je n'ai donc pas besoin d'une analyse high-low en temps réel, dans un ensemble de 15M de données, je suis prêt à perdre les données d'une demi-journée (presque 45 ticks). Très probablement, je regarderai les 5 derniers jours et 4,5 jours de changement sont, je pense, suffisants pour trouver les nouvelles valeurs optimisées.

En ce qui concerne mon code, je pense que le problème est le suivant : lorsqu'il vérifie les sommets précédents, il va trop loin en arrière, il devrait s'arrêter sur la valeur locale la plus basse. Je travaille encore dessus car j'ai besoin de la partie experte de l'outil.

 
aed71:

Merci pour les informations sur les chiffres. C'est un mal de tête pour moi, j'ai besoin de lire et de comprendre les détails...

Permettez-moi d'élaborer davantage ce que j'essaie d'atteindre. J'ai un expert assez rentable (actuellement) que j'ai testé au cours des 10 dernières années. Cependant, l'expert ne se comporte pas très bien dans chaque condition, pas très mauvais mais pas prometteur dans certaines années/mois. Il a certaines variables pré-optimisées qui ont un impact sur sa rentabilité. Je suis prêt à trouver une corrélation entre l'histoire récente et aujourd'hui afin d'auto-optimiser les variables.

J'ai donc besoin de trouver les pics et les creux dans les données historiques pour calculer les périodes et l'amplitude des données historiques. Je vais essayer de trouver manuellement une corrélation entre les données historiques récentes et les variables rentables actuelles de l'expert. Si je peux la trouver d'une manière ou d'une autre, j'ajouterai un code similaire à mon expert, chaque jour il vérifiera les données statistiques de la dernière semaine et en fonction des constantes corrélées il auto-optimisera les variables de l'expert.

Voilà donc la stratégie. J'ai travaillé sur de nombreux autres sujets pour analyser les données historiques, y compris Fourier, Hurts Cycles, Goertzel, MESA, etc, mais j'ai conclu que l'utilisation d'une méthode qui fonctionne sur les données existantes sera beaucoup mieux.

Je n'ai donc pas besoin d'une analyse high-low en temps réel, dans un ensemble de 15M de données, je suis prêt à perdre les données d'une demi-journée (presque 45 ticks). Très probablement, je regarderai les 5 derniers jours et 4,5 jours de changement sont, je pense, suffisants pour trouver les nouvelles valeurs optimisées.

En ce qui concerne mon code, je pense que le problème est le suivant : lorsqu'il vérifie les sommets précédents, il va trop loin en arrière, il devrait s'arrêter sur la valeur locale la plus basse. Je travaille encore dessus car j'ai besoin de la partie experte de l'outil.


Ce que vous avez décrit ne permet pas vraiment de comprendre la nature de l'EA afin de vous donner des conseils.

Si vous le souhaitez, envoyez-moi un message privé avec les détails et je pourrai jeter un bon coup d'œil à votre EA et vous suggérer le code nécessaire.

Sinon, tout ce que je peux vous suggérer, c'est d'essayer de l'implémenter du mieux que vous pouvez, et lorsque vous aurez un problème spécifique à résoudre, revenez sur le forum et posez une question spécifique à ce problème et voyez si les utilisateurs peuvent vous aider.

 

OK Merci FMIC.

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

Raison: