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

 

Cela produit une alerte lorsque le prix atteint une ligne supérieure ou inférieure.

Je veux permettre aux transactions de s'exécuter jusqu'à ce qu'elles se rapprochent de ces lignes. Lorsque le prix est trop proche, les transactions ne sont pas autorisées à s'ouvrir.

Comment puis-je faire en sorte que cette logique se produise sur la ou les fermetures de la barre actuelle alors que tout ce qui est ici est un tableau ?

for(int x=0; x<limit; x++) {

Xdown[x] = 0; Xup[x] = 0;

middle1[x] = iMA(NULL, 0, period, 0, MODE_EMA, PRICE_TYPICAL, x);// drawn line

middle2= iMA(NULL, 0, period, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

avg = findAvg(period, x);

upper[x] = middle2 + (3.5*avg);

lower[x] = middle2 - (3.5*avg);

if (MathAbs(upper[x] - High[x]) < 2*Point)

{

Xdown[x] = upper[x];

if (NewBar() && x == 0)

Alert(Symbol()," ",Period()," reach upper edge");

}

if (MathAbs(lower[x] - Low[x]) < 2*Point)

{

Xup[x] = lower[x];

if (NewBar() && x == 0)

Alert(Symbol()," ",Period()," reach lower edge");

}

}

return(0);

}
 

Je vois que vous faites des efforts, bien joué ! A ce stade, je pense que ce dont tu as le plus besoin est de savoir comment t'aider toi-même, donc je te conseille d'utiliser la fonction "NAvigator->Search" de MQL de manière _extensive_, tu trouveras des réponses à beaucoup de tes questions (la seule chose que l'on peut appeler depuis un indicateur sont les buffers, et cela se fait par iCustom() ; les objets ne sont pas des tableaux etc. et bien d'autres choses encore). Par exemple, une recherche de "array" vous apprendra que l'index du tableau de la barre actuelle est 0, l'index du tableau de la dernière barre est 1 et ainsi de suite.

Si les entrées de la fonction de recherche sont toutes écrasantes, vous essayez probablement de faire des choses trop difficiles pour vous à ce stade. Je crois que la plupart des exemples ci-dessus sont abordés dans le cours pour débutants de Codersguru, je vous recommande donc une deuxième lecture.

Vous pouvez également prendre un EA simple, et essayer de le simplifier/modifier légèrement, cela vous apprendra comment il fonctionne. Une fois que c'est fait, vous pouvez essayer de le complexifier.

Désolé si je suis à côté de la plaque.

Maintenant, en général, pour travailler sur le prix de clôture, vous testez pour l'ouverture d'une nouvelle barre et ensuite écrivez vos conditions sur l'index 1 des tableaux. Un code possible pour détecter l'ouverture d'une nouvelle barre :

bool NewBar()

{

static datetime dt = 0 ;

if (Time[0] != dt)

{

dt = Time[0] ;

return(true) ;

}

return(false) ;

}

J'espère que cela vous aidera, bonne chance.

 

Oui, vous êtes sur la bonne voie.

Je stopperais tout, et relèverais la programmation c++.

Malheureusement, l'orientation objet n'est pas très bonne pour mq4, donc vous devrez compenser avec les bases.

Continuez comme ça mon pote, vous y arriverez.

 
Aaragorn:
Il produit une alerte lorsque le prix atteint une ligne supérieure ou inférieure.

Je veux permettre aux transactions de s'exécuter jusqu'à ce qu'elles se rapprochent de ces lignes. Lorsque le prix est trop proche, les transactions ne sont pas autorisées à s'ouvrir.

Comment faire pour que cette logique se produise sur la ou les fermetures de la barre actuelle alors que tout ce qui est ici est un tableau ?

Vous pouvez prendre ceci comme exemple. Il est proche de ce que vous voulez obtenir. D'après ce que je peux voir, c'est le même indicateur que celui que vous utilisez.

 
pipeline:
Je vois que vous faites des efforts, bien joué ! A ce stade, je pense que ce dont vous avez le plus besoin est de savoir comment vous aider vous-même, donc je vous conseille d'utiliser la fonction "NAvigator->Search" de MQL _extensivement_, vous trouverez des réponses à beaucoup de vos questions (la seule chose que l'on peut appeler à partir d'un indicateur sont les buffers, et cela se fait par iCustom() ; les objets ne sont pas des tableaux etc. et beaucoup d'autres choses). Par exemple, une recherche sur "array" vous apprendra que l'index du tableau de la barre actuelle est 0, l'index du tableau de la dernière barre est 1 et ainsi de suite.

