Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Schleife schließt nicht alle Positionen (http://www.expert-advisor.com/forum/showthread.php?t=7104)

droyo33 28.10.21 15:16

Schleife schließt nicht alle Positionen
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo Zusammen,

ich habe folgendes Problem und zwar schließt mein EA in der Schleife (siehe Bilder) nicht alle Positionen eines Paares...
Habe hier zum Testen versucht ab 4 Positionen alle Positionen eines Paares zu schließen, leider läuft er komischerweise immer nur 2x durch und hört dann auf. Ich weiß leider überhaupt nicht wieso...

Kann mir jemand beim Verstädnis helfen?

Vielen Dank!

MFG Dennis

traderdoc 28.10.21 15:28

Dann setze mal statt Deiner for-Schleife die ein:

for (i = OrdersTotal()-1; i >= 0; i--)

traderdoc

droyo33 28.10.21 16:21

Danke ich denke es funktioniert.
Was genau ist jetzt aber der unterschied zwischen den Beiden Schleifen?
An sich werden doch alle orders durchgegangen, egal ob vorwärts oder rückwärts.

Komischerweise funktionioter die Schleife rückwärts ebenfalls nicht, wenn ich
ordersTotal() <-- meine eigene Funktion benutzte.
Es ist echt sehr suspekt...

MFG Dennis

traderdoc 28.10.21 16:33

Durch die for-Schleife werden beim Vorwärtszählen bereits gelöschte Orders im nächsten Schleifendurchgang "nicht gebührend berücksichtigt".
Z.B. beträgt anfangs OrdersTotal() = 4, i ist z.B. 2, wenn die erste Order gelöscht wird und i gibt ja die Position in der Orderliste an.
Im nächsten Schleifendurchgang ist aber OrdersTotal() nur noch 3 (also i = 0 bis i = 2). Da i aber bereits 3 ist würde hier die letzte Order nicht mehr abgefragt werden, weil vorher die Schleife schon beendet ist.

Zählt man rückwärts, dann wird immer die aktuelle Zahl für OrdersTotal() benutzt, bis i < 0 wird.

traderdoc

droyo33 29.10.21 17:29

Vielen Dank für die Antwort traderdoc, schätze ich sehr!

droyo33 29.10.21 17:32

Habe noch eine Frage, für die ich eigentlich einen neuen Topic erstellen müsste, aber vllt geht es ja auch hier.

Ich möchte in meinem EA die Anzahl von Positionen eines ANDEREN Paares zählen.
Also z.B. ist der EA auf GBPNZD angewandt, ich habe aber auch 5 Positionen von GBPJPY offen, die ich im EA von GBPNZD zählen möchte.

Leider funktioniert dieser Code nicht..

int ordersTotal(){
count = 0;
for(i = 0 ; i < OrdersTotal(); i++){
if(OrderSelect(i, SELECT_BY_POS) == false) continue;
if(OrderSymbol() == Symbol()) continue;
for(int j = 0; j < OrdersTotal(); j++){
if(OrderSelect(j, SELECT_BY_POS) == false) continue;
if(OrderSymbol() == Symbol()) continue;
count++;
Print("andere Orders eines Paars ", count);
}
count = 0;
}

return count;
}

traderdoc 29.10.21 18:51

Ja klar, weil mit
if(OrderSymbol() == Symbol())
nur das Symbol abgefragt wird, auf welchem der EA auch gerade läuft.

Das sollte weiterhelfen:

if(OrderSymbol() == "GBPJPY")

traderdoc

droyo33 29.10.21 19:03

Zitat:

Zitat von traderdoc (Beitrag 45763)
Ja klar, weil mit
if(OrderSymbol() == Symbol())
nur das Symbol abgefragt wird, auf welchem der EA auch gerade läuft.

Das sollte weiterhelfen:

if(OrderSymbol() == "GBPJPY")

traderdoc

ja so würde es natürlich auch gehen aber ist ziemlich statisch.
Wenn ich 25 Paare trade und den EA auf jedes Paar anwende, dann sollte er auf jedem Paar schauen, ob auf anderen Paaren bereits 5 Positionen geöffnet sind...
if(OrderSymbol() == "GBPJPY")
if(OrderSymbol() == "GBPNZD")
if(OrderSymbol() == "GBPCHF")
usw. wäre sehr umständlich...

traderdoc 29.10.21 19:40

Prinzipiell geht das nicht anders.
Codevereinfachend könnte man die verwendeten Währungspaare vorher in ein String-Array (z.B. mit dem Namen WP) schreiben und dann den Indexzähler über die Anzahl der gespeicherten Paare laufen lassen, also in etwa so:

Code:

int i = ArraySize(WP);
for (cnt = 0; cnt < i; cnt ++) {
  if (OrderSymbol() == WP[cnt]) {
      ...
  }
}

traderdoc

droyo33 14.11.21 19:00

Vielen Dank traderdoc!


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:14 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum