Aide au codage - page 73

 

Bonjour,

J'espère que quelqu'un pourra m'aider à faire faire à un indicateur ce que j'aimerais qu'il fasse.

J'ai un indicateur qui montre la longueur du corps / ou la longueur totale de la bougie, plus le temps de la barre de la bougie.

La seule chose est qu'il ne convient pas aux courtiers à 5 chiffres ; le temps et la longueur sont projetés l'un sur l'autre alors qu'ils sont parfaits en Digit 4.

Il serait très agréable que quelqu'un soit capable et désireux de modifier le code.

Merci d'avance,

Salutations,

Ben

 

Il manque quelque chose de simple

J'ai travaillé sur un filtre TL pour un EA de croisement de MA, n'importe quel EA de croisement de MA mais je l'ai étudié sur le fichier joint car il est simple.

En fait, le calculateur de TL donne les signaux 1, 2 ou 3 en fonction de la direction de la TL et du croisement des prix et un méchant "zéro divide" si la TL n'est pas assez inclinée.

J'apprends à coder et j'ai lu tous les PDF de Coders' Guru et autant que mon cerveau peut en supporter sur le forum MQL4, mais comme j'apprends lentement et que je n'ai jamais rien codé jusqu'à il y a 3 semaines.....

J'ai besoin de quelques conseils....

Problème : Je n'arrive pas à trouver comment appeler la valeur "TLfilter" qui est de 3 lorsque le prix n'a pas touché la TL et que c'est OK pour faire un achat.

J'ai essayé de l'intégrer dans les critères d'achat et de vente en tant que &&TTLfilter = 3 ! et toutes les autres méthodes que j'ai pu trouver, mais tout ce que j'obtiens, c'est qu'il n'y a pas de transactions du tout.

J'ai également essayé de le placer dans la boucle OrderSelect, mais sans succès.

Je cherche juste à savoir ce que j'ai manqué.

Si quelqu'un est intéressé à y jeter un coup d'œil.

Dessinez une TL sur le graphique avant de joindre l'EA et nommez-la t6.

Décommentez le //--- Print ("TLfilter = ",TLfilter) ; return(TLfilter) ; en bas de la section TL pour voir ce qu'il fait.

Les modifications apportées à cette EA sont marquées par une double ligne ======= 1 2 et 3.

Edit : Aucun de mes codes dans celui-ci, car je voulais m'assurer qu'il soit aussi propre que possible x_trader_v2_tlmod.mq4

Dossiers :
 

multiindicateur

Bonjour !

Quelqu'un utilise/possède un multiindicateur comme celui-ci ?

Multi Moving Average - MQL4 Code Base

Si vous voyez en bas, cela ressemble à l'indicateur "freedom bar"... donc... Je veux changer ces indicateurs d'entrée, je ne veux pas utiliser 4ema.... Je veux 1ema( 2 crossing ), CCI, STOCH et SAR

Je trouve quelques multiindicateurs, mais ils n'ont pas un historique comme celui-ci

Quelqu'un peut-il m'aider et modifier le code ?

 

Bonjour Pearl1,

D'après ce que je vois, c'est possible, il suffit d'entrer l'appel en remplaçant les 3 autres moyennes mobiles par les indicateurs que vous voulez utiliser avec les conditions de signal.

 

J'ai essayé quelque chose, mais pas de progrès

 

Pourquoi ne pas poster ce que vous avez codé jusqu'à présent et expliquer ce que vous essayez de faire. De cette façon, quelqu'un pourrait vous aider

pearl1:
J'ai essayé quelque chose, mais aucun progrès
 

int start()

{

//----

int Counted.Bars = IndicatorCounted(), i ;

if(Counted.Bars<0) return(-1) ;

if(Counted.Bars>0) Counted.Bars-- ;

int Limit = Bars - Counted.Bars ;

couleur Texte.Couleur.1, Texte.Couleur.2, Texte.Couleur.3, Texte.Couleur.4 ;

//----

for(i=Limite ; i>=0 ; i--)

{

MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i) ; Je suce ici.... il compare toujours avec ce MA0.Buffer.0.... donc, si j'utilise RSI, Stoch,... doit créer ce buffer pour tous les éléments ? RSI0.Buffer.0 pour RSI ?

//----

MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i) ;

MA1.Buffer.1 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i+1) ;

MA2.Buffer.0 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i) ;

MA2.Buffer.1 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i+1) ;

MA3.Buffer.0 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i) ;

MA3.Buffer.1 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i+1) ;

MA4.Buffer.0 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i) ;

MA4.Buffer.1 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i+1) ;

