Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Array Out of range (http://www.expert-advisor.com/forum/showthread.php?t=4547)

1stdiablo 03.11.15 00:13

Array Out of range
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich habe heute versucht, mit Arrays zu arbeiten, was mir nicht so recht gelingen will.

Ich möchte aus dem Indikator "ZigZag" die letzten 5 Hochs und Tiefs ermitteln und diese in Hoch[p] und Tief[p] speichern.
Ob die Berechnung dahinter bereits richtig ist, weiß ich noch nicht. Mir geht es erst mal um den Fehler in

while (HTa[p]==0)

Was stimmt daran nicht?

Wenn ich statt "[p]" eine "1" einsetze und ohne Array arbeite, funktioniert der EA.

Folgender Fehler erscheint:
2015.11.03 00:00:36.787 2015.10.01 08:00 ArrayTest DAX30,M1: array out of range in 'ArrayTest.mq4' (42,11)

Blickt das Jemand?

traderdoc 03.11.15 08:08

1. Die Arrays sollten nicht in der Funktion OnTick() deklariert werden, sondern in OnInit() oder sogar vorher in den globalen Variablen.
2. Wenn für die Arrays vor dem Aufrufen keine Dimension festgelegt wird, wird das Zugreifen auf das Array ins Leere laufen und diesen Fehler produzieren.
D.h. entweder bei der Deklaration die Dimension festlegen, also z.B. Array[10] oder im Verlauf des Befüllens des Arrays die Dimension dynamisch der Anzahl der Arrayfelder anpassen.
Das geht mittels:
int size = ArraySize(Array);
size++;
ArrayResize(Array, size);
Array[size-1] = Wert; //size-1, weil die Felder von Index 0 bis sie-1 laufen, die Dimension size beträgt.

traderdoc

yytrader 03.11.15 20:20

Hallo traderdoc,

Zitat:

Die Arrays sollten nicht in der Funktion OnTick() deklariert werden, sondern in OnInit() oder sogar vorher in den globalen Variablen.
Gibt es dafür einen besonderen Grund?

Gruß

yytrader

traderdoc 03.11.15 20:50

1. Ich muß mich korrigieren: Die Arrays werden nur global deklariert. (leider kann ich es nicht mehr im Originalpost ändern)
2. Ja, warum sollten die Arrays mit jedem Tick neu deklariert werden?
3. Wäre der Geltungsbereich dieser Arrays nur auf die Funktion OnTick() beschränkt. (Daher auch meine Korrektur bzgl. der falschen Aussage der Deklaration in OnInit()).

traderdoc

1stdiablo 06.11.15 22:16

Hallo,
Danke für die Hilfe. Ich habe es dennoch nicht hinbekommen. Da ich eh nur 3 Werte habe, habe ich mir diese einzeln errechnet.


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:10 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum