ProRealTime
Pour partager sur le trading automatique, nos algorithmes, nos backtests
Répondre Page 1 sur 1

Un seul trade par bougie - mql4

par Gacanga » 24 Mar 2017 12:31

Bonjour à tous,

Un peu absent ces derniers temps car je finalise un petit robot.

Et là je bloque sur une bétise que je n'arrive pas à mettre en oeuvre et peut-être quelqu'un pourra-t-il m'aider.

Voilà je souhaiterai que mon robot ne passe qu'un seul trade par bougie et je n'arrive pas à le coder.

Je code en MQL4 (metatrader)

Quelqu'un aurait-il une piste ?

D'avance merci

Re: Un seul trade par bougie - mql4

par Edd » 24 Mar 2017 15:12

Salut,
tu peux utiliser la fonction "Bars" qui renvoit le nombre de bougies présentes dans le graphique.

int bougie = 0;

if (Bars > bougie)
{
ordre...
bougie=Bars
}


Tu mets en variable globale bougie = 0 :
la variable est initialisée à 0 quand tu mets en route l'EA.

Dans les conditions de ton ordre, Bars > bougie;
ton ordre est exécuté uniquement si il y plus de barres sur le graphique que de barres enregistrées dans la variable "bougie"

Juste après l'execution de ton ordre, bougie=Bars :
la variable "bougie" à donc la même valeur que le nombre de barres sur le graphique. Ce qui bloque les nouveaux ordres.

la valeur de "Bars" augmente de 1 à chaque nouvelle barre. Donc tant qu'il n'y a pas de nouvelle barre, pas de nouvel ordre.

voilu

Re: Un seul trade par bougie - mql4

par Gacanga » 25 Mar 2017 15:19

grand merci

je vais tester ça.

Re: Un seul trade par bougie - mql4

par Gacanga » 25 Mar 2017 16:30

ça fonctionne impeccable, tu es mon idole du jour !!

Un grand merci

Re: Un seul trade par bougie - mql4

par jefsar » 26 Mar 2020 10:16

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);
}

Articles en relation
Aide Technique MQL4
par Gacanga » 06 Oct 2017 17:43 (2 Réponses)
Aide mql4, grrr !!
par BilouZ36 » 26 Oct 2017 15:40 (5 Réponses)
MQL4 problème syntaxe!!
Fichier(s) joint(s) par Se7enRise » 19 Fév 2018 17:08 (19 Réponses)
besoin d'aide en mql4
par Philippe56380 » 09 Fév 2019 14:04 (6 Réponses)
MQL4 - MagicNumber et Trailing Stop
par Gacanga » 04 Avr 2017 12:39 (5 Réponses)
HELP mql4 codage Expert Advisor
par Eversa » 12 Avr 2019 19:39 (1 Réponses)
Programmation en MQL4 : récupérer le contenu d'un email/SMS
par oscar » 15 Fév 2017 19:18 (3 Réponses)
Calculer la moyenne mobile du rsi en mql4 dans un indicateur
par Gacanga » 09 Nov 2017 13:27 (2 Réponses)
Faire tourner plusieurs algos sur un seul compte IG
par plataxis » 18 Juin 2016 14:21 (12 Réponses)
Attendre la bougie d'aprés
par BearIsDead » 11 Jan 2018 11:12 (10 Réponses)

ProRealTime