Mon EA fonctionne bien lorsqu'il est exécuté seul, mais si j'essaie d'exécuter le même EA sur un symbole différent au même moment et sur le même profil, le second ne fonctionne pas très bien ou pas du tout ou il y a beaucoup d'erreurs. Cela se produit même si j'utilise Symbol() et des numéros magiques différents pour les deux graphiques séparés. Cela se produit même si j'exécute différentes versions du même code (c'est-à-dire que les noms de fichiers EA et les numéros magiques sont différents mais le code est identique par ailleurs). Est-ce que j'ai un conflit avec les variables globales ou y a-t-il une autre raison pour laquelle le deuxième graphique se bloque ? Merci.
- [ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4.
- [Archive] Apprenez à gagner de l'argent avec les villageois !
- Erreurs, bugs, questions
Sneck55:
Mon EA fonctionne bien lorsqu'il est exécuté seul, mais si j'essaie d'exécuter le même EA sur un symbole différent au même moment et sur le même profil, le second ne fonctionne pas très bien ou pas du tout ou il y a beaucoup d'erreurs. Cela se produit même si j'utilise Symbol() et des numéros magiques différents pour les deux graphiques séparés. Cela se produit même si j'exécute différentes versions du même code (c'est-à-dire que les noms de fichiers EA et les numéros magiques sont différents mais le code est identique par ailleurs). Est-ce que j'ai un conflit avec les variables globales ou y a-t-il une autre raison pour laquelle le deuxième graphique se bloque ? Merci.
Mon EA fonctionne bien lorsqu'il est exécuté seul, mais si j'essaie d'exécuter le même EA sur un symbole différent au même moment et sur le même profil, le second ne fonctionne pas très bien ou pas du tout ou il y a beaucoup d'erreurs. Cela se produit même si j'utilise Symbol() et des numéros magiques différents pour les deux graphiques séparés. Cela se produit même si j'exécute différentes versions du même code (c'est-à-dire que les noms de fichiers EA et les numéros magiques sont différents mais le code est identique par ailleurs). Est-ce que j'ai un conflit avec les variables globales ou y a-t-il une autre raison pour laquelle le deuxième graphique se bloque ? Merci.
Comme il ne devrait pas y avoir de problème pour exécuter le même EA sur différents graphiques (je le fais sans aucun problème), vous devriez fournir le code... ?
Oui, si le deuxième se bloque, il est probable qu'il essaie d'utiliser la même ressource que le premier.
Il vaut mieux nous montrer le code et nous vous indiquerons lequel est le coupable, si cela ne prend pas trop de temps.
utilisez le bouton SRC!
gooly: utilisez le bouton SRC!
Quelle partie de SRC n'était pas claire ? Pourquoi ne l'avez-vous pas fait ? Modifiez votre message !
Jouer la vidéoVeuillez éditer votre message.
Pour les grandes quantités de code, joignez-le.if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { : Counter--; }
Si l'alimentation électrique est coupée, le système d'exploitation se bloque, le terminal ou le graphique est accidentellement fermé, la prochaine fois, le BuyTicket sera perdu. Vous aurez un ordre ouvert mais n'essayerez jamais de le fermer. Vous n'avez pas besoin de vous souvenir du numéro de ticket lorsque vous utilisez une boucle OrderSelect.- Vous DEVEZ compter à rebours lorsque vous fermez/supprimez. Revenir en arrière ne fonctionnera pas si un autre EA ferme un ordre. Boucles et fermeture ou suppression d'ordres - MQL4 forum
- Simplifiez vos booléens
// if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; // else MABuyFanning = false; MABuyFanning = (SmallMA>MediumMA&&MediumMA>LargeMA);
if(NewBar == true)
Vous n'écrirez jamais if( (2+2) == 4) == true) n'est-ce pas ? if(2+2 == 4) est suffisant. N'écrivez donc pas if(bool == true), utilisez simplement if(bool) ou if(!bool).
Le bouton SRC a été utilisé pour faire le post
Sneck55:
Le bouton SRC a été utilisé pour faire le post
Le bouton SRC a été utilisé pour faire le post
oui, mais la première ligne "Sorry for the delay...." n'est pas du code et cela a tout gâché
#property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern bool CheckOncePerBar = true; extern double FixedLotSize = 1; extern double SystemStopLoss = 150; extern double TakeProfit = 0; extern int Slippage = 5; extern int MagicNumber = 3574; //Global Variables int BuyTicket; int SellTicket; double InternalStopLoss; double CalcDigits; double CalcPoint; bool MABuyFanning; bool MASellFanning; int SelectedOrder; bool Closed; int ErrorCode; string ErrLog; double BuyStopLoss; double SellStopLoss; bool NewBar; double ThisBarOpen; double SmallMA; double MediumMA; double LargeMA; int Counter; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CalcDigits = MarketInfo(Symbol(),MODE_DIGITS);//MODE_DIGITS is count of digits after decimal point if(CalcDigits == 0) CalcPoint = 1;//Dow if(CalcDigits == 1) CalcPoint = 0.1; if(CalcDigits == 2) CalcPoint = 0.01;//Gold & Nymex if(CalcDigits == 3) CalcPoint = 0.01;//Yen if(CalcDigits == 4) CalcPoint = 0.0001;//Not used if(CalcDigits == 5) CalcPoint = 0.0001;//Non-Yen forex InternalStopLoss = SystemStopLoss*CalcPoint; return(INIT_SUCCEEDED); } //----------------------------------------------- void OnTick() { if(CheckOncePerBar == true) { if(ThisBarOpen != Open[0]) { ThisBarOpen = Open[0]; NewBar = true; } else NewBar = false; } else NewBar = true; if(NewBar == true) { //Reset Moving Averages SmallMA = iMA(NULL,0,8,0,1,0,0); MediumMA = iMA(NULL,0,10,0,1,0,0); LargeMA = iMA(NULL,0,50,0,1,0,0); if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; else MABuyFanning = false; if(SmallMA<MediumMA&&MediumMA<LargeMA) MASellFanning = true; else MASellFanning = false; if(BuyTicket == 0 && MABuyFanning == true) { RefreshRates(); BuyStopLoss = Bid - InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); BuyTicket = OrderSend(Symbol(),OP_BUY,FixedLotSize,Ask,Slippage,BuyStopLoss,0,"Buy Order",MagicNumber,0,Green); if(BuyTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in buy routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",BuyStopLoss); Print(ErrLog); //Buy ticket revert to 0 so it can try again in case of slow connection/timeout etc. BuyTicket = 0; } } if(SellTicket == 0 && MASellFanning == true) { RefreshRates(); SellStopLoss = Ask + InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); SellTicket = OrderSend(Symbol(),OP_SELL,FixedLotSize,Bid,Slippage,SellStopLoss,0,"Sell Order",MagicNumber,0,Red); if(SellTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in sell routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",SellStopLoss); Print(ErrLog); SellTicket = 0; } } //Exits if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red); if(Closed == true) BuyTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine"); } Counter--; } } } if(SellTicket != 0) { if(SmallMA>MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_SELL) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Slippage,Red); if(Closed == true) SellTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",SellTicket," unable to close sell order(s): sell ma convergence close routine"); } Counter--; } } } } return; }
Le code est extrêmement simple et pourtant, plus je l'exécute sur de nombreuses fenêtres, plus ses performances sont mauvaises. Je l'ai exécuté sur 4 symboles différents mais il commence à échouer sur un symbole après quelques minutes. Il démarre également bien mais plus je l'exécute (après quelques heures environ) plus il devient lent et moins précis. Parfois, il peut prendre jusqu'à une minute pour supprimer chaque EA de chaque fenêtre avec le petit cercle près du curseur qui tourne en rond pendant des heures. J'ai un bon PC rapide que je viens de défragmenter et de scanner pour les virus - je l'ai essayé sur mon ordinateur portable aussi avec exactement les mêmes résultats. J'ai essayé de télécharger tout l'historique de M1 mais cela ne fait aucune différence. Est-ce qu'il s'agit d'un problème de fuite de mémoire ? MT4 essaie-t-il d'utiliser les mêmes ressources encore et encore ? Il est clair que je ne pourrai pas lui faire confiance pour trader sur mon compte réel tant que ce problème ne sera pas résolu !
C'est intéressant...
![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