Il terminale MT5 è stato aggiornato oggi e la finestra "Ottimizzazione" non appare durante il test - pagina 22

 
Aleksey Vyazmikin:

Il punto è che INIT_PARAMETERS_INCORRECT è spesso usato per restringere l'area di ricerca escludendo valori illogici/non necessari, il che accelera notevolmente l'ottimizzazione quando si usa un'enumerazione completa. Se INIT_PARAMETERS_INCORRECT non esistesse, la genetica si imbatterebbe in varianti non necessarie e ci giocherebbe, quindi non escludere i valori variabili non è un'opzione. Quindi è quello che sto chiedendo, come suggerisci, come professionista, di risolvere questo problema senza troppo sforzo. Enumerare manualmente tutte le variabili corrette, per un'enumerazione senza lacune ed escludere consapevolmente i valori INIT_PARAMETERS_INCORRECT non è un'opzione - molto lunga. L'uso dei contatori intelligenti non è per tutti e può anche danneggiare la genetica.

Quindi cosa resta, passare tutti i parametri in 1 giorno e scrivere i loro valori corretti nel codice, e quindi selezionarli per la genetica?

Leggete le mie spiegazioni sopra.

La tua immagine del mondo è incompatibile con l'algoritmo genetico. Uccidere un quarto della popolazione per negazione - la genetica sopravviverà ancora, anche in perdita. Uccidere il 98% della popolazione - è la fine dell'evoluzione. Indipendentemente dai vostri desideri o dal vostro modus operandi preferito.

Leggete il materiale che ho linkato sopra.

Ho finito con l'illuminazione, mi dispiace. La continuazione del thread INIT_PARAMETERS_INCORRECT è chiusa, tutti i commenti saranno cancellati.

 
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;
}

Prima dell'aggiornamento di oggi, tutto funzionava. Ora c'è un messaggio di errore.

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

Prima dell'aggiornamento di oggi, tutto funzionava. Ora c'è un messaggio di errore.

Che valore restituisce GetLastError()?

Qual è il valore della variabile bars_4_tr_cur prima di chiamare CopyBuffer?

Quante barre della serie temporale su cui viene contato l'indicatore handle_CCI?

 
Slava:

Che valore restituisce GetLastError()?

Qual è il valore della variabile bars_4_tr_cur prima di chiamare CopyBuffer?

Su quante barre della serie temporale viene contato l'indicatore handle_CCI?

variabile = 33

М15

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

4003 -Parametro errato quando si chiama una funzione di sistema

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

variabile = 33

М15

4003 -Parametro errato quando si chiama una funzione di sistema

Prossima domanda. Ho capito bene che stai prendendo i dati dall'indicatore CCI?

Per favore, dimmi i parametri con cui hai creato questo indicatore.

 
Slava:

Prossima domanda. Ho capito bene che stai prendendo i dati dall'indicatore CCI?

Per favore, dimmi i parametri con cui hai creato questo indicatore.

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

variabile = 33

М15

4003 -Parametro non valido quando si chiama una funzione di sistema

Esattamente 33? È una chiamata diretta che usa un valore diretto di 33 che restituisce l'errore 4003?

Controlla di nuovo

 
Slava:

Esattamente 33? È una chiamata diretta data usando il valore diretto di 33 che restituisce l'errore 4003?

Controlla di nuovo

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

Di nuovo. Prima dell'aggiornamento l'EA funzionava bene sui conti demo di 3 broker.

Ho anche provato a sostituire l'indicatore di una versione precedente. Grida ancora.

 

Ho capito tutto.

L'errore era nella lettura del file dei parametri salvati.

Lo era:

      if(filehandle != INVALID_HANDLE)

Dopo averlo cambiato, ha funzionato.

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

Lasciatemi ripetere. Prima dell'aggiornamento l'EA funzionava bene sui conti demo di 3 broker.

Ho anche provato a sostituire l'indicatore di una versione precedente. Giura e basta.

Si prega di eseguire questo EA:

L'ho volutamente impostato per ricevere i dati dall'indicatore iCCI dalle barre 0 a 33 in un ciclo non ogni tick.

File:
iCCI.mq5  11 kb
Motivazione: