|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
for loop - Erklärung für dummys
Hallo,
kann mir jemand die Funktionsweise von einem for-loop erklären, mit dem man die Anzahl der offenen Aufträge zählt? Ich verstehe nicht, warum es OrdersTotal()-1 heißt for(int b=OrdersTotal()-1;b>=0;b--) |
|
|||
Das heißt also für die Denklogik,
die erste gefundene Order hat den Wert 0 und nicht den Wert 1? |
|
||||
Die Orders werden in der Reihenfolge durchlaufen, in der sie im Markt platziert worden sind. Es werden auch PendingOrders mitgezählt!
Hier als Beispiel: Drei Order sind aktiv: OrdersTotal() ist 3 For-Schleife läuft von 2 bis 0 Eine Order ist aktiv: OrdersTotal() ist 1 For-Schleife läuft von 0 bis 0, also nur einmal durch! keine Order ist im Markt (auch keine PendingOrder!): OrdersTotal() ist 0 For-Schleife läuft nicht durch, da b=-1 und somit nicht >=0 ist! |
|
|||
D.h. in diesem Beispiel:
ich initiiere "orders" mit dem Wert 0 --> solange OrdersTotal <=0 ist, erhöhe um 1. Bei dem nächsten Durchlauf wieder... also ist es eine Endlosschleife, oder? Was ich auch nicht verstehe, warum er mit der Formel mit im Comment nicht zählt wie viele Buy-Orders offen sind //___Offene Aufträge zählen___ int buyCount=0, sellCount=0, totalCount=buyCount+sellCount; for(int orders=0; orders<=OrdersTotal()-1;orders++) { if (OrderSelect(orders,SELECT_BY_TICKET)==true) if (OrderSymbol()==_Symbol) if (OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY) buyCount++; else if(OrderType()==OP_SELL) sellCount++; } } Comment("Aufträge: ", buyCount); |
|
||||
Du solltest dich allgemein erstmal vielleicht mit C-Programmierung beschäftigen, also ein C-Buch kaufen und durchlesen.
Dann wird das auch mit der For-Schleife kein Problem mehr sein. Außerdem hast du hier jetzt eine andere For-Schleife genommen, welche eben hochzählt und nicht runterzählt. Die Schleifenbedingung ist bei diesem Beispiel "orders<=OrdersTotal()-1". In dem ersten Fall war es "b>=0". Bleib also am besten erstmal bei einer Variante und versuche diese richtig zu verstehen, Gruß Timo |
|
|||
Zitat:
Hast Du also 6 Werte, dann wird so gezählt: Zählnummer 0 = 1. Wert Zählnummer 1 = 2. Wert Zählnummer 2 = 3. Wert Zählnummer 3 = 4. Wert Zählnummer 4 = 5. Wert Zählnummer 5 = 6. Wert Willst Du also alle Werte in einer Schleife abfragen, dann beginnst Du bei einer "Rückwärtsschleife" bei dem letzten Wert, das ist hier der 6. Wert und der hat eine Zählnummer 5 (nämlich genau 6-1) und zählst runter bis einschließlich 0. Bei einer "Vorwärtsschleife" beginnst Du beim 1. Wert, der hat die Zählnummer 0 und zählst rauf bis zum 6. Wert mit der Zählnummer 5. AVT |
|
|||
Zitat:
Code:
//___Offene Aufträge zählen___ int buyCount=0, sellCount=0, totalCount=0; //KennenWirNochNicht for(int orders=0; orders<=OrdersTotal()-1;orders++) { if (OrderSelect(orders,SELECT_BY_TICKET)==true) if (OrderSymbol()==_Symbol) if (OrderMagicNumber()==MagicNumber) { if(OrderType()==OP_BUY) buyCount++; else if(OrderType()==OP_SELL) sellCount++; } } totalCount=buyCount+sellCount; //NunAlleGefundenenAddieren Comment("Aufträge: ", IntegerToString(totalCount)); //UndAnzeigen |
|
|||
Und auch dieser wird nicht richtig funktionieren, weil bei
OrderSelect die falschen Parameter benutzt werden. orders steht für die Position von 0 bis OrdrrsTotal() -1 und nicht für die Ticketnummer. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
for loop |
|
|