Fehler, Irrtümer, Fragen - Seite 438

 
joo:
Vielleicht wirkt sich das bloße Vorhandensein von Sleep (im Vergleich zu seinem Fehlen) im Code irgendwie auf die Gesamtausführungszeit aus, aber die Tatsache, dass Sleep im Tester nicht zählt - das ist sicher.
Nun, ich bin hier kein Experte... Eine halbe Minute Verzögerung bei der Verarbeitung der Funktion Sleep() mit einem negativen Argument und der Verlust von 17 Testtagen - das sind die Fakten.
 

Der Code legt das Terminal auf:

   MqlRates s1[];

   int count=TerminalInfoInteger(TERMINAL_MAXBARS);
   int s1_copied=CopyRates(Symbol(),Period(),0,count,s1);
   if(s1_copied<=0)
      Print("Ошибка копирования ценовых данных ",GetLastError());
   else Print("Скопировано ",ArraySize(s1)," баров");

   Comment(ArrayMaximum(s1,0,WHOLE_ARRAY));

   ArrayFree(s1);

Was ist der Grund dafür?

 
Graff:

Der Code legt das Terminal auf:

Was ist der Grund dafür?

Für den Anfang:
 int count=TerminalInfoInteger(TERMINAL_MAXBARS);
 Print("count=",count);

Ist das Terminal nicht auf Unlim eingestellt?

 
uncleVic:
Für den Anfang:

Steht Unlim nicht in den Terminaleinstellungen?


max bars ist auf 5000 eingestellt. Kann dieser Wert verringert werden?
 
Graff:
Die maximale Anzahl der Balken beträgt 5000. Kann dieser Wert verringert werden?

Ich glaube nicht, dass Sie weniger tun können (ich bin mir nicht sicher).

Was zeigt Print(count) an?

 
uncleVic:

Ich glaube nicht, dass weniger möglich ist (ich bin mir nicht sicher).

Und was gibt Print(count) zurück?

2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) 5000 Balken kopiert
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) count=5000

in Kommentar -1

Ich habe es mit einem anderen Symbol versucht, aber es wurde nicht im Kommentar angezeigt -1

HINWEIS: Nach ein paar Sekunden einfrieren. Ich beginne den Code mit int OnInit()

 
joo:
Ja, und es funktioniert im Testgerät, weil Sleep im Testgerät ignoriert wird.

Der Schlaf wird im Sleep-Tester vollständig und genau emuliert.

In diesem Beispiel kam es aufgrund eines arithmetischen Überlaufs bei der Verarbeitung ganzer Zahlen zu einer Wartezeit von nur 17,5 Tagen. Der Prüfer hat genau so lange gewartet.

Es liegt also kein Fehler im Prüfgerät oder in der MQL5-Ausführungsumgebung vor, sondern ein offensichtlicher Fehler des Programmierers.

 

Renat:

Das heißt, es liegt kein Fehler des Prüfers oder der MQL5-Ausführungsumgebung vor, sondern ein eindeutiger Fehler des Programmierers.

Das ist ganz klar.

Renat:

Der Schlaf wird im Testgerät vollständig und ziemlich genau emuliert.

Aufgrund des arithmetischen Überlaufs bei der Arbeit mit Ganzzahlwerten beträgt die Wartezeit 17,5 Tage. Genau so lange hat der Prüfer gewartet.

Hmm, da haben Sie es. Und ich dachte fälschlicherweise, dass Sleep einfach ignoriert wurde.

Wenn ich also zum Beispiel im Expert Advisor im Testmodus Sleep (3 Monate) einstelle, würde der Tester einfach die Historie für 3 Monate vorspulen? - Das ist großartig.

 
Ja, es wird zurückgespult. Die Funktion ist nur auf 49 Tage begrenzt, bis der Millisekundenzähler voll ist.

Während der Wartezeit setzt das Testgerät die vollständige Emulation der Handelsumgebung fort, einschließlich der Verarbeitung aller zuvor erteilten Aufträge. Der Tester in MT5 ist sehr detailliert.
 
Graff:
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) 5000 Balken kopiert
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) count=5000

in Kommentar -1

Ich habe es mit einem anderen Symbol versucht, aber es wurde nicht im Kommentar angezeigt -1

HINWEIS: Nach ein paar Sekunden einfrieren. Ich werde den Code von int OnInit() ausführen

Ja. Wir haben den Elefanten gar nicht bemerkt.

Irgendetwas macht mich an dieser Zeile sehr stutzig:

   Comment(ArrayMaximum(s1,0,WHOLE_ARRAY));

ArrayMaximum

sucht nach dem maximalen Element in einem eindimensionalen numerischen Array.

intArrayMaximum(
doppeltarray[],// zu durchsuchendes Array
intstart=0//von welchem Index aus wir die Suche starten
intcount=WHOLE_ARRAY,// Anzahl der zu prüfenden Indizes
);


und in unserem Fall:

   MqlRates s1[];

Ich denke, der Compiler sollte dies nicht übergehen. Was haben Sie? Nicht einmal eine Warnung? Wenn nicht, stellen Sie eine Anfrage an den Service Desk. Ist das okay?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.