Strategietest Error

FrLeLa
83
FrLeLa  

2021.06.09 09:57:51.551    MetaTester 5 started on 127.0.0.1:3000
2021.06.09 09:57:51.552    initialization finished
2021.06.09 09:57:51.737    login (build 2940)
2021.06.09 09:57:51.745    4372 bytes of account info loaded
2021.06.09 09:57:51.745    1470 bytes of tester parameters loaded
2021.06.09 09:57:51.745    5820 bytes of input parameters loaded
2021.06.09 09:57:51.751    18959 bytes of symbols list loaded (3852 symbols)
2021.06.09 09:57:51.751    expert file added: Experts\Test EA-1manuel.ex5. 34689 bytes loaded
2021.06.09 09:57:51.764    4868 Mb available, 60 blocks set for ticks generating
2021.06.09 09:57:51.764    initial deposit 10000.00 USD, leverage 1:25
2021.06.09 09:57:51.765    successfully initialized
2021.06.09 09:57:51.765    55 Kb of total initialization data received
2021.06.09 09:57:51.765    Intel Core i3-6100  @ 3.70GHz, 8081 MB
2021.06.09 09:57:51.818    EURUSD: symbol to be synchronized
2021.06.09 09:57:51.819    EURUSD: symbol synchronized, 3720 bytes of symbol info received
2021.06.09 09:57:51.819    EURUSD: history synchronization started
2021.06.09 09:57:51.821    EURUSD: load 27 bytes of history data to synchronize in 0:00:00.001
2021.06.09 09:57:51.821    EURUSD: history synchronized from 2015.01.02 to 2021.05.31
2021.06.09 09:57:51.922    EURUSD,M15: history cache allocated for 35065 bars and contains 30950 bars from 2020.01.02 03:00 to 2021.03.31 23:45
2021.06.09 09:57:51.922    EURUSD,M15: history begins from 2020.01.02 03:00
2021.06.09 09:57:51.923    EURUSD,M15 (AdmiralMarkets-Demo): every tick generating
2021.06.09 09:57:51.923    EURUSD,M15: testing of Experts\Test EA-1manuel.ex5 from 2021.04.01 00:00 to 2021.05.31 00:00 started with inputs:
2021.06.09 09:57:51.923      Lots=0.02
2021.06.09 09:57:51.923      TpPoints=100
2021.06.09 09:57:51.923      PartialClosePoints=50
2021.06.09 09:57:51.923      PartialCloseFactor=0.3
2021.06.09 09:57:51.923      SlPoints=100
2021.06.09 09:57:51.923      Magic=111
2021.06.09 09:57:51.923      Timeframe=0
2021.06.09 09:57:51.923      IND_MA=8
2021.06.09 09:57:51.923      IND_FRACTALS=0
2021.06.09 09:57:51.923      IND_AC=0
2021.06.09 09:57:51.923      IND_AO=0
2021.06.09 09:57:51.944    2021.04.01 00:00:00   OnInit > EA (re)start...
2021.06.09 09:57:52.047    2021.04.01 00:15:00   neuer Bar!
2021.06.09 09:57:52.047    2021.04.01 00:15:00   array out of range in 'Test EA-1manuel.mq5' (195,31)
2021.06.09 09:57:52.047    OnTick critical error

2021.06.09 09:57:52.051    EURUSD,M15: 115 ticks, 2 bars generated. Environment synchronized in 0:00:00.074. Test passed in 0:00:00.240 (including ticks preprocessing 0:00:00.078).
2021.06.09 09:57:52.051    EURUSD,M15: total time from login to stop testing 0:00:00.314 (including 0:00:00.074 for history data synchronization)
2021.06.09 09:57:52.051    271 Mb memory used including 2 Mb of history data, 64 Mb of tick data
2021.06.09 09:57:52.051    log file "C:\Users\Lasser Franz\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\logs\20210609.log" written
2021.06.09 09:57:52.052    test Experts\Test EA-1manuel.ex5 on EURUSD,M15 thread finished
2021.06.09 09:57:52.061    prepare for shutdown


Guten Tag, hier bin ich wieder mal mit einem - für mich - Riesenproblem.

Ich bin immer noch beim Versuch, einen EA zu schreiben und zum Laufen zu bringen.

Der Compiler gibt keinen Error aus, aber der Strategietest.

Die Fehlermeldung des Strategietest haber ich oben mit Schrifttarbe rot hervorgehoben, den Report und den EA habe ich als Datei angehängt.

Vielleicht kann mir jemand einen Tip geben?

Danke

Soconia UG
230
Werner Klehr  

Hallo und guten Morgen,

ich habe mir deinen EA kurz angeschaut und m.E. liegt das Problem darin, dass du in Zeile 195 auf das
Array mrate zugreifst, es aber in Zeile 175 lediglich als (leeres) Array deklarierst.
Weil du die Zeile 178 auskommentiert hast, werden dem Array keine Elemente zugewiesen. Also nimmst
du entweder die Kommentierung von Zeile 178 wieder herrraus oder du fügst dem Array über die Funktion
ArrayResize Elemente hinzu (vor Zeile 195)

Ich hoffe, ich kann dir damit helfen.

Viele Grüße

Carl Schreiber
Moderator
12359
Carl Schreiber  
FrLeLa:

2021.06.09 09:57:51.551    MetaTester 5 started on 127.0.0.1:3000
2021.06.09 09:57:51.552    initialization finished
2021.06.09 09:57:51.737    login (build 2940)
2021.06.09 09:57:51.745    4372 bytes of account info loaded
2021.06.09 09:57:51.745    1470 bytes of tester parameters loaded
2021.06.09 09:57:51.745    5820 bytes of input parameters loaded
2021.06.09 09:57:51.751    18959 bytes of symbols list loaded (3852 symbols)
2021.06.09 09:57:51.751    expert file added: Experts\Test EA-1manuel.ex5. 34689 bytes loaded
2021.06.09 09:57:51.764    4868 Mb available, 60 blocks set for ticks generating
2021.06.09 09:57:51.764    initial deposit 10000.00 USD, leverage 1:25
2021.06.09 09:57:51.765    successfully initialized
2021.06.09 09:57:51.765    55 Kb of total initialization data received
2021.06.09 09:57:51.765    Intel Core i3-6100  @ 3.70GHz, 8081 MB
2021.06.09 09:57:51.818    EURUSD: symbol to be synchronized
2021.06.09 09:57:51.819    EURUSD: symbol synchronized, 3720 bytes of symbol info received
2021.06.09 09:57:51.819    EURUSD: history synchronization started
2021.06.09 09:57:51.821    EURUSD: load 27 bytes of history data to synchronize in 0:00:00.001
2021.06.09 09:57:51.821    EURUSD: history synchronized from 2015.01.02 to 2021.05.31
2021.06.09 09:57:51.922    EURUSD,M15: history cache allocated for 35065 bars and contains 30950 bars from 2020.01.02 03:00 to 2021.03.31 23:45
2021.06.09 09:57:51.922    EURUSD,M15: history begins from 2020.01.02 03:00
2021.06.09 09:57:51.923    EURUSD,M15 (AdmiralMarkets-Demo): every tick generating
2021.06.09 09:57:51.923    EURUSD,M15: testing of Experts\Test EA-1manuel.ex5 from 2021.04.01 00:00 to 2021.05.31 00:00 started with inputs:
2021.06.09 09:57:51.923      Lots=0.02
2021.06.09 09:57:51.923      TpPoints=100
2021.06.09 09:57:51.923      PartialClosePoints=50
2021.06.09 09:57:51.923      PartialCloseFactor=0.3
2021.06.09 09:57:51.923      SlPoints=100
2021.06.09 09:57:51.923      Magic=111
2021.06.09 09:57:51.923      Timeframe=0
2021.06.09 09:57:51.923      IND_MA=8
2021.06.09 09:57:51.923      IND_FRACTALS=0
2021.06.09 09:57:51.923      IND_AC=0
2021.06.09 09:57:51.923      IND_AO=0
2021.06.09 09:57:51.944    2021.04.01 00:00:00   OnInit > EA (re)start...
2021.06.09 09:57:52.047    2021.04.01 00:15:00   neuer Bar!
2021.06.09 09:57:52.047    2021.04.01 00:15:00   array out of range in 'Test EA-1manuel.mq5' (195,31)
2021.06.09 09:57:52.047    OnTick critical error

2021.06.09 09:57:52.051    EURUSD,M15: 115 ticks, 2 bars generated. Environment synchronized in 0:00:00.074. Test passed in 0:00:00.240 (including ticks preprocessing 0:00:00.078).
2021.06.09 09:57:52.051    EURUSD,M15: total time from login to stop testing 0:00:00.314 (including 0:00:00.074 for history data synchronization)
2021.06.09 09:57:52.051    271 Mb memory used including 2 Mb of history data, 64 Mb of tick data
2021.06.09 09:57:52.051    log file "C:\Users\Lasser Franz\AppData\Roaming\MetaQuotes\Tester\D0E8209F77C8CF37AD8BF550E51FF075\Agent-127.0.0.1-3000\logs\20210609.log" written
2021.06.09 09:57:52.052    test Experts\Test EA-1manuel.ex5 on EURUSD,M15 thread finished
2021.06.09 09:57:52.061    prepare for shutdown


