Comment coder ? - page 269

 

Variable DEMA incorrectement définie

Je ne parviens pas à définir correctement la section "Variables DEMA", ses syntaxes. Les codes DEMA1, DEMA2, DEMA3 sont corrects.

Veuillez m'aider à corriger la section des variables DEMA.

if (TradeOrAlert) {

if (DEMA1)>(DEMA2) {CLOSESHORT(Symbol()) ;}

if (DEMA1)<(DEMA2) {CLOSELONG(Symbol()) ;}

if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {BUY(Symbol(), B_Symbol_LS_0, B_Symbol_TP_0, B_Symbol_SL_0, B_Symbol_TS_0, "if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))";}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {SELL(Symbol(), S_Symbol_LS_0, S_Symbol_TP_0, S_Symbol_SL_0, S_Symbol_TS_0, "if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))";}

CheckTrailingStop(Symbol(), 0, MagicNumberLong, B_Symbol_TS_0) ;

CheckTrailingStop(Symbol(), 1, MagicNumberShort, S_Symbol_TS_0) ;

} else {

if (DEMA1)>(DEMA2) {MyAlert("if (DEMA1)>(DEMA2)", "CLOSESHORT(Symbol(),0.1,100,15,17)", Symbol());}

if (DEMA1)<(DEMA2) {MyAlert("if (DEMA1)<(DEMA2)", "CLOSELONG(Symbol(),0.1,100,15,17)", Symbol());}

if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {MyAlert("if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))", "BUY(Symbol(),0.1,100,15,17)", Symbol());}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {MyAlert("if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))", "SELL(Symbol(),0.1,100,15,17)", Symbol());}

}

g_bars_276 = Bars ;

retour (0) ;

}

//----DEMA VARIABLES----Non correctement défini, besoin d'aide-----

int init() {

double DEMA1 = (iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,4,0,MODE_EMA,iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0),0)) ;

return(DEMA1) ;

}

int start() {

double DEMA2 = (iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,6,0,MODE_EMA,iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0),0)) ;

return(DEMA2) ;

}

int start() {

double DEMA3 = (iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,12,0,MODE_EMA,iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0),0)) ;

return(DEMA3) ;

}

//

 

Variables DEMA mal définies

Je suis confronté au problème de la définition correcte des syntaxes dans la section "DEMA VARIABLES" du code ci-dessous.

Dites-moi également ce qu'il faut inclure après la section "#include" en ce qui concerne les variables Dema.

J'obtiens les erreurs suivantes

DEMA1 - variable non définie.

DEMA2 - variable non définie.

DEMA3 - variable non définie.

Veuillez m'aider.

if (TradeOrAlert) {

if (DEMA1)>(DEMA2) {CLOSESHORT(Symbol()) ;}

if (DEMA1)<(DEMA2) {CLOSELONG(Symbol()) ;}

if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {BUY(Symbol(), B_Symbol_LS_0, B_Symbol_TP_0, B_Symbol_SL_0, B_Symbol_TS_0, "if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))";}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {SELL(Symbol(), S_Symbol_LS_0, S_Symbol_TP_0, S_Symbol_SL_0, S_Symbol_TS_0, "if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))";}

CheckTrailingStop(Symbol(), 0, MagicNumberLong, B_Symbol_TS_0) ;

CheckTrailingStop(Symbol(), 1, MagicNumberShort, S_Symbol_TS_0) ;

} else {

if (DEMA1)>(DEMA2) {MyAlert("if (DEMA1)>(DEMA2)", "CLOSESHORT(Symbol(),0.1,100,15,17)", Symbol());}

if (DEMA1)<(DEMA2) {MyAlert("if (DEMA1)<(DEMA2)", "CLOSELONG(Symbol(),0.1,100,15,17)", Symbol());}

if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3)) {MyAlert("if ((DEMA1)>(DEMA2)) && ((DEMA2)>(DEMA3))", "BUY(Symbol(),0.1,100,15,17)", Symbol());}

if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3)) {MyAlert("if ((DEMA1)<(DEMA2)) && ((DEMA2)<(DEMA3))", "SELL(Symbol(),0.1,100,15,17)", Symbol());}

}

g_bars_276 = Bars ;

retour (0) ;

}

//----DEMA VARIABLES----Non correctement défini, besoin d'aide-----

int start() {

double DEMA1 = (iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,4,0,MODE_EMA,iMA(NULL,NULL,4,0,MODE_EMA,PRICE_CLOSE,0),0)) ;

return(DEMA1) ;

}

int start() {

double DEMA2 = (iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,6,0,MODE_EMA,iMA(NULL,NULL,6,0,MODE_EMA,PRICE_CLOSE,0),0)) ;

return(DEMA2) ;

}

int start() {

double DEMA3 = (iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0))*2 - (iMA(NULL,NULL,12,0,MODE_EMA,iMA(NULL,NULL,12,0,MODE_EMA,PRICE_CLOSE,0),0)) ;

return(DEMA3) ;

}

//

 

Alerte MA+Stoch...svp

pouvez-vous m'aider à construire l'indicateur : MA+stoch avec alerte

stoch(5,3,3);MA(8);MA(15);MA(30)....

alerte lorsque MA(8)>MA(15)>MA(30) et %K croise au-dessus de %D mais en dessous du niveau 50

alerte quand MA(8)<MA(15)<MA(30) et %D croise au-dessus de %K mais plus que le niveau 50

merci beaucoup

mon anglais est une langue étrangère

Avec toute ma sympathie !

 
lequoctrieu:
pouvez-vous m'aider à construire un indicateur : MA+stoch avec alerte

stoch(5,3,3);MA(8);MA(15);MA(30)....

alerte quand MA(8)>MA(15)>MA(30) et %K croise au-dessus de %D mais moins que le niveau 50

alerte quand MA(8)<MA(15)<MA(30) et %D croise au-dessus de %K mais plus que le niveau 50

merci beaucoup

mon anglais est une langue étrangère

sympathiquement !

Bonjour,

code snippet d'un de mes indis, vous devez l'adapter à vos besoins :

extern bool AlertON=false ;

extern bool EmailON=true ;

extern bool SoundON=false ;

extern bool VoiceON=false ;

extern bool SMSON=false ;

extern string ExtSoundFileName = "";//Fichiers sonores externes requis, à supprimer ensuite.

FastMA = fastMAnow ;

SlowMA = slowMAnow ;

if ((fastMAnow >= slowMAnow) && (fastMAprevious < slowMAprevious))

{

si (i == 1 && flagval1==0)

{

flagval1=1 ;

flagval2=0 ;

if (AlertON==true) Alert("Signal d'achat à Ask=",Ask,"\n Bid=",Bid,"\n Time=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime())," :",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period()) ;

if (EmailON==true) SendMail("2754 BUY-ALP EUR", "Signal BUY à Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+" :"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()) ;

if (SMSON==true) SendMail("2754 BUY-ALP EUR", "Signal d'achat à Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+" :"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()) ;

if (SoundON==true) PlaySound(ExtSoundFileName);//peep etc

if (VoiceON==true) PlaySound(ExtSoundFileName);//son propre wav vocal

}

CrossUp = Low - Range*0.5 ;

}

else if ((fastMAnow slowMAprevious))

{

si (i == 1 && flagval2==0)

{

flagval2=1 ;

flagval1=0 ;

if (AlertON==true) Alert("Signal de VENTE à Ask=",Ask,"\n Bid=",Bid,"\n Date=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime())," :",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period()) ;

if (EmailON==true) SendMail("2754 SELL-ALP EUR", "Signal de vente à Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+" :"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()) ;

if (SMSON==true) SendMail("2754 SELL-ALP EUR", "Signal de VENTE à Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+" :"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()) ;

if (SoundON==true) PlaySound(ExtSoundFileName);//peeps etc

if (VoiceON==true) PlaySound(ExtSoundFileName);//son propre wav vocal

}

CrossDown = High + Range*0.5 ;

}

}

return(0) ;

}

 

Alerte MA+Stoch...svp

ixbone:
Bonjour,

Extrait de code d'un de mes indis, vous devez l'adapter à vos besoins :

extern bool AlertON=false ;

extern bool EmailON=true ;

extern bool SoundON=false ;

extern bool VoiceON=false ;

extern bool SMSON=false ;

extern string ExtSoundFileName = "";//Fichiers sonores externes requis, à supprimer ensuite.

FastMA = fastMAnow ;

SlowMA = slowMAnow ;

if ((fastMAnow >= slowMAnow) && (fastMAprevious < slowMAprevious))

{

si (i == 1 && flagval1==0)

{

flagval1=1 ;

flagval2=0 ;

if (AlertON==true) Alert("Signal d'achat à Ask=",Ask,"\n Bid=",Bid,"\n Time=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime())," :",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period()) ;

if (EmailON==true) SendMail("2754 BUY-ALP EUR", "Signal BUY à Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+" :"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()) ;

if (SMSON==true) SendMail("2754 BUY-ALP EUR", "Signal d'achat à Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+" :"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()) ;

if (SoundON==true) PlaySound(ExtSoundFileName);//peep etc

if (VoiceON==true) PlaySound(ExtSoundFileName);//son propre wav vocal

}

CrossUp = Low - Range*0.5 ;

}

else if ((fastMAnow slowMAprevious))

{

si (i == 1 && flagval2==0)

{

flagval2=1 ;

flagval1=0 ;

if (AlertON==true) Alert("Signal de VENTE à Ask=",Ask,"\n Bid=",Bid,"\n Date=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime())," :",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period()) ;

if (EmailON==true) SendMail("2754 SELL-ALP EUR", "Signal de vente à Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+" :"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()) ;

if (SMSON==true) SendMail("2754 SELL-ALP EUR", "Signal de VENTE à Ask="+DoubleToStr(Ask,4)+", Bid="+DoubleToStr(Bid,4)+", Date="+TimeToStr(CurTime(),TIME_DATE)+" "+TimeHour(CurTime())+" :"+TimeMinute(CurTime())+" Symbol="+Symbol()+" Period="+Period()) ;

if (SoundON==true) PlaySound(ExtSoundFileName);//peeps etc

if (VoiceON==true) PlaySound(ExtSoundFileName);//son propre wav vocal

}

CrossDown = High + Range*0.5 ;

}

}

return(0) ;

}

Merci beaucoup...ixbone

J'écris très mal le code...Donc,je ne peux pas comprendre votre code....vous pouvez m'aider à construire l'indicateur(.mq4) afin de l'utiliser

si oui, je vous remercie beaucoup

je vous souhaite une bonne journée de travail !

 

Comment puis-je vérifier si le haut de la barre actuelle est supérieur de 2 pips au haut de la barre précédente ?

Désolé, ce n'est pas le bon endroit pour cette question.

Veuillez supprimer cet administrateur.

Merci !

 

Fermeture partielle d'une commande

Bonjour,

J'essaie de coder un EA qui prendra des bénéfices à deux niveaux. Pour ce faire, je veux diviser l'ordre original de sorte que "x" lots soient retirés au premier objectif de profit et que les lots restants soient retirés au deuxième objectif de profit. Pour ce faire, j'utilise deux fonctions OrderClose().

La première fonction OrderClose() fonctionne parfaitement mais elle semble également fermer l'ordre existant et générer un nouveau ticket pour les lots restants.

Quelqu'un pourrait-il me donner des conseils sur la façon de traiter ce "nouveau" ticket/ordre afin qu'il puisse être traité par la deuxième fonction CloseOrder() ?

Salutations

Jim

 
jimdee:
Bonjour,

J'essaie de coder un EA qui prendra des bénéfices à deux niveaux. Pour ce faire, je veux diviser l'ordre initial de sorte que "x" lots soient retirés au premier objectif de profit et que les lots restants soient retirés au deuxième objectif de profit. Pour ce faire, j'utilise deux fonctions OrderClose().

La première fonction OrderClose() fonctionne parfaitement mais elle semble également fermer l'ordre existant et générer un nouveau ticket pour les lots restants.

Quelqu'un pourrait-il me donner des conseils sur la façon de traiter ce "nouveau" ticket/ordre afin qu'il puisse être traité par la deuxième fonction CloseOrder() ?

Merci

Jim

Juste une idée. Vous pouvez essayer d'utiliser deux transactions au lieu d'une si la fermeture partielle pour le profit est plus difficile à réaliser. Et gérer ces transactions en fonction de leur temps d'ouverture.

 
jimdee:
Bonjour,

J'essaie de coder un EA qui prendra des bénéfices à deux niveaux. Pour ce faire, je veux diviser l'ordre initial de sorte que "x" lots soient retirés au premier objectif de profit et que les lots restants soient retirés au deuxième objectif de profit. Pour ce faire, j'utilise deux fonctions OrderClose().

La première fonction OrderClose() fonctionne parfaitement mais elle semble également fermer l'ordre existant et générer un nouveau ticket pour les lots restants.

Quelqu'un pourrait-il me donner des conseils sur la manière de traiter ce "nouveau" ticket/ordre afin qu'il puisse être traité par la deuxième fonction CloseOrder() ?

Salutations

Jim

Les gens ont des références différentes, j'aime utiliser la clôture partielle car il y a moins de transactions à gérer pour le courtier.

Chaque fois que la clôture partielle a lieu, le courtier agira comme si l'ordre restant était un nouvel ordre et assignera donc un nouveau ticket. Mais cela n'a pas vraiment d'importance, tant que votre prochaine étape, la méthode pour identifier les transactions n'est pas basée sur le ticket d'ordre, elle peut être basée sur les lots d'ordre, ou vous pouvez assigner une variable pour indiquer à l'EA dans quelle phase il se trouve.

La fermeture partielle est un peu difficile à gérer correctement si la situation suivante existe :

1. Vos ordres peuvent avoir une taille de lot différente à cause du MM.

2. Vous avez plusieurs ordres existants au même moment de taille de lot différente.

Si votre EA présente les situations ci-dessus et si vous n'êtes pas expérimenté en codage, je pense que vous pouvez utiliser l'approche des ordres multiples.

 

Une solution rapide pour un problème simple. Merci *vous : )

Je voudrais renvoyer les variables suivantes :

1. Le prix d'ouverture de la première barre du dernier lundi enregistré (barre horaire).

2. Le prix de clôture de la dernière barre du mercredi enregistré (barre des heures).

Quelqu'un sait-il comment faire ? J'ai essayé de récupérer les variables telles qu'elles sont passées avec :

//-------------------------------------------------------

if (currentday == 1 && currenttime == 0)

{

MondayOpenPrice = iOpen(Symbol(),PERIOD_H1,0) ;

}

//--------------------------------------------------------

Le problème avec ce qui précède est que je ne peux pas toujours laisser mon metatrader fonctionner toute la semaine pour conserver ces variables.

J'ai donc besoin que l'EA recherche dans l'historique le premier prix ouvert enregistré un lundi, etc...

Merci beaucoup pour votre temps.

Raison: