![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Aide - Comment modifier un EA pour laisser les transactions existantes ouvertes ?
J'ai besoin d'une solution assez simple, si quelqu'un peut m'aider.
J'ai un EA qui est maintenant rentable mais qui ouvre et ferme une transaction en même temps, de sorte qu'une seule transaction est active à la fois.
Je veux maintenant l'exécuter sur un compte existant qui a quelques transactions déjà ouvertes, je veux laisser ces transactions en cours, mais l'EA continue d'ouvrir et de fermer sa propre transaction, et lorsque l'une des transactions existantes devient rentable, elle la ferme.
Cette demande annexe de fermeture des transactions existantes en cas de profit peut être ignorée si cela permet de rester simple, je peux les fermer manuellement si nécessaire.
Voici ce que mon EA utilise pour l'instant
if(val1 > val2) {trade_text = "BUY trade open";trend_text = "UP";BV=1;break;}
si(val1 < val2) {trade_text = " SELL trade open";trend_text = "DOWN";SV=1;break;}}
// expert money management
if(MM){if(Risk100){Comment("Valeur de risque non valide.");return(0);}
else{MML=MathFloor((AccountFreeMargin()*AccountLeverage()*Risk*Point*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_MINLOT);}}
if(MM==false){MML=Lots;}
// positions init expertes
int cnt=0,OP=0,OS=0,OB=0,CS=0,CB=0;OP=0;for(cnt=0;cnt<OrdersTotal();cnt++){OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) ;
if((OrderType()==OP_SELL||OrderType()==OP_BUY)&&OrderSymbol()==Symbol()&&((OrderMagicNumber()==Magic)||Magic==0))OP=OP+1;}
if(OP>=1){OS=0; OB=0;}OB=0;OS=0;CB=0;CS=0;// conditions expertes pour ouvrir la position
if(SV>0){OS=1;OB=0;}if(BV>0){OB=1;OS=0;}
// conditions expertes pour fermer une position
if((SV>0)||(RealSL_Enabled&&(OrderOpenPrice()-Bid)/Point>=RealSL)||(RealTP_Enabled&&(Ask-OrderOpenPrice())/Point>=RealTP)){CB=1;}
if((BV>0)||(RealSL_Enabled&&(Ask-OrderOpenPrice())/Point>=RealSL)||(RealTP_Enabled&&(OrderOpenPrice()-Bid)/Point>=RealTP)){CS=1;}
for(cnt=0;cnt<OrdersTotal();cnt++){OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) ;
if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&((OrderMagicNumber()==Magic)||Magic==0))
{if(CB==1){OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Aqua);temp = Bid;return(0);}}
if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&&((OrderMagicNumber()==Magic)||Magic==0)){
if(CS==1){OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Gold);temp = Bid;return(0);}}}double SLI=0,TPI=0;int TK=0 ;
// valeur de la position ouverte de l'expert
if((AddP()&&Add_Positions&&OP<=MaxOrders)||(OP==0&&!Add_Positions)){
if(OS==1){if(TP==0)TPI=0;else TPI=Bid-TP*Point;if(SL==0)SLI=0;else SLI=Bid+SL*Point;OS=0;return(0);}
if(OB==1){if(TP==0)TPI=0;else TPI=Ask+TP*Point;if(SL==0)SLI=0;else SLI=Ask-SL*Point;{TK=OrderSend(Symbol(),OP_BUY,MML,Ask,Slip,SLI,TPI,OrSt,Magic,0,Blue);OB=0;return(0);}}
for(j=0;j<OrdersTotal();j++){if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)){if(OrderSymbol()==Symbol()&&((OrderMagicNumber()==Magic)||Magic==0)){TrP();}}}return(0);}
// nombre expert d'ordres
int CntO(int Type,int Magic){int _CntO;_CntO=0 ;
for(int j=0;j<OrdersTotal();j++){OrderSelect(j,SELECT_BY_POS,MODE_TRADES);if(OrderSymbol()==Symbol()){si((OrderType()==Type&&(OrderMagicNumber()==Magic)||Magic==0))_CntO++;}}return(_CntO);}
//rendement d'expert
void TrP(){double pb,pa,pp;pp=MarketInfo(OrderSymbol(),MODE_POINT);if(OrderType()==OP_BUY){pb=MarketInfo(OrderSymbol(),MODE_BID) ;
if(BE>0){if((pb-OrderOpenPrice())>BE*pp){if((OrderStopLoss()-OrderOpenPrice())<0){ModSL(OrderOpenPrice()+0*pp);}}}
// stop suiveur expert
if(TS>0){if((pb-OrderOpenPrice())>TS*pp){if(OrderStopLoss()<pb-(TS+TS_Step-1)*pp){ModSL(pb-TS*pp);return;}}}}
if(OrderType()==OP_SELL){pa=MarketInfo(OrderSymbol(),MODE_ASK);if(BE>0){if((OrderOpenPrice()-pa)>BE*pp){if((OrderOpenPrice()-OrderStopLoss())<0){ModSL(OrderOpenPrice()-0*pp);}}}
if(TS>0){if(OrderOpenPrice()-pa>TS*pp){if(OrderStopLoss()>pa+(TS+TS_Step-1)*pp||OrderStopLoss()==0){ModSL(pa+TS*pp);return;}}}}}
//expert stoploss
void ModSL(double ldSL){bool fm;fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldSL,OrderTakeProfit(),0,CLR_NONE);}
//fonction d'ajout de positions d'experts
bool AddP(){int _num=0 ; int _ot=0 ;
for (int j=0;j<OrdersTotal();j++){if(OrderSelect(j,SELECT_BY_POS)==true && OrderSymbol()==Symbol()&&OrderType()<3&&((OrderMagicNumber()==Magic)||Magic==0)){
_num++;if(OrderOpenTime()>_ot) _ot=OrderOpenTime();}}if(_num==0) return(true);if(_num>0 && ((Time[0]-_ot))>0) return(true);else return(false);}
/*
// conditions expertes pour fermer la position
if((SV>0)||(RealSL_Enabled&&(OrderOpenPrice()-Bid)/Point>=RealSL)||(RealTP_Enabled&&(Ask-OrderOpenPrice())/Point>=RealTP)){CB=1;}
if((BV>0)||(RealSL_Enabled&&(Ask-OrderOpenPrice())/Point>=RealSL)||(RealTP_Enabled&&(OrderOpenPrice()-Bid)/Point>=RealTP)){CS=1;}
for(cnt=0;cnt<OrdersTotal();cnt++){OrderSelect(cnt ,SELECT_BY_POS,MODE_TRADES) ;
if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&( (OrderMagicNumber()==Magic)||Magic==0))
{if(CB==1){OrderClose(OrderTicket(),OrderLots(),Bi d,Slip,Aqua);temp = Bid;return(0);}}
if(OrderType()==OP_SELL&&OrderSymbol()==Symbol()&& ((OrderMagicNumber()==Magic)||Magic==0)){
if(CS==1){OrderClose(OrderTicket(),OrderLots(),Ask ,Slip,Gold);temp = Bid;return(0);}}}double SLI=0,TPI=0;int TK=0 ;
*/
ajouter seulement /*au début des conditions expertes pour fermer la position
et */ à la fin
msn aboukalil ( at ) hotmail.fr
Merci aboukalil pour la réponse rapide, mais je ne comprends pas bien, si j'édite cela, est-ce que je n'aurai pas de commande de fermeture, cela laissera mes trades existants, mais mon EA ne fermera jamais son propre trade pour ouvrir dans la direction opposée ?
Pouvez-vous m'aider un peu sur ce point ?
Salut à tous.....
Je suis curieux de savoir si quelqu'un connaît ou possède un indicateur générique qui permet d'appeler n'importe quel indicateur tampon unique basé sur une ligne dans les iCustoms du générique, de sorte que lorsque l'indicateur générique est attaché à un graphique, il s'affiche comme un indicateur à barres d'histogramme à double couleur dont le changement de couleur est basé sur la pente de l'indy iCustomed ?
Toute aide est la bienvenue.![](https://c.mql5.com/forextsd/smiles/teeth_smile.png)
Mesdames et messieurs,
Comment puis-je transformer un indicateur en fichier csv ? Merci.
Mesdames et messieurs, comment puis-je transformer un indicateur en fichier CSV ? Merci.
Voulez-vous dire comment enregistrer dans un fichier CSV ?
Vérifiez ceci :
Outils - Lecteur .csv
Aidez-nous à modifier ce petit script
Bonjour,
Quelqu'un pourrait-il m'aider à modifier ce petit script d'entrée d'ordre ?
afin que la taille du lot négocié soit fonction d'un % risqué de la taille du compte.
Je sais que cette ligne de code devrait être insérée quelque part mais je n'ai aucune idée de comment la programmer.
double Risk = RiskPercent / 100 ;
if (UseMoneyMgmt)
Lots=NormalizeDouble(AccountBalance()*Risk/stoploss/(MarketInfo(Symbol(),MODE_TICKVALUE)),2) ;
Merci beaucoup par avance
commande en cours
Bonjour !
comment puis-je gérer les ordres en attente ? (avec l'api mt4)
quand mon programme a reçu un TT_ORDER_PENDING_OPEN (type de trade)
et qu'il a reçu un PUMP_UPDATE_ACTIVATION en notification de pompage