Fehler, Irrtümer, Fragen - Seite 504

 
Vigor:

Gibt es bei der Code-Optimierung Beschränkungen für die Größe des Objektbaums?

Ich erhalte einen "Baumoptimierungsfehler" in der Kompilierungsphase, wenn die Anzahl der Objekte erhöht wird.

P.S. Im Debug-Modus kompiliert er.

Können Sie ein Beispiel für den Quellcode an das Servicedesk-Ticket anhängen? Der Code wird nach der Überprüfung entfernt.

Höchstwahrscheinlich liegt es an den langen Funktionen, aber Sie sollten uns den Code schicken, damit wir ihn selbst überprüfen und den Fehler beheben können. Es wird vielen Händlern helfen.

 
Valmars:

Erstens: Welchen Sinn hat es, den Verlauf im Prüfgerät zwangsweise herunterzuladen? Der Tester selbst lädt die notwendige und zugängliche Historie vom Server herunter, wenn es im Code oder bei Handelsoperationen Anfragen nach den notwendigen Symbolen gibt. Da Ihr Code leer ist, braucht der Prüfer keine Ticks für andere Symbole zu simulieren, außer für das Symbol, an dem die Prüfung durchgeführt wird. Und das ist, was der Prüfer seine Geschichte heruntergeladen. Und da es keine Historie (im Tester) gibt, erhalten wir 0.

Zweitens ist es selbst dann, wenn Sie den Code durch den Aufruf der gesamten Historie für alle Symbole erweitern, unwahrscheinlich, dass das Herunterladen der gesamten verfügbaren Historie für alle Symbole erfolgreich sein wird, und irgendwo wird ein Fehler auftreten. Da das Prüfgerät auf der Basis von Terminal-Zitaten arbeitet, muss es den erforderlichen Verlauf herunterladen.
Die Sache ist, dass, wenn der Tester versucht, Ticks für andere Symbole zu simulieren, das Protokoll beginnt, mit Meldungen wie enthält 0 M1 Datensätze zu überschwemmen, weil es keine Geschichte an diesem Datum und das Protokoll wächst zu unvorstellbaren Volumina, und um diese Fehler zu vermeiden, muss ich das Startdatum der Geschichte wissen, und wenn angefordert, die Funktion SeriesInfoInteger(Symbol,0,SERIES_SERVER_FIRSTDATE) gibt 0
 

Können Sie mir sagen, was die Werte in der Spalte Ergebnis bedeuten, wenn die Zielfunktion Balance + min Drawdown ausgewählt ist?

 
tol64:

Können Sie mir sagen, was die Werte in der Spalte Ergebnis bedeuten, wenn die Zielfunktion Balance + min Drawdown ausgewählt ist?

Wenn Sie sich die Hilfe im Terminal ansehen, würden viele Fragen verschwinden, weil alles dort geschrieben steht

Optimierungskriterium

Ein Optimierungskriterium ist ein bestimmter Faktor, dessen Wert die Qualität des geprüften Satzes von Eingangsparametern definiert. Je höher der Wert des Optimierungskriteriums ist, desto besser wird das Prüfergebnis mit dem gegebenen Parametersatz bewertet. Dieser Parameter kann auf der Registerkarte "Einstellungen" rechts neben dem Feld "Optimierung" ausgewählt werden.

Das Optimierungskriterium ist nur für den genetischen Algorithmus erforderlich.

Die folgenden Optimierungskriterien sind verfügbar:

  • Maximaler Saldo - der Optimierungsindikator ist der maximale Saldowert;
  • Saldo + maximale Rentabilität - der maximale Wert des Saldos multipliziert mit der Rentabilität ist das optimale Kriterium;
  • Saldo +Maximale erwartete Auszahlung - das Produkt aus Saldo und erwarteter Auszahlung wird als Indikator betrachtet;
  • Saldo + Mindestdrawdown - Drawdown-Level (100% - Drawdown)*Der Saldo wird neben dem Saldowert berücksichtigt;
  • Saldo + maximaler Rückgewinnungsfaktor - der Wert ist das Produkt aus Saldo und Rückgewinnungsfaktor;
  • Saldo + maximaleSharpe Ratio - der Index ist das Produkt aus dem Saldo und der Sharpe Ratio;
  • Benutzerdefiniertes Optimierungskriterium - wenn Sie diese Option wählen, wird der Wert von OnTester() im Expert Advisor als Optimierungskriterium betrachtet. Mit dieser Option kann ein Benutzer einen beliebigen benutzerdefinierten Indikator für die Optimierung verwenden.


 
sergey1294:

Ich danke Ihnen. )) Aus irgendeinem Grund dachte ich an das Kriterium des Mindestdrawdowns und nicht an Saldo + Mindestdrawdown. ))

 
sergey1294:
Die Sache ist, dass, wenn der Tester versucht, Ticks für andere Symbole zu simulieren, das Protokoll beginnt, mit Meldungen wie enthält 0 M1 Datensätze gefüllt werden, weil es keine Geschichte an diesem Datum und das Protokoll wächst zu unvorstellbaren Mengen und ich muss das Datum der Geschichte wissen, um diese Fehler zu vermeiden, aber wenn Sie die Funktion SeriesInfoInteger(Symbol,0,SERIES_SERVER_FIRSTDATE) gibt 0

