Mehr als einen EA gleichzeitig ausführen - Seite 2

 

Stellen Sie zunächst sicher, dass Sie alle Variablen mit sinnvollen Standardwerten initialisiert haben. Sie verwenden z.B. BuyTicket, bevor es initialisiert wird, so dass es beim ersten Durchlauf einen beliebigen Wert haben kann.

Auszug aus der MQL4-Referenzdatei (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.

Fügen Sie also im folgenden Teil den Variablen Standardwerte hinzu:

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

Und ja, MQL4 hat Bugs und Macken, aber die meisten Fehler lassen sich vermeiden, wenn man nur die Grundlagen im Referenzhandbuch liest.

Außerdem gibt es einen Artikel über häufige Fehler in MQL4-Programmen. Schauen Sie oben im Forum nach, dort finden Sie den Link.

 
drazen64:

Stellen Sie zunächst sicher, dass Sie alle Variablen mit sinnvollen Standardwerten initialisiert haben. Sie verwenden z.B. BuyTicket, bevor es initialisiert wird, so dass es beim ersten Durchlauf einen beliebigen Wert haben kann.

Auszug aus der MQL4-Referenzdatei (MQL4 Reference / Language Basics / Variables / Initialization of Variables):

Fügen Sie also im folgenden Teil den Variablen Standardwerte hinzu:



Das ist richtig, aber es hängt von der Verwendung ab. Manchmal möchte man es nur deklarieren, weil man weiß, woher der Wert genommen wird, und manchmal muss man es mit etwas initialisieren, da es möglicherweise nicht richtig funktioniert, wenn es nicht mit bestimmten Standardwerten initialisiert wird.
 
deysmacro:

Das stimmt, aber es hängt von der Verwendung ab. Manchmal will man sie nur deklarieren, weil man weiß, woher der Wert genommen wird, und manchmal muss man sie mit irgendetwas initialisieren, da sie möglicherweise nicht richtig funktioniert, wenn sie nicht mit bestimmten Standardwerten initialisiert wird.


Er muss die Variablen nicht an der Stelle der Definition initialisieren, aber er sollte die Variablen auf jeden Fall auf einen bestimmten Wert initialisieren, bevor er sie verwendet.

Wenn er sie vor der Initialisierung verwendet, ist der Wert unvorhersehbar. Das gilt auch für seine Fehler. Vor einer tieferen Code-Analyse sollte er sich um dieses Problem kümmern.

Moderne Compiler lösen Fehler aus, wenn Sie versuchen, nicht initialisierte Variablen zu verwenden. MQL4 tut das leider nicht, also muss der Programmierer sicher sein, dass alles richtig initialisiert ist.

 
Du könntest ihn auf 1 Sache hinweisen , dass er die var ohne richtige Initialisierungen verwendet.
 
deysmacro:
Du könntest ihn auf 1 Sache hinweisen , dass er die var ohne richtige Initialisierungen verwendet.


Lesen Sie den zweiten Satz in der ersten Zeile von https://www.mql5.com/en/forum/151167/page2#954612

Sie könnten die Antwort lesen, bevor Sie sie kritisieren.

Übrigens, wie helfen Sie hier? "Kluge" Bemerkungen helfen nicht sehr.

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

Ich habe gelesen, bevor ich meinen Beitrag geschrieben habe. Ich meine, zeigen Sie ihm eine Sache, die sich auf die var bezieht, und diese var ist nicht richtig initialisiert.


Hehe. GumRai übertrifft es. XD

 

Wenn ich Sie richtig verstehe, sagen Sie, dass die Tatsache, dass er nicht initialisierte Variablen verwendet, kein Grund zur Sorge ist, nur weil ich nicht genau darauf hingewiesen habe, was passieren könnte, weil BuyTicket und einige andere Variablen unbekannte Werte enthalten, wenn das Programm startet?

Nun, so sei es. Lassen Sie ihn uninitialisierte Variablen verwenden. Was könnte schon schief gehen?

 
Ich habe alle Variablen wie vorgeschlagen initialisiert und auch "==true" aus den Booleschen Werten entfernt. Außerdem habe ich alle Leerzeichen innerhalb der Codezeilen entfernt. Ich habe es mit dem Debugger auf zwei verschiedene Symbole getestet - eine auf dem Laptop und eine auf dem PC für ca. 2 Stunden und sie beide funktionierten gut, Verkaufen, Kaufen und Schließen zu den richtigen Zeiten mit keine Fehler überhaupt. Dann jedoch fügte ich den EA zu den anderen 3 Symbolen sowohl auf dem PC als auch auf dem Laptop hinzu, so dass alle 4 auf beiden Terminals funktionierten, und alle begannen von da an, Ein- und Ausstiege zu verpassen. Am Ende des Tests entfernte ich auf einem Terminal die EAs, bevor ich die offenen Positionen schloss, und auf dem anderen Terminal entfernte ich die EAs, nachdem ich die offenen Positionen geschlossen hatte. Bei dem Terminal, das noch offene Positionen hatte, dauerte es sehr lange, bis die EAs entfernt wurden, aber bei dem Terminal ohne offene Positionen wurden alle 4 EAs sofort entfernt. Der überarbeitete Code wird unten separat veröffentlicht.