Aide au codage... Comment faire pour que l'indicateur filtre au lieu de l'alerte ? - page 2

 
Aaragorn:
Est-ce que je peux faire ça ? juste écrire des bufferindex dans l'indicateur et utiliser les mots supérieurs et inférieurs comme ça et lui faire retourner les valeurs des lignes supérieures et inférieures ?

Pas dans l'indicateur. Dans l'EA. (Vous pouvez le faire avec un indicateur, mais pas utiliser le même indicateur dans son propre code !!!!!).

 
elihayun:
Pas dans l'indicateur. Dans l'EA. (On peut le faire avec un indicateur, mais pas utiliser le même indicateur dans son propre code !!!!!)

donc je peux écrire un index de tampon dans l'EA mais comment obtient-il la valeur de l'indicateur ? Je ne voulais pas dire utiliser l'indicateur à l'intérieur de son propre code, ce serait un peu stupide. Pardonnez mon erreur de communication. Il n'est pas facile de communiquer parfois de manière assez spécifique ce qui pose problème. C'est le problème avec le codage ET avec le fait de parler du codage aux autres.

 

Permettez-moi de m'excuser auprès de ceux qui essaient de m'aider mais qui trouvent que mes messages sont une surcharge d'informations. J'ai posté beaucoup de code essentiellement parce que je peux alors ouvrir deux fenêtres l'une à côté de l'autre, l'une étant ce fil de discussion et l'autre étant le métaéditeur et regarder une partie du code dans une fenêtre et une autre partie dans l'autre fenêtre et je le fais pour m'aider à réfléchir au problème que je regarde. Je suis assez visuel de cette façon et cela m'aide à réfléchir à ce que je fais et à ce que je veux faire. Je n'ai pas l'intention de submerger les gens avec beaucoup de code et de les obliger à le parcourir entièrement. Parfois, j'ai essayé d'isoler des extraits après avoir posté l'EA ou l'indicateur dans son intégralité, afin d'essayer de trouver où et ce qui doit être fait. J'apprécie tous ceux qui prennent le temps de regarder ce que je fais et d'offrir des commentaires constructifs. Si le volume de ce que je poste est trop important, il suffit de filtrer pour trouver ce que j'essaie de faire et ne pas se laisser submerger par le reste qui n'est là que pour donner un contexte à ce que je fais.

 
Aaragorn:
Je peux donc écrire un index de tampon dans l'EA mais comment obtient-il la valeur de l'indicateur ? Je ne voulais pas dire utiliser l'indicateur à l'intérieur de son propre code, ce serait un peu stupide. Pardonnez mon erreur de communication. Il n'est pas facile de communiquer parfois de manière assez spécifique ce qui pose problème. C'est le problème avec le codage ET avec le fait de parler du codage aux autres.

Ne vous souciez pas du COMMENT. Laissez Metatrader le faire pour vous. Vous devez juste utiliser le code pour obtenir les informations que vous souhaitez.

Conseil : Lorsque vous exécutez l'EA, vous verrez : "Trend Bands loaded succesfully", ce qui signifie qu'il fait ce que vous voulez.

 
elihayun:
Ne vous préoccupez pas du COMMENT. Laissez Metatrader le faire pour vous. Vous devez juste utiliser le code pour obtenir l'information que vous souhaitez. Conseil : Lorsque vous exécutez l'EA, vous verrez : "Trend Bands loaded succesfully", ce qui signifie qu'il fait ce que vous voulez.

J'aime l'idée d'utiliser le code pour obtenir les informations que je souhaite, c'est ce que j'essaie d'apprendre. COMMENT utiliser le code pour obtenir les informations que je souhaite.

Donc vous pensez que la meilleure façon d'obtenir la valeur du tick pour les bandes de tendance est d'utiliser la fonction iCustome() ? et de NE PAS écrire le code dans l'EA comme je l'ai déjà fait ?

Pour des raisons pédagogiques, puisque j'ai déjà écrit le code dans l'EA, y a-t-il un moyen d'obtenir les valeurs à partir de là ?

 
elihayun:
Ecrire un indicateur est une chose, et écrire un EA en est une autre. Ne les mélangez pas. Dans les indicateurs, vous devez aussi gérer l'historique pour le dessiner correctement. Quand vous écrivez un EA, vous n'avez que le tick actuel et vous devez calculer les valeurs à chaque tick (si vous ne voulez pas perdre un trade). Donc, pour obtenir les valeurs du bord supérieur et inférieur du tick COURANT vous pouvez faire 2 choses
  1. Utiliser l'indicateur original comme indicateur client
  2. écrire la logique de l'indicateur dans votre EA

La première option n'est pas difficile. Vous devez d'abord trouver quel est l'indice tampon utilisé pour la ligne supérieure et la ligne inférieure.

Pour le trouver, vous devez regarder dans le code de l'indicateur.

attendez une minute, il y a des tampons ! comment ai-je pu les manquer ?

//+------------------------------------------------------------------+

//| Trend Bands.mq4 |

//| Dwt5 and adoleh2000 |

//| Copyright © 2005, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2005, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

#property indicator_chart_window

#property indicator_buffers 5

#property indicator_color1 Red

#property indicator_color2 Black

#property indicator_color3 Blue

#property indicator_color4 Red

#property indicator_color5 Blue

double upper[], middle1[], middle2, lower[];

double Xup[], Xdown[];

extern int period = 34;

int init()

