Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
int start(){
if(TimeCurrent()>D'2008.07.01 12:00:00'){Comment("EXPIRED") ; return(0);}
...
return(0) ;
}
S'il vous plaît, quelqu'un peut-il me dire s'il est possible d'avoir une limite de date dans un EA, ce que je veux dire, c'est que je peux fixer une date d'expiration dans un EA qui, une fois qu'il atteint la date fixée, arrête simplement le trading.
Cela donnerait probablement quelque chose comme ceci
vérifier la date, si la date est égale ou supérieure à (set date) ne rien faire.
C'est la version anglaise, j'ai besoin de la version MQL4...lol
Merci si quelqu'un peut m'aider.S'il vous plaît, quelqu'un peut-il me dire s'il est possible d'avoir une limite de date dans un EA, ce que je veux dire, c'est que je peux définir une date d'expiration dans un EA qui, une fois qu'il atteint la date fixée, il s'arrête de négocier.
Il dirait probablement quelque chose comme ceci
vérifier la date, si la date est égale ou supérieure à (date définie) ne rien faire.
C'est la version anglaise, j'ai besoin de la version MQL4...lol
Merci si quelqu'un peut m'aider.Regardez ce fil de discussion https://www.mql5.com/en/forum/174194
Merci monsieur... J'apprécie beaucoup.
High Low hebdomadaire.
Quelqu'un peut-il afficher un indicateur hebdomadaire High Low comme celui joint pour le quotidien ?
Ou peut-être changer l'indicateur ci-joint en un indicateur hebdomadaire pour moi, s'il vous plaît.
Merci d'avance.
Utilisez cet indicateur https://www.mql5.com/en/forum/173574/page32 (il est quotidien, hebdomadaire et mensuel).
Ou cet indicateur https://www.mql5.com/en/forum/177792
Ou cet indicateur https://www.mql5.com/en/forum/178698
Bonjour à tous
Voici l'ea que j'utilise. Quelqu'un peut-il me dire ce qu'il faut changer pour avoir un BUY-STOP et un SELL_Stop pris en même temps. La façon dont il est maintenant, soit un buy-stop ou un sell-stop est déclenché. J'aimerais avoir les deux. Deuxièmement, que dois-je faire pour limiter le nombre d'ordres pour chaque bougie.
Je vous remercie d'avance.
voici le code :
void start() {
//---- vérifier l'historique et le trading
if(Bars<100 || IsTradeAllowed()==false) return ;
co=CalculateCurrentOrders(Symbol()) ;
CheckForSignals() ;
si (co>0) CheckForClose() ;
CheckForOpen() ;
co=CalculateCurrentOrders(Symbol()) ;
if (mkt>0) {
BreakEvenStop(BreakEven,0) ;
double pcnt =( (AccountEquity()-AccountBalance()) / Solde du compte())*100 ;
Print("Capital du compte = ",Capital du compte()) ;
Print("Solde du compte = ",AccountBalance()) ;
if(pcnt>EquityGainPercent)
{
int total = OrdersTotal() ;
for(int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS) ;
int type = OrderType() ;
bool result = false ;
switch(type)
{
//Fermeture des positions longues ouvertes
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red ) ;
pause ;
//Fermeture des positions courtes ouvertes
cas OP_SELL : résultat = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ) ;
pause ;
//Fermeture des ordres en attente
case OP_BUYLIMIT :
case OP_BUYSTOP :
cas OP_SELLLIMIT :
case OP_SELLSTOP : result = OrderDelete( OrderTicket() ) ;
}
if(result == false)
{
Alert("Order " , OrderTicket() , " failed to close. Erreur :" , GetLastError() ) ;
Sleep(3000) ;
}
}
Print("ALL ORDERS CLOSE-->Locked in on Profits") ;
}
return(0) ;
}
}
//+------------------------------------------------------------------+
//| Calculer les positions ouvertes |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int ord ; mkt=0 ;
//----
for(int i=0;i<OrdersTotal();i++) {
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continuez ;
if(OrderSymbol()==symbol && OrderMagicNumber()==MagicNumber) {
ord++ ;
si (OrderType()==OP_BUY || OrderType()==OP_SELL) mkt++ ;
}
}
//---- retourner le volume des ordres
return(ord) ;
}
//+------------------------------------------------------------------+
//| Vérifier les conditions des ordres ouverts |
//+------------------------------------------------------------------+
void CheckForSignals() {
//Vérifier les signaux longs, courts et de sortie
buysig=false ;
sellsig=false ;
closebuy=false ;
closesell=false ;
remorder=false ;
int isins,isouts,iskeyrev,is2brev ;
if (InsideBar) isins=IsInsideBar(shift) ;
if (OutSideBar) isouts=IsOutSideBar(shift) ;
if (KeyReversalBar) iskeyrev=IsKeyReversalBar(shift) ;
if (TwoBarReversal) is2brev=IsTwoBarReversal(shift) ;
//condition de signal d'entrée longue
if (isins>0 || isouts>0 || iskeyrev>0 || is2brev>0) {
buysig=true ;
closesell=true ;
}
//signal d'entrée courte
si (isins<0 || isouts<0 || iskeyrev<0 || is2brev<0) {
buysig=false ;
sellsig=vrai ;
closebuy=true ;
}
if (last>0 && (Time[0]-last)/(Period()*60)>=CancelOrderBars) {
remorder=true ;
}
}
void CheckForOpen() {
int res,tr ;
//---- conditions de vente
co=CalculateCurrentOrders(Symbol()) ;
if(sellsig && lastsig!=-1) {
co=CalculateCurrentOrders(Symbol()) ;
si (co==0) {
res = OpenStop(OP_SELLSTOP,LotsRisk(StopLoss), Low[shift]-OrderPipsDiff*Point, StopLoss, TakeProfit1) ;
}
lastsig=-1 ;
last=Time[0] ;
retour ;
}
//---- conditions d'achat
if(buysig && lastsig!=1) {
co=CalculateCurrentOrders(Symbol()) ;
si (co==0) {
res = OpenStop(OP_BUYSTOP,LotsRisk(StopLoss), High[shift]+OrderPipsDiff*Point, StopLoss, TakeProfit1) ;
}
last=Time[0] ;
lastsig=1 ;
retour ;
}
}
void BreakEvenStop(int BES, int BELP) {
/déplacer le stoploss pour verrouiller le profit
bool bres ;
double StopLoss ;
if ( BES > 2 ) {
for (int i = 0 ; i < OrdersTotal() ; i++) {
si ( OrderSelect (i, SELECT_BY_POS) == false ) continuez ;
if ( OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber ) continue ;
if ( OrderType() == OP_BUY ) {
si ( Bid < OrderOpenPrice()+BES*Point ) continuez ;
StopLoss = OrderOpenPrice()+BELP*Point ;
si ( StopLoss > OrderStopLoss() ) {
bres=OrderModify (OrderTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, White) ;
if (!bres) Print("Error Modifying BUY order : ",ErrorDescription(GetLastError())) ;
}
}
if ( OrderType() == OP_SELL ) {
si ( Ask > OrderOpenPrice()-BES*Point ) continuez ;
StopLoss = OrderOpenPrice()-BELP*Point ;
si ( StopLoss < OrderStopLoss() ) {
bres=OrderModify (OrderTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, Gold) ;
if (!bres) Print("Error Modifying SELL order : ",ErrorDescription(GetLastError())) ;
}
}
}
}
retour ;
}
int IsKeyReversalBar(int shift) {
//L'ouverture de la barre clé doit être supérieure d'au moins ?pips au sommet de la barre précédente.
//La clôture de la barre clé doit être comprise entre le haut et la clôture de la barre précédente. L'ouverture de la barre actuelle doit être
//inférieur à la clôture de la barre clé. Un ordre SellStop doit être placé sur le bas de la barre clé s'il n'est pas exécuté dans les 4 barres suivantes.
//les 4 barres suivantes, annulez l'ordre. Voir l'image ci-dessous - court !
si (Open[shift]=Low[shift+1] && Close[shift]Close[shift]) return(1) ;
si (Open[shift]>High[shift+1] && Close[shift]=Close[shift+1] && Open[shift-1]<Close[shift]) return(-1) ;
return(0) ;
}
int IsTwoBarReversal(int shift) {
//Two Bar Reversal, L'ouverture de la première barre doit être proche du bas de la barre précédente et la fermeture doit être beaucoup plus basse et
//d'avoir un corps de bonne taille. L'ouverture de la deuxième barre devrait être très proche de la clôture de la première barre, mais les deux devraient être bien en dessous du point médian de chaque barre avec un corps de bonne taille.
//Le point d'ouverture de la deuxième barre doit être très proche de la clôture de la première barre mais les deux doivent être bien en dessous du point médian de chaque barre et la clôture doit être très proche du bas de la deuxième barre précédente. Un ordre d'achat stop doit être placé au sommet de la barre 1.
//S'il n'est pas exécuté dans les 4 barres, annulez l'ordre. Voir l'image ci-dessous
si (MathAbs(Open[shift+1]-Close[shift+1])> MathAbs(Open[shift+1]-Low[shift+2])<=
MathAbs(Close[shift]-Low[shift+2])<=
MathAbs(Open[shift]-Close[shift+1]) &&
Close[shift+1]<(High[shift+1]+Low[shift+1])/2 &&
Open[shift]<(High[shift]+Low[shift])/2)
retour(1) ;
si (MathAbs(Open[shift+1]-Close[shift+1])> MathAbs(Open[shift+1]-High[shift+2])<=
MathAbs(Close[shift]-Low[shift+2])<=
MathAbs(Open[shift]-Close[shift+1]) &&
Close[shift+1]>(High[shift+1]+Low[shift+1])/2 &&
Open[shift]>(High[shift]+Low[shift])/2)
retour(-1) ;
return(0) ;
}
int OpenStop(int mode,double lot, double prc, int SL, int TP) {
int res,tr,col ;
chaîne de caractères ;
double prc,sl,tp,stlev ;
essais=0 ;
stlev=(1+MarketInfo(Symbol(),MODE_STOPLEVEL))*Point ;
while (res<=0 && tries<OrderTriesNumber) {
tr=0 ; while (tr<5 && !IsTradeAllowed()) { tr++ ; Sleep(2000) ; }
RefreshRates() ;
if (mode==OP_SELLSTOP) {
si (prc<=Bid-stlev) openprice=prc ;
sinon openprice=Bid-stlev ;
si (SL>0) sl=openprice+SL*Point ;
si (TP>0) tp=openprice-TP*Point ;col=Red ;
} else
si (mode==OP_BUYSTOP) {
si (prc>=Ask+stlev) openprice=prc ;
sinon openprice=Ask+stlev ;
si (SL>0) sl=openprice-SL*Point ;
si (TP>0) tp=openprice+TP*Point ;col=Bleu ;
} else return ;
Print(Ask," ",Bid," ",Symbol()," ",mode," ",lot," ",openprice," ",sl," ",tp," ") ;
res=OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,EAName+"_"+MagicNumber,MagicNumber,0,col) ;
essais++ ;
}
if (res<=0) Print("Error opening pending order : ",ErrorDescription(GetLastError())) ;
return(res) ;
}
void CheckForClose() {
bool bres ; int tr ;
for(int i=0;i<OrdersTotal();i++) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue ;
if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue ;
//---- vérifier le type d'ordre
if(OrderType()==OP_BUY && closebuy) {
bres=CloseAtMarket(OrderTicket(),OrderLots()) ;
continuez ;
}
if(OrderType()==OP_SELL && closesell) {
bres=CloseAtMarket(OrderTicket(),OrderLots()) ;
continuez ;
}
if(OrderType()==OP_BUYSTOP && (closebuy || remorder)) {
bres=DeletePending(OrderTicket()) ;
continuez ;
}
if(OrderType()==OP_SELLSTOP && (closesell || remorder)) {
bres=DeletePending(OrderTicket()) ;
continuer ;
}
}
}
bool DeletePending(int ticket) {
bool bres=false ; int tr ;
tries=0 ;
while (!bres && tries<OrderTriesNumber) {
bres=OrderDelete(ticket) ;
essais++ ;
tr=0 ; while (tr<5 && !IsTradeAllowed()) { tr++ ; Sleep(2000) ; }
}
if (!bres) Print("Error deleting order : ",ErrorDescription(GetLastError())) ;
return (bres) ;
}
Quelqu'un connaît-il le code pour qu'un EA ne fonctionne qu'avec un certain numéro de compte? Merci !
C'est ici https://www.mql5.com/en/forum/174194 (post #7)
Tu en as trop dit, celui-là.
C'est ici https://www.mql5.com/en/forum/174194 (post #7)
Merci newdigital.
Mon code d'initialisation (qui contient une expiration de temps) est configuré comme suit :
int init()
{if (TimeCurrent()>D'2008.06.07 12:00:00'){Comment("veuillez renouveler votre abonnement") ; return(0);}
return(0) ;
}
}
if (Account != AccountNumber()){
Comment("Trade on account : "+AccountNumber()+" FORBIDDEN !") ;
return(0) ;
}else {Comment("");}
Et maintenant je renvoie cette erreur :
'}' - parenthèses déséquilibrées
Qu'est-ce que je fais de mal ici ? De même, "int Account = 111111 ;" est-il compatible avec les paramètres de l'EA ? Merci.