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: 4973
Beiträge: 43252
Benutzer: 7.220
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 11 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 454
Gesamt: 454
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 28.08.20
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 64
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--)
  #2 (permalink)  
Alt 28.08.20
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
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
  #3 (permalink)  
Alt 28.08.20
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 64
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?
  #4 (permalink)  
Alt 28.08.20
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
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!
  #5 (permalink)  
Alt 28.08.20
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 64
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);
  #6 (permalink)  
Alt 28.08.20
Benutzerbild von Indikator-Trading
Premium Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 345
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
  #7 (permalink)  
Alt 28.08.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
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
  #8 (permalink)  
Alt 28.08.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
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
  #9 (permalink)  
Alt 28.08.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #10 (permalink)  
Alt 30.08.20
Mitglied
 
Registriert seit: Aug 2020
Beiträge: 64
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 :-)
Thema geschlossen

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 +1. Es ist jetzt 09:15 Uhr.





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