MT5-Terminal wurde heute aktualisiert und das Fenster "Optimierung" wird während des Tests nicht angezeigt - Seite 22

 
Aleksey Vyazmikin:

Der Punkt ist, dass INIT_PARAMETERS_INCORRECT oft verwendet wird, um den Suchbereich einzugrenzen, indem unlogische/unnötige Werte ausgeschlossen werden, was die Optimierung bei Verwendung einer vollständigen Aufzählung erheblich beschleunigt. Gäbe es INIT_PARAMETERS_INCORRECT nicht, würde die Genetik nur auf unnötige Varianten stoßen und mit ihnen herumspielen, so dass es keine Option ist, Variablenwerte auszuschließen. Deshalb frage ich Sie, was Sie als Fachmann vorschlagen, um dieses Problem ohne allzu großen Aufwand zu lösen. Die manuelle Aufzählung aller korrekten Variablen, die lückenlose Aufzählung und der bewusste Ausschluss von INIT_PARAMETERS_INCORRECT-Werten ist keine Option - sehr lang. Die Verwendung von intelligenten Zählern ist nicht für jeden geeignet und kann auch der Genetik schaden.

Was bleibt also übrig, um alle Parameter an einem Tag zu übergeben und ihre korrekten Werte in den Code zu schreiben und sie so für die Genetik auszuwählen?

Lesen Sie meine obigen Ausführungen.

Ihr Weltbild ist mit dem genetischen Algorithmus nicht vereinbar. Töten Sie ein Viertel der Bevölkerung durch Verweigerung - die Genetik wird trotzdem überleben, selbst wenn sie Verluste macht. Töte 98 % der Bevölkerung - das ist das Ende der Evolution. Unabhängig von Ihren Wünschen oder Ihrem bevorzugten Modus Operandi.

Lesen Sie die Materialien, die ich oben verlinkt habe.

Ich bin fertig mit der Erleuchtung, tut mir leid. Die Fortsetzung des INIT_PARAMETERS_INCORRECT-Threads ist geschlossen, alle Kommentare werden gelöscht.

 
void collectNecessaryDataOnTick()
{
   //--- считать последние цены на тике
   SymbolInfoTick(Symbol(),last_tick);
   
   ArrayFree(buf_CCI);
   
   if(CopyBuffer(handle_CCI,0,0,bars_4_tr_cur,buf_CCI) < 0 )               // копируем данные из индикаторного массива в статический массив buf_CCI для дальнейшей работы с ними
   {                                                                       // если есть ошибки
      Comment("Не удалось скопировать данные из индикаторного буфера");    // то выводим сообщение
      return;                                                              // и выходим из функции
   }
   bars_4_tr_cur  = 10;
   
   return;
}

Vor dem heutigen Update hat alles funktioniert. Jetzt erscheint eine Fehlermeldung.

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

Vor dem heutigen Update hat alles funktioniert. Jetzt gibt es eine Fehlermeldung.

Welchen Wert gibt die Funktion GetLastError() zurück?

Wie hoch ist der Wert der Variablen bars_4_tr_cur vor dem Aufruf von CopyBuffer?

Wie viele Balken in der Zeitreihe, für die der handle_CCI-Indikator gezählt wird?

 
Slava:

Welchen Wert gibt die Funktion GetLastError() zurück?

Wie hoch ist der Wert der Variablen bars_4_tr_cur vor dem Aufruf von CopyBuffer?

Wie viele Balken in der Zeitreihe, auf der der handle_CCI-Indikator gezählt wird?

Variable = 33

М15

   ResetLastError();
   if(CopyBuffer(handle_CCI,0,0,33,buf_CCI) < 0 )               // копируем данные из индикаторного массива в статический массив buf_CCI для дальнейшей работы с ними
   {                                                                       // если есть ошибки
      Comment("Не удалось скопировать данные из индикаторного буфера");    // то выводим сообщение об ошибке
      Print(GetLastError());
      return;                                                              // и выходим из функции
   }

4003 -Fehlerhafter Parameter beim Aufruf einer Systemfunktion

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

Variable = 33

М15

4003 -Fehlerhafter Parameter beim Aufruf einer Systemfunktion

Nächste Frage. Verstehe ich das richtig, dass Sie Daten aus dem CCI-Indikator übernehmen?

Bitte nennen Sie mir die Parameter, mit denen Sie diesen Indikator erstellt haben.

 
Slava:

Nächste Frage. Verstehe ich das richtig, dass Sie Daten aus dem CCI-Indikator übernehmen?

Bitte nennen Sie mir die Parameter, mit denen Sie diesen Indikator erstellt haben.

//--- активируем хендл индикатора CCI
   handle_CCI = iCCI(Symbol(),0,14,PRICE_TYPICAL);
   if(handle_CCI==INVALID_HANDLE)                        // проверяем наличие хендла индикатора
   {
      Comment("Не удалось получить хендл индикатора");   // если хендл не получен, то выводим сообщение об ошибке
      return(-1);                                        // завершаем работу с ошибкой
   }
   ArraySetAsSeries(buf_CCI,true);                       // устанавливаем индексацию для массива buf_CCI как в таймсерии
 
Сергей Таболин:

Variable = 33

М15

4003 -Ungültiger Parameter beim Aufruf einer Systemfunktion

Genau 33? Ist dies ein direkter Aufruf mit einem direkten Wert von 33, der den Fehler 4003 zurückgibt?

Erneut prüfen

 
Slava:

Genau 33? Ist es ein bestimmter direkter Aufruf mit dem direkten Wert 33, der den Fehler 4003 zurückgibt?

Erneut prüfen

int OnInit()
{
............
//--- количество баров для определения трендов CCI
   bars_4_tr_cur  = 33;
............
//+--------
   return(INIT_SUCCEEDED);
}

Nochmals. Vor dem Update funktionierte der EA auf den Demokonten von 3 Brokern einwandfrei.

Ich habe sogar versucht, den Indikator aus einer früheren Version zu ersetzen. Es ist immer noch ein Geschrei.

 

Ich habe es herausgefunden.

Der Fehler lag beim Lesen der gespeicherten Parameterdatei.

Das war es:

      if(filehandle != INVALID_HANDLE)

Nachdem ich sie geändert hatte, funktionierte sie.

      if(FileIsExist(filename,FILE_COMMON) && filehandle != INVALID_HANDLE)
 
Сергей Таболин:

Lassen Sie mich wiederholen. Vor dem Update funktionierte der EA auf den Demokonten von 3 Brokern einwandfrei.

Ich habe sogar versucht, den Indikator aus einer früheren Version zu ersetzen. Es flucht und das war's.

Bitte führen Sie diesen EA aus:

Ich habe ihn absichtlich so eingestellt, dass er die Daten vom iCCI-Indikator von Takt 0 bis 33 in einer Schleife empfängt, nicht bei jedem Tick.

Dateien:
iCCI.mq5  11 kb