Si les entrées de la fonction de recherche sont toutes écrasantes, vous essayez probablement de faire des choses trop difficiles pour vous à ce stade. Je crois que la plupart des exemples ci-dessus sont abordés dans le cours pour débutants de Codersguru, je vous recommande donc une deuxième lecture.

Vous pouvez aussi prendre un EA simple, et essayer de le simplifier/modifier légèrement, cela vous apprendra comment il fonctionne. Une fois que c'est fait, vous pouvez essayer de le complexifier.

Désolé si je suis à côté de la plaque.

Maintenant, en général, pour travailler sur le prix de clôture, vous testez pour l'ouverture d'une nouvelle barre et ensuite écrivez vos conditions sur l'index 1 des tableaux. Un code possible pour détecter l'ouverture d'une nouvelle barre :

bool NewBar()

{

static datetime dt = 0 ;

if (Time[0] != dt)

{

dt = Time[0] ;

return(true) ;

}

return(false) ;

}

J'espère que cela vous aidera, bonne chance.

ok à propos de cette fonction de recherche... elle ne renvoie rien. J'ai essayé de l'utiliser plusieurs fois dans le métaéditeur. Je tape ce que je veux et j'appuie sur la touche retour et rien ne se passe, ou je clique sur la petite case à côté de la chaîne de recherche et rien ne se passe. Je remarquais juste que la recherche est nulle parce qu'elle ne fonctionne pas du tout. Je fais référence à la fonction de recherche dans la fenêtre de navigation du métaéditeur...existe-t-il un protocole pour la faire fonctionner que je ne connais pas ?

 
fx-programmer:
Oui, vous êtes sur la bonne voie.

Je stopperais tout, et relèverais la programmation c++.

Malheureusement, l'orientation objet n'est pas très bonne pour mq4, donc vous devrez compenser avec les bases.

Continuez comme ça, vous y arriverez.

Merci pour les encouragements. Le soutien moral compte. Voyez-vous quel est mon objectif théorique ici ? Pourriez-vous suggérer une meilleure méthode (les bases comme vous les appelez) pour atteindre cet objectif ?

 
pipeline:

Maintenant, en général, pour travailler sur le prix de clôture, vous testez l'ouverture d'une nouvelle barre et vous écrivez vos conditions sur l'index 1 des tableaux. Un code possible pour détecter l'ouverture d'une nouvelle barre :

bool NewBar()

{

static datetime dt = 0 ;

if (Time[0] != dt)

{

dt = Time[0] ;

return(true) ;

}

return(false) ;

}

J'espère que cela vous aidera, bonne chance.

en supposant qu'il renvoie true, comment récupérer la valeur de l'indicateur dans le tableau à la clôture actuelle, maintenant qu'il a été détecté qu'il y a une nouvelle barre ?

 
 
Aaragorn:

La nuit dernière, j'ai cherché sur Google et j'ai trouvé ceci...

http://www.gordago.com/?act=download

Quelqu'un a t-il une expérience avec ceci ? Est-ce réel ?

Gordago ne gère pas ou n'est pas encore capable de gérer les indicateurs personnalisés. C'est un inconvénient majeur.

La seule façon d'apprendre la programmation est de s'y atteler, comme vous le faites maintenant... en apprenant à partir d'exemples. Le matériel de Coders' Guru est excellent pour apprendre.

Bonne chance,

Maji

 
J'envisage aujourd'hui d'aller au diable avec les indicateurs et de voir si je peux créer quelque chose qui me permette de référencer le plus haut et le plus bas des barres précédentes (x).

Plus je regarde les indicateurs, plus cela me semble attrayant.....

ok je vois le high() dans les variables prédéfinies. comment l'utiliser pour obtenir le plus haut des 30 dernières heures par exemple ?

 

Écrire un indicateur est une chose, et écrire un EA en est une autre. Ne les mélangez pas. Dans les indicateurs, vous devez aussi traiter 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

Raison: