|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Schleife schließt nicht alle Positionen
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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); for (cnt = 0; cnt < i; cnt ++) { if (OrderSymbol() == WP[cnt]) { ... } }
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|