MA1.UP.Buffer = EMPTY_VALUE;

MA1.DN.Buffer = EMPTY_VALUE ;

if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Position + 1.0 ;

else MA1.UP.Buffer = Gap * P1.Position + 1.0 ;

if(MA1.Buffer.0 < MA0.Buffer.0) Text.Color.1 = Text.Color.Up ;

sinon Text.Color.1 = Text.Color.Down ;

//----

MA2.UP.Buffer = EMPTY_VALUE ;

MA2.DN.Buffer = EMPTY_VALUE ;

if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Position + 1.0 ;

else MA2.UP.Buffer = Gap * P2.Position + 1.0 ;

if(MA2.Buffer.0 < MA0.Buffer.0) Text.Color.2 = Text.Color.Up ;

sinon Text.Color.2 = Text.Color.Down ;

//----

MA3.UP.Buffer = EMPTY_VALUE ;

MA3.DN.Buffer = EMPTY_VALUE ;

if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Position + 1.0 ;

else MA3.UP.Buffer = Gap * P3.Position + 1.0 ;

if(MA3.Buffer.0 < MA0.Buffer.0) Text.Color.3 = Text.Color.Up ;

sinon Text.Color.3 = Text.Color.Down ;

//----

MA4.UP.Buffer = EMPTY_VALUE ;

MA4.DN.Buffer = EMPTY_VALUE ;

if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Position + 1.0 ;

else MA4.UP.Buffer = Gap * P4.Position + 1.0 ;

if(MA4.Buffer.0 < MA0.Buffer.0) Text.Color.4 = Text.Color.Up ;

sinon Texte.Couleur.4 = Texte.Couleur.Bas ;

//----

//----

LabelSet(Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4) ;

//----

}

//----

retour(0) ;

 

Vous n'avez pas besoin de créer un tampon pour tous les éléments.

MA1.Buffer.0, MA1.Buffer.1, .... ne sont pas des tampons mais de simples variables. Vous pouvez les utiliser pour n'importe quoi sans changer leur nom. Si vous voulez les utiliser, par exemple, pour le rsi, vous pouvez changer le code en quelque chose comme ceci :

MA1.Buffer.0 = iRSI(NULL, 0, RSI1.Period, RSI1.Price, i); MA1.Buffer.1 = iRSI(NULL, 0, RSI1.Period, RSI1.Price, i+1);

sans avoir besoin de changer les noms des variables et cela fonctionnera (définissez simplement RSI1.Period et RSI1.Price dans ce cas comme paramètres externes)

pearl1:
int start()

{

//----

int Counted.Bars = IndicatorCounted(), i ;

if(Counted.Bars<0) return(-1) ;

if(Counted.Bars>0) Counted.Bars-- ;

int Limit = Bars - Counted.Bars ;

couleur Texte.Couleur.1, Texte.Couleur.2, Texte.Couleur.3, Texte.Couleur.4 ;

//----

for(i=Limite ; i>=0 ; i--)

{

MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i) ; Je suce ici.... il compare toujours avec ce MA0.Buffer.0.... donc, si j'utilise RSI, Stoch,... doit créer ce buffer pour tous les éléments ? RSI0.Buffer.0 pour RSI ?

//----

MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i) ;

MA1.Buffer.1 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i+1) ;

MA2.Buffer.0 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i) ;

MA2.Buffer.1 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i+1) ;

MA3.Buffer.0 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i) ;

MA3.Buffer.1 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i+1) ;

MA4.Buffer.0 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i) ;

MA4.Buffer.1 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i+1) ;

MA1.UP.Buffer = EMPTY_VALUE ;

MA1.DN.Buffer = EMPTY_VALUE ;

if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Position + 1.0 ;

else MA1.UP.Buffer = Gap * P1.Position + 1.0 ;

if(MA1.Buffer.0 < MA0.Buffer.0) Text.Color.1 = Text.Color.Up ;

sinon Text.Color.1 = Text.Color.Down ;

//----

MA2.UP.Buffer = EMPTY_VALUE ;

MA2.DN.Buffer = EMPTY_VALUE ;

if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Position + 1.0 ;

else MA2.UP.Buffer = Gap * P2.Position + 1.0 ;

if(MA2.Buffer.0 < MA0.Buffer.0) Text.Color.2 = Text.Color.Up ;

sinon Text.Color.2 = Text.Color.Down ;

//----

MA3.UP.Buffer = EMPTY_VALUE ;

MA3.DN.Buffer = EMPTY_VALUE ;

if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Position + 1.0 ;

else MA3.UP.Buffer = Gap * P3.Position + 1.0 ;