Soweit ich weiß, erstellt der Tester vor dem Testen eine Marktumgebung für das angeschlossene Konto (das zuletzt angeschlossene, wenn keine Verbindung zum Server besteht), überprüft die Synchronisierung der Daten mit dem Server (wiederum, wenn eine Verbindung besteht), lädt die fehlenden Kurse vom Startdatum des Tests hoch (wenn eine Verbindung besteht), erstellt eine Testsequenz von Kursen für alle erforderlichen Symbole und beginnt erst dann mit dem Testen. Was ist, wenn es ihm nicht gelingt, den erforderlichen Verlauf herunterzuladen (z. B. weil es keinen Verlauf auf dem Server gibt oder weil keine Verbindung mit dem Server besteht)? ? Es sagt Ihnen ehrlich. Nein, das müssen Sie nicht.

Als Nächstes wollen Sie das Anfangsdatum des Verlaufs auf dem Server (im Tester) ermitteln. Es scheint, dass diese Eigenschaft nicht in der Marktumgebung des Testers enthalten ist, obwohl sie vom Server gespeichert worden sein könnte. Handelt es sich um einen Fehler? Ich glaube nicht. Nach Beginn der Prüfung kann der Prüfer nicht mehr auf den Server zugreifen (über das Terminal), um die benötigten Zitate herunterzuladen. Alles, was vorhanden ist, wird vom Prüfer bereits in der Initialisierungsphase des Prüfprozesses geladen und der Prüfablauf ist bereits festgelegt und kann nicht mehr verändert werden. Anstelle von SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE) können Sie in Ihrem Fall meiner Meinung nach SeriesInfoInteger(symbol,0,SERIES_FIRSTDATE) verwenden. sollte im Tester funktionieren.

 
Renat:

Können Sie ein Beispiel für den Quellcode an das Servicedesk-Ticket anhängen? Der Code wird nach der Überprüfung entfernt.

Höchstwahrscheinlich handelt es sich um lange Funktionen, aber Sie sollten uns besser den Code schicken, damit wir ihn untersuchen und den Fehler beheben können. Sie wird vielen Händlern helfen.

Ok, anbei 2 Optionen mit "Codegenerierungsfehler" und "Baumoptimierungsfehler". Die onInit-Funktion ist sehr lang (~1000 Zeilen generierter Code).

Ticket #217917.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Vigor:

Ok, anbei 2 Varianten mit "Codegenerierungsfehler" und "Baumoptimierungsfehler". Die onInit-Funktion ist sehr lang (~1000 Zeilen generierter Code).

Ticket #217917

Danke, wir werden uns das am Montag ansehen.
 
Valmars:

Soweit ich weiß, erstellt der Tester vor dem Testen eine Marktumgebung für das angeschlossene Konto (das zuletzt angeschlossene, wenn keine Verbindung zum Server besteht), überprüft die Synchronisierung der Daten mit dem Server (wiederum, wenn eine Verbindung besteht), lädt die fehlenden Kurse vom Startdatum des Tests hoch (wenn eine Verbindung besteht), erstellt eine Testsequenz von Kursen für alle erforderlichen Symbole und beginnt erst dann mit dem Testen. Was ist, wenn es ihm nicht gelingt, den erforderlichen Verlauf herunterzuladen (z. B. weil es keinen Verlauf auf dem Server gibt oder weil keine Verbindung zum Server besteht)? ? Es sagt Ihnen ehrlich. Nein, das müssen Sie nicht.

Als Nächstes wollen Sie das Anfangsdatum des Verlaufs auf dem Server (im Tester) ermitteln. Es scheint, dass diese Eigenschaft nicht in der Marktumgebung des Testers enthalten ist, obwohl sie vom Server gespeichert worden sein könnte. Handelt es sich um einen Fehler? Ich glaube nicht. Nach Beginn der Prüfung kann der Prüfer nicht mehr auf den Server zugreifen (über das Terminal), um die benötigten Zitate herunterzuladen. Alles, was vorhanden ist, wird vom Prüfer bereits in der Initialisierungsphase des Prüfprozesses geladen und der Prüfablauf ist bereits festgelegt und kann nicht mehr verändert werden. Anstelle von SeriesInfoInteger(symbol,0,SERIES_SERVER_FIRSTDATE) können Sie in Ihrem Fall meiner Meinung nach SeriesInfoInteger(symbol,0,SERIES_FIRSTDATE) verwenden. sollte im Tester funktionieren.


Die gleiche Funktion liefert Null. Ich habe auchSERIES_TERMINAL_FIRSTDATE ausprobiert. Die Schlussfolgerung ist, dass die FunktionSeriesInfoInteger im Testgerät nicht funktioniert. Sie funktioniert nur für das Gerät, auf dem der Test läuft. Haben Sie vielleicht eine Idee, wie man den Test für Instrumente mit unterschiedlichem Startdatum der Historie durchführen kann, wenn man das Intervall "Alle Historien" auswählt?
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - Документация по MQL5
 
Auch hier ist die Uhrzeit auf dem Terminal auf GMT+0 gesprungen, obwohl sie eigentlich GMT+1 sein sollte, wie bereits besprochen. Bitte korrigieren Sie dies.