Demandez ! - page 117

 

int start(){

if(TimeCurrent()>D'2008.07.01 12:00:00'){Comment("EXPIRED") ; return(0);}

...

return(0) ;

}

amatrader:
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.
 
amatrader:
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.

Dossiers :
 

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 !

 
 

Tu en as trop dit, celui-là.

}
 
newdigital:
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.