Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4776
Beiträge: 42458
Benutzer: 7.141
Aktive Benutzer: 136
Links: 83
Wir begrüßen unseren neuesten Benutzer: elfriede
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 6 Stunden
- elfriede
vor 5 Tagen
- renkotrade
vor 2 Wochen
- Evimeri
vor 2 Wochen
- T.Rader
vor 2 Wochen
- qdjack

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 20
Gesamt: 21
Team: 0
Team:  
Benutzer:  traderdoc
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Jun 2021
Beiträge: 24
droyo33 befindet sich auf einem aufstrebenden Ast
Standard 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
Angehängte Grafiken
Dateityp: png Schleife.PNG (13,9 KB, 4x aufgerufen)
Dateityp: png Positionen.PNG (11,9 KB, 1x aufgerufen)
Dateityp: png Geschlossene Orders.PNG (10,2 KB, 1x aufgerufen)
Mit Zitat antworten
  #2 (permalink)  
Alt vor 4 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.602
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Jun 2021
Beiträge: 24
droyo33 befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #4 (permalink)  
Alt vor 4 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.602
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #5 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Jun 2021
Beiträge: 24
droyo33 befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für die Antwort traderdoc, schätze ich sehr!
Mit Zitat antworten
  #6 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Jun 2021
Beiträge: 24
droyo33 befindet sich auf einem aufstrebenden Ast
Standard

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;
}
Mit Zitat antworten
  #7 (permalink)  
Alt vor 4 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.602
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #8 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Jun 2021
Beiträge: 24
droyo33 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
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...
Mit Zitat antworten
  #9 (permalink)  
Alt vor 4 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.602
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #10 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Jun 2021
Beiträge: 24
droyo33 befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank traderdoc!
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2021 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------