Einzelnen Beitrag anzeigen
  #28 (permalink)  
Alt 17.12.15
traderdoc traderdoc ist offline
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TLO Trader Beitrag anzeigen
Die Logik erschliesst sich eigentlich keinem, da habe ich auch lange drüber gebrütet! Im Prinzip zählt man vom (Höchstwert -1) auf 0 runter, man könnte natürlich (was logischer wäre) vom Höchstwert auf 1 runterzählen. Ich habe aber noch nie festgestellt, das da was nicht funktioniert. Im Prinzip geht es immer nur darum, ob Du von unten nach oben oder von oben nach unten zählst.
Die Logik erschließt sich jedem, der sauber programmiert. Denn ein Array mit der Arraygröße 10 wird nun mal von 0 bis 9 (also 10 - 1) indiziert. Da die Orders in der Historie auch in einem Array liegen, welches von 0 bis OrdersHistorieTotal()-1 geht, schreibt man rückwärtszählend eben dann:
for (int i = OrdersHistoryTotal()-1; i >= 0; i--)
oder vorwärtszählend:
for (int i = 0; i < OrdersHistoryTotal(); i++) {

Definitv muß das Feld mit dem Index 0 mit in die for-Schleife, sonst fehlt eine Order!
Ich spreche hier wieder vom sauberen Programmieren, weil der Zugriff auf das Element mit dem Index 10, bei einem selbst definierten Array mit der Arraygröße 10, unweigerlich zu einer Fehlermeldung: "array out of range in ..." führt, mit der Folge, dass der EA nicht mehr weiterarbeitet, solange dieser Fehler im Code enthalten ist.
MetaQuotes war beim Überschreiten des Index im Falle des OrdersHistoryTotal() so gnädig, den Fehler vorher abzufangen!

Und damit sich u.a. @Adlerauge, den sauberen Zugriff auf ein Array von vornherein angewöhnt, steht da eben:
for (int i = OrdersHistoryTotal()-1; i >= 0; i--)

Das sollte aber nun zur Erklärung reichen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.