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

 
Aleksey Vyazmikin:

Falsche Parameter werden im Allgemeinen aus 3 Gründen deaktiviert:

1. das Untersuchungsgebiet ist nicht von Interesse (z. B. Ausschluss einer Reihe von Zeiträumen, da dies die verständlichste Option ist);

//--- пропустить бесполезные проходы оптимизации
   if(my_timeframe != PERIOD_M15   &&
      my_timeframe != PERIOD_M30   &&
      my_timeframe != PERIOD_H1    &&
      my_timeframe != PERIOD_H3    &&
      my_timeframe != PERIOD_H6      )
   {
      Print("ОШИБКА - Период не запланирован");
      return(INIT_PARAMETERS_INCORRECT);
   }
 
Сергей Таболин:

Völlig richtig.

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

Wie organisieren Sie nun die MA-Optimierung aus dem Beispiel, ohne die "ungültigen" Parameter einzubeziehen?

OK, ich gebe zu, ich habe nicht genau hingesehen. um einen anderen Parameter mit einer ungültigen Lücke auszuschneiden zu optimieren

 
TheXpert:

OK, ich stimme zu, ich habe nicht genau hingesehen. Um zu optimieren, sollte ein weiterer Parameter mit der ungültigen Lücke herausgeschnitten werden.

Können Sie mir ein Beispiel nennen?

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

Darf ich Ihnen ein Beispiel nennen?

input int period_MA_warp = 15;

//...

period_MA = (period_MA_warp <= 31) ? period_MA_warp : period_MA_warp + 50;
 
TheXpert:

Ich stimme zu. Wie sieht es mit dem Zeitrahmen aus?

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

Ich stimme zu. Und was ist im Falle von Zeitrahmen zu tun?

Auf die gleiche Weise - Konvertierung von int innerhalb eines kontinuierlichen Intervalls in einen Zeitrahmen. z.B. ein Array mit allen Werten von TF erstellen und nach Array-Index optimieren

 
TheXpert:

Zum Beispiel, um ein Array mit allen TF-Werten zu erstellen und nach Array-Index zu optimieren

Nun, das sieht für mich wie eine Krücke aus... Vielleicht irre ich mich, aber es ist fast dasselbe, was ich bei meinem Ausgangsbeispiel tun musste. Nur müssen Sie in diesem Fall nicht das gesamte Array vorher in eine Datei auslagern...

 

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

double OnTester()
{
   if(MQLInfoInteger(MQL_OPTIMIZATION) && paramIncorrect())  return(-99999999.99);
}

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

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

 

So habe ich es gemacht: ein separater Parameter wird erstellt und andere Werte werden abhängig von seinem Wert ersetzt.

Ein einfaches Beispiel (vor 2 Wochen):

Es gibt Zeitrahmenparameter: TF_UP (Senior) und TF_DOWN (Junior), und der Senior muss immer größer sein als der Junior, im umgekehrten Fall kommt input_incorrect heraus. Im Tester gibt es viele Nullergebnisse und die Genetik "arbeitet umsonst" (obwohl sie schnell ist). Als Ergebnis habe ich diese 2 Parameter entfernt und einen neuen Parameter erstellt, der den unten beschriebenen Typ hat, und nur diesen optimiert, und bereits in der OnInit-Funktion die Substitution in 2 anderen Parametern, abhängig von diesem Parameter.

enum TF_only_opt
{
   _H4_H1 = 0,
   _H4_M30 = 1,
   _H4_M15 = 2,
   _H1_M30 = 3,
   _H1_M15 = 4,
   _H1_M5 = 5,
   _M30_M15 = 6,
   _M30_M5 = 7,
   _M30_M1 = 8,
   _M15_M5 = 9,
   _M15_M1 = 10,
   _M5_M1 = 11
};