icustom ZigZag

 
J'essaie de déterminer la direction de l'indicateur zigzag avec la commande icustom.

Voici ce que j'ai obtenu jusqu'à présent :

ZigZagHigh=iCustom(NULL,0, "ZigZag",MODE_HIGH,0) ;
ZigZagLow=iCustom(NULL,0, "ZigZag",MODE_LOW,0) ;

Les lignes sont tracées sur le graphique, mais ZigZagHigh et ZigZagLow sont toutes deux égales à zéro lorsque je lance le programme.




Comment puis-je déterminer la tendance de l'indicateur ZigZag avec la fonction icustom ?


Merci
 
quoi que vous essayiez de faire, ce n'est probablement pas la façon de le faire.
Regardez dans 'Indicateurs personnalisés, experts et tests de stratégie' -- j'ai expliqué la façon d'utiliser iCustom...

Je pense que vous devriez changer l'indicateur et faire deux buffers supplémentaires pour obtenir ces données.
la valeur basse est par exemple LOWbuff[]
la valeur haute est HIGHbuff[]

maintenant si vous avez un nouveau haut (dans l'indicateur) alors vous vérifiez si cette valeur est différente de la valeur stockée en ce moment... si c'est le cas, vous avez une nouvelle valeur...
1.2815 ZigZag max par exemple
barre 1
barre2
bar3
...
la nouvelle valeur de barx est de 1.2755

votre sera quelque chose comme HIGHBUFF[1.2815,1.2815,....,1.2815,1.2755,1.2755... . ]

puis vous utilisez Icustom(NULL,0, "ZigZag",3,0) ; --> et voilà ! vous avez votre nombre

J'espère que vous comprenez ce que je veux dire...

zolero
 
zolero:
quoi que vous essayiez de faire, ce n'est probablement pas la façon de le faire.
Regardez dans 'Indicateurs personnalisés, experts et tests de stratégie' -- j'ai expliqué la façon d'utiliser iCustom...

Je pense que vous devriez changer l'indicateur et faire deux buffers supplémentaires pour obtenir ces données.
la valeur basse est par exemple LOWbuff[]
la valeur haute est HIGHbuff[]

maintenant si vous avez un nouveau haut (dans l'indicateur) alors vous vérifiez si cette valeur est différente de la valeur stockée en ce moment... si c'est le cas, vous avez une nouvelle valeur...
1.2815 ZigZag max par exemple
barre 1
barre2
bar3
...
la nouvelle valeur de barx est de 1.2755

votre sera quelque chose comme HIGHBUFF[1.2815,1.2815,....,1.2815,1.2755,1.2755... . ]

puis vous utilisez Icustom(NULL,0, "ZigZag",3,0) ; --> et voilà ! vous avez votre nombre

J'espère que vous comprenez ce que je veux dire...

zolero


Non, en fait je ne comprends pas,


Tout ce que je veux c'est que mon EA sache dans quelle direction l'indicateur zigzag pointe (HAUT OU BAS). COMMENT DOIS-JE M'Y PRENDRE ?
 
Tout ce que je veux, c'est que mon EA sache dans quelle direction l'indicateur zigzag pointe (HAUT OU BAS). COMMENT DOIS-JE M'Y PRENDRE ?
Vous voulez probablement connaître les deux dernières valeurs (car le zigzag n'a pas toujours une valeur). Vous devez donc lire les deux dernières valeurs d'un indicateur :

  int n, i;
  double zag, zig;
i=0;
while(n<2)
{
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, i);
   if(zig>0) n+=1;
   i++;
}
maintenant vous avez deux nombres : zig -- dernière valeur et zag -- valeur précédente
si (zag>zig) l'indicateur descend
si (zig>zag) l'indicateur monte

zolero
 
zolero:
Tout ce que je veux, c'est que mon EA sache dans quelle direction l'indicateur zigzag pointe (vers le haut ou vers le bas). comment puis-je faire cela ?
Vous voulez probablement connaître les deux dernières valeurs (car le zigzag n'a pas toujours une valeur). Vous devez donc lire les deux dernières valeurs d'un indicateur :

  int n, i;
  double zag, zig;
i=0;
while(n<2)
{
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, i);
   if(zig>0) n+=1;
   i++;
}
maintenant vous avez deux nombres zig -- dernière valeur et zag -- valeur précédente
si(zag>zig) l'indicateur affiche une baisse
si (zig>zag) l'indicateur augmente

zolero

MERCI, c'est fait, ça marche comme sur des roulettes.
 
c0d3:
zolero:
Tout ce que je veux, c'est que mon EA sache dans quelle direction l'indicateur zigzag pointe (vers le haut ou vers le bas). comment puis-je faire cela ?
Vous voulez probablement connaître les deux dernières valeurs (car le zigzag n'a pas toujours une valeur), vous devez donc lire les deux dernières valeurs d'un indicateur :

  int n, i;
  double zag, zig;
i=0;
while(n<2)
{
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, i);
   if(zig>0) n+=1;
   i++;
}
maintenant vous avez deux nombres zig -- dernière valeur et zag -- valeur précédente
si(zag>zig) l'indicateur affiche une baisse
si (zig>zag) l'indicateur augmente

zolero

MERCI, je l'ai eu, ça marche comme sur des roulettes.





APRÈS L'AVOIR TESTÉ,



si(zag<zig) l'indicateur montre une baisse
si(zig<zag) l'indicateur monte


Je pense que c'est correct, il donnait une direction opposée avec (zag>zig), (zig>zag).

 
c0d3:
je pense que c'est correct, il donnait des directions opposées avec (zag>zig), (zig>zag).

Je regardais déjà la dernière ligne sur le graphique. Cela signifie que la dernière ligne regardait vers le bas [ou vers le haut]. Cela devrait signifier que l'on s'attend à un mouvement à la hausse [ou à la baisse]. mais il y a un petit problème à le prendre comme un signal de hausse ou de baisse : le zigzag peut se redessiner [et le fait souvent]. cela signifie que si la ligne entre deux points est orientée vers le sud (de 1,2900 à 1,2850), cela ne signifie pas que le prix va monter. Il va probablement monter, mais il y a une grande chance qu'après un mouvement vers le bas, vous ayez une nouvelle ligne vers le bas (de 1,2900 à 1,2820) et ainsi de suite. Ce que je veux dire, c'est qu'avoir une ligne sur le graphique ne signifie pas que le mouvement dans cette direction est terminé.
 
  
int n, i ; double zag, zig ;
i=0 ;
while(n<2)
{
if(zig>0) zag=zig ;
zig=iCustom(NULL, 0, "ZigZag", 0, i) ;
si(zig>0) n+=1 ;
i++ ;
}
 

&nbint n, i ; double zag, zig ; i=0 ; while(n<2) { if(zig>0) zag=zig ; zig=iCustom(NULL, 0, "ZigZag", 0, i) ; if(zig>0) n+=1 ; i++ ; }sp;int n, i ; double zag, zig ; i=0 ; while(n<2) { if(zig>0) zag=zig ; zig=iCustom(NULL, 0, "ZigZag", 0, i) ; if(zig>0) n+=1 ; i++ ; }

 
J'ai modifié un peu le code du zigzag pour montrer ce que j'entends par faux signal. Comme on dit : une image en dit plus que 1000 mots....


La ligne rouge est le zigzag original et il va du bas vers le haut et vice-versa dans les meilleurs moments... du moins c'est ce qui semble. Mais si vous codez un ea, alors l'ea reçoit des signaux qui sont proches de la ligne jaune. cela peut être encore pire, car j'ai fait un hack très rapide...
le code redessine une ligne vers le haut ou vers le bas jusqu'à ce que la ligne suivante soit dessinée et ainsi, pas à pas, on change la ligne jaune (en supprimant les valeurs max et min) jusqu'à obtenir une ligne rouge...