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 |
Dann setze mal statt Deiner for-Schleife die ein:
for (i = OrdersTotal()-1; i >= 0; i--) traderdoc |
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 |
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 |
Vielen Dank für die Antwort traderdoc, schätze ich sehr!
|
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; } |
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 |
Zitat:
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... |
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); |
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