Bonjour,
Je souhaiterai rebondir sur ce post, car j'ai un pb avec un expert advisor que j'ai récupéré sur internet, qui fonctionne bien dans l'ensemble, mais je voudrais insérer une fonction qui bloque l'Expert si un trade a déjà eu lieu dans une barre.
Je suis un peu novice en programmation et ne sais ou insérer ces éléments dans mon code.
Voici ci dessous un exemple de mon code.
Merci d'avance :
extern int MagicNumber=1;
extern double Lots =0.01;
extern double StopLoss=120;
extern double TakeProfit=100;
extern int TrailingStop=0;
extern int
slippage=3;
//+------------------------------------------------------------------+
// expert start function
//+------------------------------------------------------------------+
int start()
{
double MyPoint=Point;
if(Digits==3 || Digits==5) MyPoint=Point*10;
double TheStopLoss=0;
double TheTakeProfit=0;
double MoyenneMobileFast=iMA(NULL,0,48,0,MODE_SMA,PRICE_OPEN,0);
double DerniereMoyenneMobileFast=iMA(NULL,0,48,0,MODE_SMA,PRICE_OPEN,1);
double MoyenneMobileSlow=iMA(NULL,0,72,0,MODE_SMA,PRICE_OPEN,0);
double DerniereMoyenneMobileSlow=iMA(NULL,0,72,0,MODE_SMA,PRICE_OPEN,1);
if( TotalOrdersCount()==0 )
{
int result=0;
if((DerniereMoyenneMobileFast<DerniereMoyenneMobileSlow)&&(MoyenneMobileFast>MoyenneMobileSlow)) // Here is your open buy rule
{
result=OrderSend(Symbol(),OP_BUY,Lots,
ask,
slippage,0,0,"EA Generator http://www.ForexEAdvisor.com",MagicNumber,0,Blue);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=10;
if(TakeProfit>0) TheTakeProfit=
ask+TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=
ask-StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
if((DerniereMoyenneMobileFast>DerniereMoyenneMobileSlow)&&(MoyenneMobileFast<MoyenneMobileSlow)) // Here is your open Sell rule
{
result=OrderSend(Symbol(),OP_SELL,Lots,
Bid,
slippage,0,0,"EA Generator http://www.ForexEAdvisor.com",MagicNumber,0,Red);
if(result>0)
{
TheStopLoss=0;
TheTakeProfit=10;
if(TakeProfit>0) TheTakeProfit=
Bid-TakeProfit*MyPoint;
if(StopLoss>0) TheStopLoss=
Bid+StopLoss*MyPoint;
OrderSelect(result,SELECT_BY_TICKET);
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(TheStopLoss,Digits),NormalizeDouble(TheTakeProfit,Digits),0,Green);
}
return(0);
}
}
for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol() &&
OrderMagicNumber()==MagicNumber
)
{
if(OrderType()==OP_BUY)
{
if((DerniereMoyenneMobileFast>DerniereMoyenneMobileSlow)
&&(MoyenneMobileFast<MoyenneMobileSlow)) //here is your close buy rule
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),
slippage,Red);
}
if(TrailingStop>0)
{
if(
Bid-OrderOpenPrice()>MyPoint*TrailingStop)
{
if(OrderStopLoss()<
Bid-MyPoint*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),
Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if((DerniereMoyenneMobileFast<DerniereMoyenneMobileSlow)
&&(MoyenneMobileFast>MoyenneMobileSlow)) // here is your close sell rule
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),
slippage,Red);
}
if(TrailingStop>0)
{
if((OrderOpenPrice()-
ask)>(MyPoint*TrailingStop))
{
if((OrderStopLoss()>(
ask+MyPoint*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),
ask+MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
int TotalOrdersCount()
{
int result=0;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
if (OrderMagicNumber()==MagicNumber) result++;
}
return (result);
}