if(MA3.Buffer.0 < MA0.Buffer.0) Text.Color.3 = Text.Color.Up ;

sinon Text.Color.3 = Text.Color.Down ;

//----

MA4.UP.Buffer = EMPTY_VALUE ;

MA4.DN.Buffer = EMPTY_VALUE ;

if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Position + 1.0 ;

else MA4.UP.Buffer = Gap * P4.Position + 1.0 ;

if(MA4.Buffer.0 < MA0.Buffer.0) Text.Color.4 = Text.Color.Up ;

sinon Texte.Couleur.4 = Texte.Couleur.Bas ;

//----

//----

LabelSet(Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4) ;

//----

}

//----

retour(0) ;
 
pearl1:
int start()

{

//----

int Counted.Bars = IndicatorCounted(), i ;

if(Counted.Bars<0) return(-1) ;

if(Counted.Bars>0) Counted.Bars-- ;

int Limit = Bars - Counted.Bars ;

couleur Texte.Couleur.1, Texte.Couleur.2, Texte.Couleur.3, Texte.Couleur.4 ;

//----

for(i=Limite ; i>=0 ; i--)

{

MA0.Buffer.0 = iMA(NULL, 0, 1, 0, MODE_SMA, PRICE_MEDIAN, i) ;

//----

MA1.Buffer.0 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i) ;

MA1.Buffer.1 = iMA(NULL, 0, MA1.Period, 0, MA1.Mode, MA1.Price, i+1) ;

MA2.Buffer.0 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i) ;

MA2.Buffer.1 = iMA(NULL, 0, MA2.Period, 0, MA2.Mode, MA2.Price, i+1) ;

MA3.Buffer.0 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i) ;

MA3.Buffer.1 = iMA(NULL, 0, MA3.Period, 0, MA3.Mode, MA3.Price, i+1) ;

MA4.Buffer.0 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i) ;

MA4.Buffer.1 = iMA(NULL, 0, MA4.Period, 0, MA4.Mode, MA4.Price, i+1) ;

MA1.UP.Buffer = EMPTY_VALUE ;

MA1.DN.Buffer = EMPTY_VALUE ;

if(MA1.Buffer.0 < MA1.Buffer.1) MA1.DN.Buffer = Gap * P1.Position + 1.0 ;

else MA1.UP.Buffer = Gap * P1.Position + 1.0 ;

if(MA1.Buffer.0 < MA0.Buffer.0) Text.Color.1 = Text.Color.Up ;

else Text.Color.1 = Text.Color.Down ;

//----

MA2.UP.Buffer = EMPTY_VALUE ;

MA2.DN.Buffer = EMPTY_VALUE ;

if(MA2.Buffer.0 < MA2.Buffer.1) MA2.DN.Buffer = Gap * P2.Position + 1.0 ;

else MA2.UP.Buffer = Gap * P2.Position + 1.0 ;

if(MA2.Buffer.0 < MA0.Buffer.0) Text.Color.2 = Text.Color.Up ;

sinon Text.Color.2 = Text.Color.Down ;

//----

MA3.UP.Buffer = EMPTY_VALUE ;

MA3.DN.Buffer = EMPTY_VALUE ;

if(MA3.Buffer.0 < MA3.Buffer.1) MA3.DN.Buffer = Gap * P3.Position + 1.0 ;

else MA3.UP.Buffer = Gap * P3.Position + 1.0 ;

if(MA3.Buffer.0 < MA0.Buffer.0) Text.Color.3 = Text.Color.Up ;

sinon Text.Color.3 = Text.Color.Down ;

//----

MA4.UP.Buffer = EMPTY_VALUE ;

MA4.DN.Buffer = EMPTY_VALUE ;

if(MA4.Buffer.0 < MA4.Buffer.1) MA4.DN.Buffer = Gap * P4.Position + 1.0 ;

else MA4.UP.Buffer = Gap * P4.Position + 1.0 ;

if(MA4.Buffer.0 < MA0.Buffer.0) Text.Color.4 = Text.Color.Up ;

sinon Texte.Couleur.4 = Texte.Couleur.Bas ;

//----

//----

LabelSet(Text.Color.1, Text.Color.2, Text.Color.3, Text.Color.4) ;

//----

}

//----

retour(0) ;

aha, merci, mais ce Buffer compare .... tout avec MA0.Buffer.0 ?

 

Remplacez simplement les appels IMA() par les appels que vous voulez (comme l'iRSI() de l'exemple que je vous ai donné) et ils devraient fonctionner, pas besoin de remplacer les noms de variables.

pearl1:
aha, merci, mais ce Buffer compare .... tout avec MA0.Buffer.0 ?