Guten Tag, hier bin ich wieder mal mit einem - für mich - Riesenproblem.

Ich bin immer noch beim Versuch, einen EA zu schreiben und zum Laufen zu bringen.

Der Compiler gibt keinen Error aus, aber der Strategietest.

Die Fehlermeldung des Strategietest haber ich oben mit Schrifttarbe rot hervorgehoben, den Report und den EA habe ich als Datei angehängt.

Vielleicht kann mir jemand einen Tip geben?

Danke

Was ist das Problem?

In der Zeile 195 gibt es ein Array auf das mit einem zu großen (=größer als seine Größe) oder zu kleinen (-1?) zugegriffen wird.

Also mit dem Debugger den Index und die Array-Größe überprüfen. Dynamischen Array muss immer die benötigte Größe mit ArrayResize() zugewiesen werden.

Im Editor Kursor auf die Funktion stellen F1 drücken und das Beispiel studieren.

FrLeLa
83
FrLeLa  
Werner Klehr:

Hallo und guten Morgen,

ich habe mir deinen EA kurz angeschaut und m.E. liegt das Problem darin, dass du in Zeile 195 auf das
Array mrate zugreifst, es aber in Zeile 175 lediglich als (leeres) Array deklarierst.
Weil du die Zeile 178 auskommentiert hast, werden dem Array keine Elemente zugewiesen. Also nimmst
du entweder die Kommentierung von Zeile 178 wieder herrraus oder du fügst dem Array über die Funktion
ArrayResize Elemente hinzu (vor Zeile 195)

Ich hoffe, ich kann dir damit helfen.

Viele Grüße

danke für den Hinweis, ich hoffe ichkomme damit klar.

Die Zeile 178 habe ich auskommentiert, weil ich sonst auf diesen Eintrag errors bekomme. Das mach ich immer so, wenn der compiler schreit und versuch dann was anderes.

hat leider diesmal halt nicht geklappt.

FrLeLa
83
FrLeLa  
Carl Schreiber:

Was ist das Problem?

In der Zeile 195 gibt es ein Array auf das mit einem zu großen (=größer als seine Größe) oder zu kleinen (-1?) zugegriffen wird.

Also mit dem Debugger den Index und die Array-Größe überprüfen. Dynamischen Array muss immer die benötigte Größe mit ArrayResize() zugewiesen werden.

Im Editor Kursor auf die Funktion stellen F1 drücken und das Beispiel studieren.

Das Problem besteht darin, dass ich die Errormeldungen - jetz zumindest - nicht verstehe. Gibt es vielleicht in der Doku oder sonst wo einen Beitrag, der sich mit diesem Thema befasst?

 Danke für den Hinweis.

FrLeLa
83
FrLeLa  
FrLeLa:

danke für den Hinweis, ich hoffe ichkomme damit klar.

Die Zeile 178 habe ich auskommentiert, weil ich sonst auf diesen Eintrag errors bekomme. Das mach ich immer so, wenn der compiler schreit und versuch dann was anderes.

hat leider diesmal halt nicht geklappt.

Also die Zeile 178 wieder aktiv setzen, hilft nicht.

Bitte an welche Position gehört das ArrayResize eingefügt?

Danke

FrLeLa
83
FrLeLa  
FrLeLa:
Das Problem besteht darin, dass ich die Errormeldungen - jetz zumindest - nicht verstehe. Gibt es vielleicht in der Doku oder sonst wo einen Beitrag, der sich mit diesem Thema befasst?

 Danke für den Hinweis.

Hinweis

Die Funktion kann nur auf dynamischen Arrays angewendet werden. Es sollte beachtet werden, dass die Größe dynamischer Arrays, die als Indikatorpuffer mit der Funktion SetIndexBuffer() definiert wurden, nicht verändert werden können. Für Indikatorpuffer werden alle Änderungen der Größe von Laufzeit-Subsystem des Terminals durchgeführt.

Die Gesamtzahl der Elemente im Array darf nicht größer als 2147483647 sein.

Bei häufigen Speicherveränderungen wird empfohlen, den dritten Parameter zu verwenden, der eine Reserve festlegt, um die Anzahl der physikalischen Speicherzuweisungen zu reduzieren. Alle nachfolgenden Aufrufe der Funktion ArrayResize führen dann nicht mehr zu einer neuen physikalischer Speicherzuweisung, in diesen Fällen ändert sich nur die Größe der ersten Dimension des Arrays im reservierten Speicherbereich. Es sei daran erinnert, dass der dritte Parameter nur dann verwendet wird, wenn die physikalische Speicherzuweisung stattfindet, zum Beispiel:

ArrayResize(arr,1000,1000);
for(int i=1;i<3000;i++)
   ArrayResize(arr,i,1000);

In diesem Fall gibt es nur zwei Speicherzuweisungen, einmal vor der Schleife mit 3000 Iterationen (dabei wird die Dimension des Arrays auf 1000 festgelegt) und das zweite Mal wenn i gleich 2000 ist. Wenn der dritte Parameter weggelassen worden wäre, würden es 2000 einzelne physikalische Speicherzuweisungen geben, welches die Ausführung des Programms verzögern würde.

Leider, ich versteh oft nicht nur die Fehler nicht, sondern auch die Erklärungen der Hilfe.

Im mrate[] sind ja Preisdaten gespeichert und diese brauche ich für meine Einstiege. Und zwar OHLC - Werte für bis zu max 5 Bars. Wie muss da der Code geschreiben sein?

Danke

FrLeLa
83
FrLeLa  
FrLeLa:

Also die Zeile 178 wieder aktiv setzen, hilft nicht.

Bitte an welche Position gehört das ArrayResize eingefügt?

Danke

      ArrayResize(mrate[],1000,1000)

Also das hab ich mal als Zeile 185 hinzugefügt; da kommen dann gleich mal 6 Fehler vom Compiler

']' - expression expected    Test EA-1manuel.mq5    185    25
'mrate' - array required    Test EA-1manuel.mq5    185    19
'BuyCondition1' - unexpected token    Test EA-1manuel.mq5    197    9
'=' - unexpected token    Test EA-1manuel.mq5    197    23
'>' - some operator expected    Test EA-1manuel.mq5    197    40
'BuyCondition1' - undeclared identifier    Test EA-1manuel.mq5    220    14
6 errors, 0 warnings        7    1

Was mach ich falsch?

Soconia UG
230
Werner Klehr  

Hallo,

du musst beim ArrayResize Aufruf die eckigen Klammern vom ersten Parameter weglassen - also:

ArrayResize(mrate, 1000, 1000);

Der Aufruf sollte zwischen der Deklaration und dem Zugriff auf das Array stehen - der Einfachheit halber,
könntest du ArrayResize direkt hinter die Deklaration setzen.


Viel Grüße

Carl Schreiber
Moderator
12359
Carl Schreiber  

Dir fehlen die Grundlagen der Programmierung, da musst Du anfangen. Mal dies und mal das fragen und dann doch nicht ganz verstehen ist ein sehr umständlicher Weg:

Bezüglich der Arrays empfehle ich Dir dies:

https://www.mql5.com/de/articles/567   Grundlagen der Programmierung in MQL5: Arrays
https://www.mql5.com/de/articles/1334  Das MQL5-Kochbuch: Implementierung eines Assoziativen Arrays oder eines Lexikons für raschen Datenzugriff

Außerdem gibt es viele Beispiele in der Referenz - nutze sie!

Grundlagen der Programmierung in MQL5: Arrays
Grundlagen der Programmierung in MQL5: Arrays
  • www.mql5.com
Arrays sind zusammen mit Variablen und Funktionen ein wesentlicher Bestandteil so gut wie jeder Programmiersprache. Dieser Beitrag dürfte vor allem für Neueinsteiger in der Programmierung mit MQL5 interessant sein, bietet erfahrenen Programmierern aber gleichzeitig eine gute Gelegenheit, ihr Wissen zusammenzufassen und zu systematisieren.
FrLeLa
83
FrLeLa  
Werner Klehr:

Hallo,

du musst beim ArrayResize Aufruf die eckigen Klammern vom ersten Parameter weglassen - also:

ArrayResize(mrate, 1000, 1000);

Der Aufruf sollte zwischen der Deklaration und dem Zugriff auf das Array stehen - der Einfachheit halber,
könntest du ArrayResize direkt hinter die Deklaration setzen.


Viel Grüße

Danke, das hat geholfen; jetzt hab ich den EA mal soweit, dass er funktioniert. Fehlt noch einiges an Zusatzmodulen, um vom Ergebnis positiv zu werden.