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: 4536
Beiträge: 41163
Benutzer: 6.933
Aktive Benutzer: 231
Links: 80
Wir begrüßen unseren neuesten Benutzer: peterken
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 43 Minuten
- peterken
vor einem Tag
- traderotor
vor 3 Tagen
- Brummi
vor 5 Tagen
- Fussellien...
vor 5 Tagen
- ZHannes82

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 95
Gesamt: 96
Team: 0
Team:  
Benutzer:  Trader12345
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Aug 2020
Beiträge: 16
MarkusWilhelm89 befindet sich auf einem aufstrebenden Ast
Standard 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--)
Mit Zitat antworten
  #2 (permalink)  
Alt vor 4 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 109
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Der Rückgabewert von OrdersTotal() ist z.b. 1 wenn eine Order offen ist. In der For-Abfrage wird ja gecheckt ob b>=0 ist. Das ist somit gegeben sobald min. Eine Order im Markt ist. Da in vielen weiteren Anfragen (z.b. OrderSelect) die Abfrage der jeweiligen Order mit 0 beginnt, und nicht mit 1, wird hier direkt am Anfang -1 abgezogen. Die Liste der Orders rückwärts durchzugehen ist auch nötig, da sich sonst beim Schließen einer Order die Reihenfolge der nächsten ändert.
Gruß Timo
Mit Zitat antworten
  #3 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Aug 2020
Beiträge: 16
MarkusWilhelm89 befindet sich auf einem aufstrebenden Ast
Standard

Das heißt also für die Denklogik,
die erste gefundene Order hat den Wert 0 und nicht den Wert 1?
Mit Zitat antworten
  #4 (permalink)  
Alt vor 4 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 109
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

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!
Mit Zitat antworten
  #5 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Aug 2020
Beiträge: 16
MarkusWilhelm89 befindet sich auf einem aufstrebenden Ast
Standard

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);
Mit Zitat antworten
  #6 (permalink)  
Alt vor 4 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 109
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #7 (permalink)  
Alt vor 4 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 434
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MarkusWilhelm89 Beitrag anzeigen
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--)
In vielen Sprachen, wie hier in MQL auch, beginnt eine Zählung mit 0, das heißt der 1. Wert hat die Zählnummer 0 - und nicht wie bei uns im Leben die Nummer 1.
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
Mit Zitat antworten
  #8 (permalink)  
Alt vor 4 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 434
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MarkusWilhelm89 Beitrag anzeigen
Was ich auch nicht verstehe, warum er mit der Formel mit im Comment nicht zählt wie viele Buy-Orders offen sind
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
AVT
Mit Zitat antworten
  #9 (permalink)  
Alt vor 4 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.415
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #10 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Aug 2020
Beiträge: 16
MarkusWilhelm89 befindet sich auf einem aufstrebenden Ast
Standard

Jetzt hab ich's kapiert...
Klar, es muss heißten:
if (OrderSelect(OrderTicket(),SELECT_BY_TICKET)==true)

Danke für die Hilfe :-)
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
for loop

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 +2. Es ist jetzt 16:19 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2020 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.
-----------------------------------------------------------------------------------------------------------------------------