Nicht für MT-Entwickler! Wodurch soll INIT_PARAMETERS_INCORRECT ersetzt werden? - Seite 11

 
Сергей Таболин:

Es kam die Idee auf, "ungültige" Parameter während der genetischen Optimierung in OnTester() auszusieben:

Es stellt sich heraus, dass die Ergebnisse von INIT_PARAMETERS_INCORRECT nicht gesehen werden können, ohne die Genetik zu beeinträchtigen.

Aber hier stellt sich eine weitere Frage: Können wir in diesem Fall ein "tiefes Minus" beim Gewinn erzielen?

Dies ist eine sehr langsame Methode. Wir geben Ressourcen für die Berechnung des gesamten Passes aus.

 
Mikhail Mitin:

ist eine sehr langsame Methode. Wir vergeuden unsere Ressourcen damit, den gesamten Bereich falsch einzuschätzen.

Von zwei Übeln...

 
Mikhail Mitin:

ist eine sehr langsame Methode. Wir verschwenden Ressourcen mit der Berechnung des gesamten Passes.

Geben SieINIT_PARAMETERS_INCORRECT_ONTESTER ein- Rollover zu OnTester.

 

Wie ich dieses Problem gelöst habe (mehrere Varianten):

  • Es wird ein separater Parameter erstellt, und je nach seinem Wert werden andere Werte ersetzt (wie in einigen Beiträgen oben beschrieben). Die Optimierung gilt nur für diesen Parameter
  • Es gibt auch einen Ausweg aus dieser Situation, aber der ist nicht einfach umzusetzen:
    1. erstellte csv-Datei, in der die Aufzählung nur der notwendigen Parameter enthalten war
    2. ich lese die Datei im OnInit, lese Werte aus der Datei und weise sie den Parametern zu (Lesen von Dateien mit dem Shared-Flag)
    3. optimiert nur 1 Parameter (Zeilennummer in der csv-Datei)
  • einen Algorithmus zur Erzeugung einer mqh-Datei aus einer csv-Datei geschrieben (ähnlich wie oben, aber schneller) und ihn mit dem Expert Advisor verbunden.

 
Mikhail Mitin:

Wie ich dieses Problem gelöst habe (mehrere Varianten):

  • Es wird ein separater Parameter erstellt, und je nach seinem Wert werden andere Werte ersetzt (wie in einigen Beiträgen oben beschrieben). Die Optimierung gilt nur für diesen Parameter
  • Es gibt auch einen Ausweg aus dieser Situation, aber der ist nicht einfach umzusetzen:
    1. erstellte csv-Datei, in der die Aufzählung nur der notwendigen Parameter enthalten war
    2. ich lese die Datei im OnInit, lese Werte aus der Datei und weise sie den Parametern zu (Lesen von Dateien mit dem Shared-Flag)
    3. optimiert nur 1 Parameter (Zeilennummer in der csv-Datei)
  • einen Algorithmus zur Erzeugung einer mqh-Datei aus einer csv-Datei geschrieben (ähnlich wie oben, aber schneller) und ihn mit dem Expert Advisor verbunden.

Und wie lässt sich damit ein genetischer Algorithmus implementieren, wenn man nur eine Variable hat?

 

Es ist mir klar geworden! ))))

Aus den OnInit-Zeilen

   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                  return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                    return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)  return(INIT_PARAMETERS_INCORRECT);

verschoben nach.

void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                                 ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                                   ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)                 ExpertRemove();

Die Genetik greift nicht ein, undPARAMETERS_INCORRECT wird nicht berechnet. )))

 
Сергей Таболин:

Es ist mir klar geworden! ))))

Aus den OnInit-Zeilen

verschoben nach.

Die Genetik greift nicht ein, undPARAMETERS_INCORRECT wird nicht berechnet. )))

Interessante Lösung. Und wie gelingt es, dass sich die Genetik nicht in einem einzigen Nachkommen verzettelt?

 
Aleksey Vyazmikin:

Das ist eine interessante Lösung. Und wie sieht es mit der Genetik aus, die sich nicht in einem Nachkommen verzettelt?

Das ist in Ordnung. Er scheitert nicht. ))) Zumindest noch nicht. Irgendwo hatte ich eine Eule mit einer Menge ungültiger Parameter. Ich muss eine Optimierung durchführen und nachsehen.

Die Idee der Portierung ist, dass die Genetik genau bei der Initialisierung stolpert. Aber wenn die Prüfung auf OnTick verschoben wird, dann geht die Initialisierung gut, der Test beginnt, endet sofort und die Genetik erhält das Ergebnis des Durchgangs auf Null.

 
Сергей Таболин:

Das ist in Ordnung. Es wird nicht untergehen. ))) Zumindest noch nicht. Irgendwo hatte ich eine Eule mit einer Menge ungültiger Parameter. Ich muss eine Optimierung durchführen und nachsehen.

Die Idee der Portierung liegt in der Tatsache, dass die Genetik genau bei der Initialisierung stolpert. Aber wenn die Prüfung auf OnTick verschoben wird, dann geht die Initialisierung gut, der Test beginnt und endet sofort und die Genetik erhält ein Null-Ergebnis.

Es ist gut, dass es nicht scheitert. Die Essenz des Codes ist klar, aber ich würde die Ausführung nur einmal hinzufügen, vor allem, wenn es viele Bedingungen für einen vorzeitigen Ausstieg gibt.

 
Aleksey Vyazmikin:

Es ist gut, dass er sich nicht verzettelt. Die Grundzüge des Codes sind klar, aber ich würde die Ausführung nur einmal hinzufügen, vor allem, wenn es viele Bedingungen für ein vorzeitiges Aussteigen gibt.

Die Optimierung der Eule, von der ich gesprochen habe, kommt gut voran. )))

Eine gute Idee. Wir müssen ein Kontrollkennzeichen hinzufügen.