Die Optimierungsergebnisse unterscheiden sich von den Ergebnissen einzelner Tests - Seite 6

 

Ich sehe, dass die Frage der Streuungstests immer wieder aufgeworfen wurde. Ich bin vor kurzem zu einem System gekommen, das mehr oder weniger seriös aussieht (in Bezug auf den realen Handel) und daher gründlich getestet werden muss. Und ich habe mir auch Gedanken über dieses Thema gemacht. Als Ergebnis habe ich ein einfaches Skript geschrieben, das die erforderliche Streuung für Offline-Tests festlegt.

Das Prinzip ist wohlbekannt, in der Datei symbols.sel wird Ask überschrieben. Kopieren Sie es also im Offline-Terminal aus dem Ordner history in den Ordner experts/files, starten Sie das Skript, schließen Sie dann das Terminal, kopieren Sie symbols.sel zurück und starten Sie das Terminal erneut.

P.S. Ersetzt das Skript, ein kleines Versehen war, wenn jemand plötzlich Zeit hatte, SetSpread und nicht SetSpread_1 zu nehmen, müssen wieder herunterladen.

Dateien:
 
Das gleiche Problem. Bei der Optimierung erhalte ich die gleichen Ergebnisse, aber bei den einzelnen Durchläufen sind die Ergebnisse drastisch unterschiedlich. Danke an Mathemat für den Hinweis auf die richtige Richtung.

Mathemat:
Gehen Sie während der Prüfung vorsichtig mit den Gegenständen um. Es ist besser, sie überhaupt nicht zu verwenden.

Ich werde berichten, was passiert ist und wie das Problem gelöst wurde, vielleicht findet es ja jemand nützlich. Ich habe meinen eigenen Indikator geschrieben, der Trendlinien verwendet. Der Indikator übergibt die Anzahl der durchbrochenen Trendlinien an die globale Variable des Terminals. Das ging so:

GlobalVariableSet("GV_name", number);

und nahm im Expert Advisor den Wert von

int dc = GlobalVariableGet("GV_name");

Im Visualizer und in einzelnen Tests war alles in Ordnung. Daher beschloss ich, die Deklaration einer "zusätzlichen" Variablen einzusparen, um die Codegröße zu verringern. Nachdem ich den Code auf folgende Weise korrigiert hatte, funktionierte alles mit identischen Ergebnissen sowohl im Optimierer als auch in einzelnen Tests.

string GlobVar = "GV_name";  // объявил переменную в индикаторе на глобальном уровне программы

int start(){
  GlobalVariableSet(GlobVar, number);
}
string GlobVar;  // объявил переменную в советнике на глобальном уровне программы
int dc;

int start(){
  dc = GlobalVariableGet(GlobVar);
}

Durch das Setzen von globalen Variablen im Indikator und im EA funktionierte also alles richtig.

 

Guten Abend, liebe Kollegen.

Ich habe beschlossen, dieses Thema wieder aufzugreifen, da ich auf ein identisches Problem gestoßen bin.

Mein Expert Advisor verwendet keine grafischen Objekte. Ich habe eine benutzerdefinierte Streuung festgelegt, die überall gleich ist. Einzelne Tests unterscheiden sich jedoch stark von Optimierungsergebnissen. Außerdem habe ich einzelne Tests auf verschiedenen Computern durchgeführt, und sie sehen alle gleich aus, stimmen aber nicht mit den Optimierungsergebnissen überein.

Vielleicht hat jemand eine Lösung gefunden?

 
Andrey Kaunov:

Guten Abend, liebe Kollegen.

Ich habe beschlossen, dieses Thema wieder aufzugreifen, da ich auf ein identisches Problem gestoßen bin.

Mein Expert Advisor verwendet keine grafischen Objekte. Ich habe eine benutzerdefinierte Streuung festgelegt, die überall gleich ist. Einzelne Tests unterscheiden sich jedoch sehr stark von Optimierungsergebnissen. Außerdem habe ich einzelne Tests auf verschiedenen Computern durchgeführt, und sie sehen alle gleich aus, stimmen aber nicht mit den Optimierungsergebnissen überein.

Vielleicht hat jemand eine Lösung gefunden?

Warum sollten sie gleich sein? Wenn nur durch eine Gesamtanalyse der Parameter und die Auswahl der besten Option. Doch das ist teuer und ressourcenintensiv. Aus diesem Grund verwenden wir genetische Algorithmen. Und sie sind im Wesentlichen so aufgebaut: Zufallsstichproben von Parametersätzen aus den zu optimierenden und dann die Auswahl des besten und eine detailliertere Suche dort. Zum Beispiel 6 Parameter. Die beste Lösung zu präsentieren ist wie die höchste Dichte im 6-dimensionalen Raum. Und es kann viele Verdichtungspunkte geben. Ein guter Algorithmus liefert glatte 6-dimensionale volumetrische Lichtungen mit nicht vielen Dichten, und die Optimierung wird sie finden, und wenn der Algorithmus scharfe Dichten liefert, dann können die Ergebnisse zufällig sein, d.h. die Optimierung wird Dichten finden, aber nicht jedes Mal den gleichen Satz von Parametern (gleiche Modelle).

 

Valery, anstatt zu antworten, zitiere ich einfach, darf ich...

eugene-last:

Ähm ... Ich glaube, viele Menschen wollen das Problem einfach nicht verstehen. Oder absichtlich weggehen.

Was ist Optimierung und was ist ein Einzeltest? Antwort: Die Optimierung besteht aus mehreren Einzeltests.
Antwort: Theoretisch bedeutet dies, dass der Optimierungsdurchlauf derselbe ist und zum selben Ergebnis führt wie der Einzeltest.

Nun, in der Praxis zeigt sich, dass dies nicht der Fall ist. Und der Expert Advisor (übrigens keine Maxime, ich sehe, dass es einige Leute hier stört) versagt nicht, weil der einzelne Test genau das gleiche Ergebnis zeigt. Warum also führt dieser einzige Test zur Optimierung zu einem anderen Ergebnis?!?!?!?!?!?!?!?!?

 
Andrey Kaunov:

Guten Abend, liebe Kollegen.

Ich habe beschlossen, dieses Thema wieder aufzugreifen, da ich auf ein identisches Problem gestoßen bin.

Mein Expert Advisor verwendet keine grafischen Objekte. Ich habe eine benutzerdefinierte Streuung festgelegt, die überall gleich ist. Einzelne Tests unterscheiden sich jedoch sehr stark von Optimierungsergebnissen. Außerdem habe ich einzelne Tests auf verschiedenen Computern durchgeführt, und sie sehen alle gleich aus, stimmen aber nicht mit den Optimierungsergebnissen überein.

Vielleicht hat jemand eine Lösung gefunden?

1. prüfen, ob alle Variablen initialisiert sind, obwohl in der Vergangenheit in MQL4 - nicht initialisierte Variablen gleich 0 waren, jetzt weiß ich nicht.

2, wenn Sie dynamische Arrays verwenden - Sie müssen das Ergebnis von ArrayResize() überprüfen - ich hatte ein Problem mit ihm, ich tat EA für 4-5 Indikatoren, es stellte sich heraus, dass ein Indikator den ganzen Speicher verbraucht, und in meinem EA, ArrayResize() nicht immer die angeforderte Array-Größe geben - es funktionierte einmal oder nicht. Wenn ich mich nicht irre, hat der MQL4 ca. 3Gb Speicher max. für MQL-Programme, das Terminal ist 32-bit.

 
Andrey Kaunov:

Valery, anstatt zu antworten, zitiere ich einfach, darf ich...

Ich weiß es nicht genau, ich weiß es nicht. Bei der Optimierung geht es schließlich nicht um ein paar einzelne Tests, sondern um viele. Daher können die Eingabedaten im Interesse der Schnelligkeit vielleicht anders sein. Um der Sache auf den Grund zu gehen, brauchen wir einfache, reproduzierbare Problemcodes. Dann werden die Entwickler vielleicht antworten.

 
Igor Makanu:

1. prüfen, ob alle Variablen initialisiert sind, obwohl früher in MQL4 - nicht initialisierte Variablen gleich 0 waren, jetzt weiß ich es nicht, übrigens betrifft es auch Indikatoren

2, wenn Sie dynamische Arrays verwenden - Sie müssen das Ergebnis von ArrayResize() überprüfen - ich hatte dieses Problem, ich habe EA für 4-5 Indikatoren, es stellte sich heraus, dass ein Indikator den ganzen Speicher gegessen, und in EA, ich habe nicht immer ArrayResize() markiert die angeforderte Größe des Arrays - es funktionierte und es funktionierte nicht jedes andere Mal. Wenn ich mich nicht irre, hat der MQL4 maximal 3Gb Speicher für MQL-Programme, das Terminal hat 32 Bit.

Igor, danke für den Hinweis. Ich werde versuchen, einige Nachforschungen in dieser Richtung anzustellen.

Valeriy Yastremskiy:

Ich bin mir nicht sicher, ich weiß es nicht. Daher können die Eingabedaten aus Gründen der Schnelligkeit unterschiedlich sein. Um der Sache auf den Grund zu gehen, brauchen wir einfache, reproduzierbare Problemcodes. Vielleicht werden die Entwickler dann antworten.

Nun, nichts sollte anders sein, sonst ist der ganze Sinn der Optimierung verloren. Und die Entwickler haben seit 10 Jahren nichts mehr geantwortet...

 
Andrey Kaunov:

Igor, danke für den Hinweis. Ich werde versuchen, in dieser Richtung zu recherchieren.

Nun, nichts sollte anders sein, sonst ist der ganze Sinn der Optimierung verloren. Und die Entwickler haben seit 10 Jahren nichts mehr geantwortet...

Die Entwickler verstehen keine Worte und keine Beschwerden. Nur verständlicher Code, der das Problem reproduziert).

 
Igor Makanu:

1. prüfen, ob alle Variablen initialisiert sind, obwohl früher in MQL4 - nicht initialisierte Variablen gleich 0 waren, jetzt weiß ich es nicht, übrigens betrifft es auch Indikatoren

2, wenn Sie dynamische Arrays verwenden - Sie müssen das Ergebnis von ArrayResize() überprüfen - ich hatte dieses Problem, ich habe EA für 4-5 Indikatoren, es stellte sich heraus, dass ein Indikator den ganzen Speicher gegessen, und in EA, ich habe nicht immer ArrayResize() markiert die gewünschte Größe des Arrays - es funktionierte einmal oder nicht. Wenn ich mich nicht irre, ist der Speicher in MQL4 etwa 3Gb max. für MQL-Programme, das Terminal ist 32-bit.

In 4 sind Nullen und in 5 ist Müll. Beim letzten Mal schienen solche Probleme genau dadurch gelöst worden zu sein, dass Variablen gefunden wurden, die außerhalb von OnInit initialisiert und während des Optimierungslaufs geändert wurden, d.h. während

Beim nächsten Durchgang haben sie nicht mehr ihren ursprünglichen Wert erhalten.