{

SetIndexStyle(0,DRAW_LINE,EMPTY,2);

SetIndexShift(0,0);

SetIndexDrawBegin(0,0);

SetIndexBuffer(0,upper);

SetIndexStyle(1,DRAW_LINE,EMPTY,2);

SetIndexShift(1,0);

SetIndexDrawBegin(1,0);

SetIndexBuffer(1,middle1);

SetIndexStyle(2,DRAW_LINE,EMPTY,2);

SetIndexShift(2,0);

SetIndexDrawBegin(2,0);

SetIndexBuffer(2,lower);

SetIndexStyle(3,DRAW_ARROW,EMPTY,2);

SetIndexArrow(3, 162);

SetIndexShift(3,0);

SetIndexDrawBegin(3,0);

SetIndexBuffer(3,Xdown);

SetIndexStyle(4,DRAW_ARROW,EMPTY,2);

SetIndexArrow(4, 162);

SetIndexShift(4,0);

SetIndexDrawBegin(4,0);

SetIndexBuffer(4,Xup);

//---- indicators

//----

return(0);

}

donc.... je vois 5 tampons... un supérieur, un moyen, un inférieur et un haut et un bas ...

Je suppose que l'information que je veux provient des tampons supérieur et inférieur...

 
 
Aaragorn:
Je voulais que ce soit un nouveau message et non une modification d'un précédent, le fonctionnement du site me perturbe encore parfois...

Je pense que la meilleure façon de le faire est de ne PAS utiliser l'indicateur. C'est simplement le moyen le plus simple. Pour commencer, c'est suffisant.

Vous regardez les changements que j'ai fait à l'indicateur. Si vous voulez utiliser celui-ci, assurez-vous que vous écrivez le bon nom dans votre code.

Tant que vous savez dans quel tampon se trouve l'information que vous voulez, le nombre d'indicateurs dans le code n'a pas d'importance.

 
elihayun:
Ecrire un indicateur est une chose, et écrire un EA en est une autre. Ne les mélangez pas. Dans les indicateurs, vous devez aussi gérer l'historique pour le dessiner correctement. Lorsque vous écrivez un EA, vous n'avez que le tick actuel et vous devez calculer les valeurs à chaque tick (si vous ne voulez pas perdre un trade). Donc, pour obtenir les valeurs du bord supérieur et inférieur du tick COURANT vous pouvez faire 2 choses
  1. Utiliser l'indicateur original comme indicateur client
  2. écrire la logique de l'indicateur dans votre EA

La première option n'est pas difficile. Vous devez d'abord trouver quel est l'indice tampon utilisé pour la ligne supérieure et la ligne inférieure.

Pour le trouver vous devez regarder dans le code de l'indicateur

SetIndexBuffer(0,upper) ;

SetIndexBuffer(1,middle1) ;

SetIndexBuffer(2,lower) ;

comme vous pouvez le voir, la ligne supérieure est l'indice 0, le milieu est l'indice 1 et le bas est l'indice 2.

Maintenant que nous avons cette information, nous devons savoir combien de paramètres a l'indicateur. Pour obtenir cette information, vous devez rechercher les lignes qui commencent par le mot " externe".

Je n'ai trouvé qu'une seule ligne

extern int period = 34 ;

Maintenant, nous pouvons utiliser l'indicateur comme un indicateur client.

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0) ;

double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0) ;

34 est le paramètre de l'indicateur

le 0 est l'indice de la barre (2 pour le bas)

le dernier 0 est le décalage de la barre (dans EA nous avons besoin du courant, donc nous utilisons 0)

Maintenant que vous avez les valeurs supérieures et inférieures, vous pouvez les comparer au prix.

J'espère que cela vous fera progresser

Eli

hey donc ceci va fonctionner pour tirer la valeur actuelle des lignes supérieure et inférieure dans l'EA...

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0) ;

double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0) ;

Je pense que je commence à comprendre cela grâce au tutorat...

donc je n'ai pas besoin d'écrire le code de l'indicateur à l'intérieur de l'EA, il suffit de l'appeler comme ceci à partir de l'EA.... et il retournera les valeurs des barres actuelles des lignes que je peux ensuite utiliser... c'est parfait ! ....see Je savais que quelqu'un savait comment faire cela ! (ce n'était juste pas moi) ...

donc si je veux être capable de changer le nombre de périodes que j'utilise pour l'indicateur, je ferais ceci...

extern double back = 300 //--que je peux modifier à ma guise

double upLevel = iCustome(NULL,0, "Trend Bands", back, 0, 0) ;

double LowLevel = iCustome(NULL,0, "Trend Bands", back, 2, 0) ;

En supposant que je veuille appeler la valeur de l'indicateur à partir d'une période plus longue que celle que j'utilise sur le graphique, comment dois-je procéder ?

extern double back = 300 //--que je peux modifier comme je le souhaite

extern double TF = 30 //--que je peux modifier à ma guise

double upLevel = iCustome(NULL,TF, "Trend Bands", back, 0, 0) ;

double LowLevel = iCustome(NULL,TF, "Trend Bands", back, 2, 0) ;

où NULL utilise le symbole actuel,

TF utilise la période de la barre du graphique que je spécifie

Trend Bands appelle l'indicateur

back est le nombre de barres défini par l'utilisateur à utiliser pour la moyenne de l'indicateur

0 ou 2 lui indique à quel tampon il doit accéder

et le dernier 0 lui indique d'utiliser la barre actuelle.

Est-ce que cela fonctionnerait ?

 
Aaragorn:
Est-ce que ça marcherait ?

Super ! !! Vous avez compris l'idée !!!!

Cela fonctionnera parfaitement. Et si vous voulez vérifier que 5M et 15M atteignent le bord en même temps, vous pouvez obtenir les valeurs de chaque TF et les tester ensemble.

Mais laissez cela pour plus tard....

Raison: