Aide au codage - page 469

 

Bonjour Trader.

Quelqu'un peut-il m'aider et savoir quels sont les indicateurs présents dans ces deux fichiers .ex4 ?

Meilleures salutations, oink !

Dossiers :
 
oink!:
Bonjour Trader.

Quelqu'un peut-il m'aider et savoir quels sont les indicateurs présents dans ces deux fichiers .ex4 ?

Meilleures salutations, oink !

Les signaux d'alerte est un simple zigzag fait pour montrer des flèches :

Dossiers :
zz.gif  76 kb
 

Mercimladen, je connais votre nom depuis environ 10000 Indikators ! ;-)

Ensuite, je cherche sur google l'indicateur zigzag+flèches.

L'autre est indéfini ?

Meilleures salutations, oink !

 
oink!:
Mercimladen, je connais votre nom à partir d'environ 10000 Indikators ! ;-)

Puis je cherche sur Google l'indicateur zigzag+flèches.

L'autre est indéfini ?

Meilleures salutations, oink !

Franchement, je ne pourrais pas reconnaître l'autre. Désolé

 

Bonjour,

Je ne comprends pas pourquoi cette ea ne fonctionne pas, compllation OK, rien dans le journal ni dans l'onglet expert, mais pas de trade .

Merci d'avance.

Jo

extern int magicNum=200 ;

extern double TakeProfit = 50 ;

extern double Lots = 0.01 ;

extern double TrailingStop = 30 ;

//externe double MACDOpenLevel=3 ;

//externe double MACDCloseLevel=2 ;

double externe MATrendPeriod=5 ;

int start()

{

double MaCurrent,MaPrevious,MavPrevious ;

double close=iClose(Symbol(),0,0) ;

double vclose=iClose(Symbol(),0,1) ;

double vvclose=iClose(Symbol(),0,2) ;

// double MacdCurrent, MacdPrevious, SignalCurrent ;

// double SignalPrevious, MaCurrent, MaPrevious ;

// double RSIj,RSIv ;

int cnt, ticket, total ;

// vérification des données initiales

// Il est important de s'assurer que l'expert travaille avec un graphique normal.

// normal et que l'utilisateur n'a pas fait d'erreur dans le paramétrage des variables externes (Lots, StopLock).

// variables externes (Lots, StopLoss, TakeProfit,

// TrailingStop) dans notre cas, nous vérifions le TakeProfit

// sur un graphique de moins de 100 barres

if(Bars<100)

{

Print("barres inférieures à 100") ;

return(0) ;

}

if(TakeProfit<10)

{

Print("TakeProfit inférieur à 10") ;

return(0) ; // vérifier TakeProfit

}

// pour simplifier le codage et accélérer les accès

// les données sont placées dans des variables internes

// MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) ;

// MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1) ;

// SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0) ;

// SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1) ;

MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,0) ;

MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,1) ;

MavPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,2) ;

double PlusHaut =High ;

double PlusBas =Low ;

double TiersHaut =PlusBas +((PlusHaut-PlusBas)*0,66) ;

double TiersBas =PlusBas +((PlusHaut-PlusBas)*0,33) ;

// RSIj= iRSI(NULL,0,9,PRICE_CLOSE,0) ;

// RSIv= iRSI(NULL,0,9,PRICE_CLOSE,1) ;

total=OrdersTotal() ;

si(total<1)

{ // aucun ordre ouvert n'est identifié

if(AccountFreeMargin()<(1000*Lots))

{

Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin()) ;

return(0) ;

}

// vérification de la possibilité d'une position longue (BUY)

si

// (RSIv30)

( MaCurrent >MaPrevious)

// && (MaPreviousvclose || vclose>vvclose))

// (MacdCurrentSignalCurrent && MacdPrevious<SignalPrevious &&

// MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "MA",magicNum,0,Green) ;

si(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;

return(0) ;

}

// vérification de la possibilité d'une position courte (SELL)

// si (RSIv>70 && RSIj<70)

si ( MaCurrent <MaPrevious)

// && (MaPrevious>MavPrevious) && (close<vclose || vclose<vvclose))

// (MacdCurrent>0 && MacdCurrentSignalPrevious &&

// MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "MA",magicNum,0,Red) ;

si(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre de vente ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ;

return(0) ;

}

return(0) ;

}

// il est important d'entrer correctement sur le marché,

// mais il est encore plus important d'en sortir correctement...

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

if(OrderType()<=OP_SELL && // vérification de la position ouverte

OrderSymbol()==Symbol()) // vérification du symbole

{

if(OrderType()==OP_BUY)) // une position longue est ouverte

{

// doit-elle être fermée ?

// si(MacdCurrent>0 && MacdCurrentSignalPrevious &&

// MacdCurrent>(MACDCloseLevel*Point))

// if (RSIv>70 && RSIj<70)

if ( MaCurrent <MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // fermer la position

return(0) ; // sortie

}

// vérification du trailing stop

si(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

si(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green) ;

retour(0) ;

}

}

}

}

else // passe en position courte

{

// faut-il la fermer ?

// if(MacdCurrentSignalCurrent &&

// MacdPrevious(MACDCloseLevel*Point))

if

// (RSIv30)

( MaCurrent >MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // fermer la position

return(0) ; // sortie

}

// vérification du trailing stop

si(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red) ;

retour(0) ;

}

}

}

}

}

}

return(0) ;

}

// la fin.

 
Jovager:
Bonjour,

Je ne comprends pas pourquoi cette ea ne fonctionne pas, compllation OK, rien dans le journal ni dans l'onglet expert, mais pas de trade.

Merci d'avance.

Jo

extern int magicNum=200 ;

extern double TakeProfit = 50 ;

extern double Lots = 0.01 ;

extern double TrailingStop = 30 ;

//externe double MACDOpenLevel=3 ;

//externe double MACDCloseLevel=2 ;

double externe MATrendPeriod=5 ;

int start()

{

double MaCurrent,MaPrevious,MavPrevious ;

double close=iClose(Symbol(),0,0) ;

double vclose=iClose(Symbol(),0,1) ;

double vvclose=iClose(Symbol(),0,2) ;

// double MacdCurrent, MacdPrevious, SignalCurrent ;

// double SignalPrevious, MaCurrent, MaPrevious ;

// double RSIj,RSIv ;

int cnt, ticket, total ;

// vérification des données initiales

// Il est important de s'assurer que l'expert travaille avec un graphique normal.

// normal et que l'utilisateur n'a pas fait d'erreur dans le paramétrage des variables externes (Lots, StopLock).

// variables externes (Lots, StopLoss, TakeProfit,

// TrailingStop) dans notre cas, nous vérifions le TakeProfit

// sur un graphique de moins de 100 barres

if(Bars<100)

{

Print("barres inférieures à 100") ;

return(0) ;

}

if(TakeProfit<10)

{

Print("TakeProfit inférieur à 10") ;

return(0) ; // vérifier TakeProfit

}

// pour simplifier le codage et accélérer les accès

// les données sont placées dans des variables internes

// MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) ;

// MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1) ;

// SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0) ;

// SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1) ;

MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,0) ;

MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,1) ;

MavPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_SMA,PRICE_CLOSE,2) ;

double PlusHaut =High ;

double PlusBas =Low ;

double TiersHaut =PlusBas +((PlusHaut-PlusBas)*0,66) ;

double TiersBas =PlusBas +((PlusHaut-PlusBas)*0,33) ;

// RSIj= iRSI(NULL,0,9,PRICE_CLOSE,0) ;

// RSIv= iRSI(NULL,0,9,PRICE_CLOSE,1) ;

total=OrdersTotal() ;

si(total<1)

{ // aucun ordre ouvert n'est identifié

if(AccountFreeMargin()<(1000*Lots))

{

Print("Nous n'avons pas d'argent. Marge libre = ", AccountFreeMargin()) ;

return(0) ;

}

// vérification de la possibilité d'une position longue (BUY)

si

// (RSIv30)

( MaCurrent >MaPrevious)

// && (MaPreviousvclose || vclose>vvclose))

// (MacdCurrentSignalCurrent && MacdPrevious<SignalPrevious &&

// MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "MA",magicNum,0,Green) ;

si(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;

return(0) ;

}

// vérification de la possibilité d'une position courte (SELL)

// si (RSIv>70 && RSIj<70)

si ( MaCurrent <MaPrevious)

// && (MaPrevious>MavPrevious) && (close<vclose || vclose<vvclose))

// (MacdCurrent>0 && MacdCurrentSignalPrevious &&

// MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "MA",magicNum,0,Red) ;

si(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre de vente ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture d'un ordre de VENTE : ",GetLastError()) ;

return(0) ;

}

return(0) ;

}

// il est important d'entrer correctement sur le marché,

// mais il est encore plus important d'en sortir correctement...

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

if(OrderType()<=OP_SELL && // vérification de la position ouverte

OrderSymbol()==Symbol()) // vérification du symbole

{

if(OrderType()==OP_BUY)) // une position longue est ouverte

{

// doit-elle être fermée ?

// si(MacdCurrent>0 && MacdCurrentSignalPrevious &&

// MacdCurrent>(MACDCloseLevel*Point))

// if (RSIv>70 && RSIj<70)

if ( MaCurrent <MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // fermer la position

return(0) ; // sortie

}

// vérification du trailing stop

si(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

si(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green) ;

retour(0) ;

}

}

}

}

else // passe en position courte

{

// faut-il la fermer ?

// if(MacdCurrentSignalCurrent &&

// MacdPrevious(MACDCloseLevel*Point))

if

// (RSIv30)

( MaCurrent >MaPrevious)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // fermer la position

return(0) ; // sortie

}

// vérification du trailing stop

si(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red) ;

retour(0) ;

}

}

}

}

}

}

return(0) ;

}

// la fin.

Cela fonctionne dans mes backtests :

Dossiers :
jo.gif  90 kb
 

Bonjour mladen,

Je veux faire une vente partielle de mon profitOrder avec la même valeur que ma variable "LossValue".

J'ai essayé de calculer la taille du lot en suivant les étapes suivantes :

-Lire le profit réel de l'ordre de profit.

-Calculer le ProfitParLotPas

-Calculer la valeur de la perte/profitPerLotstep et arrondir le résultat du lot.

-Mais si je vends cette taille de lot, la valeur du profit est trop faible (je pense que c'est à cause du spread).

Quelle est la méthode de calcul correcte ?

 

Voici une question supplémentaire.

Si je fais une fermeture partielle, le reste de la position est automatiquement ouvert par le courtier. Avant, je donnais un commentaire à la position pour la différencier. Comment puis-je le reconnaître maintenant ?

 
sunshineh:
Voici une autre question : si je fais une fermeture partielle, le reste de la position est automatiquement ouvert par le courtier. Avant, je donnais un commentaire à la position pour la différencier. Comment puis-je la reconnaître maintenant ?

sunshineh

Vous ne pouvez rien faire

Seul le courtier peut modifier le champ de commentaire d'un ordre. Il se peut qu'un courtier modifie le commentaire de manière à ce qu'il indique quelque chose comme "de nnnn", où nnnn est le numéro du ticket précédent, mais dans la plupart des cas, il ne le fait pas, et vous n'avez donc aucune solution pour identifier de manière unique l'ordre précédent dans des cas comme celui-ci.

 

Merci mladen ! Avez-vous une solution à mon post précédent avec le calcul de la taille du lot selon une valeur définie comme 100 EUR ?