Exécution de plus d'une EE à la fois - page 2

 

Tout d'abord, assurez-vous que vous avez initialisé toutes les variables avec des valeurs par défaut significatives. Par exemple, vous utilisez BuyTicket avant qu'il ne soit initialisé, il peut donc avoir n'importe quelle valeur lors de la première exécution.

Extrait du fichier de référence MQL4 (MQL4 Reference / Language Basics / Variables / Initialization of Variables) :

If a variable is not initialized explicitly, the value stored in this variable can be any. Implicit initialization is not used.

Ainsi, dans la partie suivante, ajoutez des valeurs par défaut aux variables :

//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; 
 

Et oui, MQL4 a des bogues et des bizarreries, mais la plupart des erreurs peuvent être évitées en lisant simplement les bases dans le manuel de référence.

Il existe également un article sur les bogues courants dans les programmes MQL4. Vérifiez en haut du forum, vous trouverez le lien.

 
drazen64:

Tout d'abord, assurez-vous que vous avez initialisé toutes les variables avec des valeurs par défaut significatives. Par exemple, vous utilisez BuyTicket avant qu'il ne soit initialisé, il peut donc avoir n'importe quelle valeur lors de la première exécution.

Extrait du fichier de référence MQL4 (MQL4 Reference / Language Basics / Variables / Initialization of Variables) :

Ainsi, dans la partie suivante, ajoutez des valeurs par défaut aux variables :



C'est vrai, cependant, cela dépend de l'utilisation. Parfois, vous voulez simplement le déclarer parce que vous savez où la valeur sera prise, et parfois vous avez besoin de l'initialiser avec quelque chose car il peut ne pas fonctionner correctement s'il n'est pas initialisé avec des valeurs par défaut spécifiques.
 
deysmacro:

C'est vrai, cependant, cela dépend de l'utilisation. Parfois, vous voulez simplement déclarer la variable parce que vous savez où la valeur sera prise, et parfois vous avez besoin de l'initialiser avec quelque chose car elle peut ne pas fonctionner correctement si elle n'est pas initialisée avec des valeurs par défaut spécifiques.


Il n'a pas besoin d'initialiser les variables à l'endroit de la définition, mais il doit absolument initialiser les variables à une certaine valeur avant de les utiliser.

S'il les utilise avant l'initialisation, la valeur est imprévisible. Ainsi que ses erreurs. Avant toute analyse plus approfondie du code, il devrait s'occuper de ce problème.

Les compilateurs modernes génèrent des erreurs si vous essayez d'utiliser des variables non initialisées. MQL4 ne le fait malheureusement pas, donc le codeur doit être sûr que tout est correctement initialisé.

 
Vous pourriez lui faire remarquer une chose : il utilise la var sans initialisations appropriées.
 
deysmacro:
Vous pourriez lui faire remarquer une chose, à savoir qu'il utilise le var sans initialisations appropriées.


Lisez la deuxième phrase de la première ligne de https://www.mql5.com/en/forum/151167/page2#954612.

Vous pourriez lire la réponse avant de la critiquer.

D'ailleurs, comment aidez-vous ici ? Les remarques "intelligentes" n'aident pas beaucoup.

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

J'ai lu avant de poster le mien. Je veux dire, montrez-lui une chose qui se rapporte à la variable et cette variable n'est pas initialisée correctement.


Hehe. GumRai l'a battu. XD

 

Si je vous comprends bien, vous dites que le fait qu'il utilise des variables non initialisées n'est pas quelque chose dont il faut s'inquiéter simplement parce que je n'ai pas indiqué exactement ce qui pourrait se passer parce que BuyTicket et d'autres variables contiennent des valeurs inconnues lorsque le programme démarre ?

Eh bien, qu'il en soit ainsi. Laissez-le utiliser des variables non initialisées. Que pourrait-il arriver de mal ?

 
J'ai initialisé toutes les variables comme suggéré et j'ai supprimé "==true" des booléens. J'ai également supprimé tous les espaces bancaires à l'intérieur des lignes de code. Je l'ai testé en utilisant le débogueur sur deux symboles différents - l'un sur l'ordinateur portable et l'autre sur le PC pendant environ 2 heures et ils ont tous deux bien fonctionné, vendant, achetant et fermant au bon moment sans aucune erreur. Cependant, j'ai ensuite ajouté l'EA aux 3 autres symboles, à la fois sur le PC et sur l'ordinateur portable, afin que les 4 symboles fonctionnent sur les deux terminaux, et tous ont commencé à manquer des entrées et des sorties à partir de ce moment-là. A la fin du test, sur un terminal, j'ai retiré les EA avant de fermer les positions ouvertes et sur l'autre terminal, j'ai retiré les EA après avoir fermé les positions ouvertes. Le terminal qui avait encore des positions ouvertes a pris beaucoup de temps pour supprimer les EAs mais le terminal sans positions ouvertes a supprimé les 4 EAs immédiatement. Le code révisé est posté séparément ci-dessous.