El terminal MT5 se ha actualizado hoy y la ventana de "Optimización" no aparece durante la prueba - página 22

 
Aleksey Vyazmikin:

La cuestión es que INIT_PARAMETERS_INCORRECT se utiliza a menudo para reducir el área de búsqueda excluyendo los valores ilógicos o innecesarios, lo que acelera significativamente la optimización cuando se utiliza una enumeración completa. Si INIT_PARAMETERS_INCORRECT no existiera, la genética se encontraría con variantes innecesarias y las manipularía, por lo que no excluir los valores de las variables no es una opción. Así que eso es lo que pregunto, cómo sugieres, como profesional, solucionar este problema sin demasiado esfuerzo. Enumerar manualmente todas las variables correctas, para enumerar sin huecos y excluir a sabiendas los valores INIT_PARAMETERS_INCORRECT no es una opción - muy larga. El uso de contadores inteligentes no es para todo el mundo y además puede perjudicar la genética.

Entonces, ¿qué queda, pasar todos los parámetros en 1 día y escribir sus valores correctos en el código, y así seleccionarlos para la genética?

Lea mis explicaciones más arriba.

Su imagen del mundo es incompatible con el algoritmo genético. Matar a una cuarta parte de la población por negación - la genética seguirá sobreviviendo, incluso con pérdidas. Matar al 98% de la población, es el fin de la evolución. Independientemente de sus deseos o del modus operandi que prefiera.

Lee los materiales que he enlazado más arriba.

He terminado con la iluminación, lo siento. Se cierra la continuación del hilo INIT_PARAMETERS_INCORRECT, se borrarán todos los comentarios.

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

Antes de la actualización de hoy, todo funcionaba. Ahora aparece un mensaje de error.

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

Antes de la actualización de hoy, todo funcionaba. Ahora hay un mensaje de error.

¿Qué valor devuelve GetLastError()?

¿Cuál es el valor de la variable bars_4_tr_cur antes de llamar a CopyBuffer?

¿Cuántas barras en la serie de tiempo, en las que se cuenta el indicador handle_CCI?

 
Slava:

¿Qué valor devuelve GetLastError()?

¿Cuál es el valor de la variable bars_4_tr_cur antes de llamar a CopyBuffer?

¿Cuántas barras de la serie temporal en las que se cuenta el indicador handle_CCI?

variable = 33

М15

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

4003 -Parámetro erróneo al llamar a una función del sistema

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

variable = 33

М15

4003 -Parámetro erróneo al llamar a una función del sistema

Siguiente pregunta. ¿He entendido bien que está tomando datos del indicador CCI?

Por favor, dígame los parámetros con los que creó este indicador.

 
Slava:

Siguiente pregunta. ¿He entendido bien que está tomando datos del indicador CCI?

Por favor, dígame los parámetros con los que creó este indicador.

//--- активируем хендл индикатора 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 -Parámetro no válido al llamar a una función del sistema

¿Exactamente 33? ¿Se trata de una llamada directa con un valor directo de 33 que devuelve el error 4003?

Vuelve a comprobarlo

 
Slava:

¿Exactamente 33? ¿Es una llamada directa dada utilizando el valor directo de 33 lo que devuelve el error 4003?

Vuelve a comprobarlo

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

Otra vez. Antes de la actualización el EA funcionaba bien en cuentas demo de 3 brokers.

Incluso he intentado sustituir el indicador de una versión anterior. Sigue gritando.

 

Lo tengo claro.

El error estaba en la lectura del archivo de parámetros guardados.

Lo fue:

      if(filehandle != INVALID_HANDLE)

Después de cambiarlo, funcionó.

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

Permítanme repetirlo. Antes de la actualización el EA funcionaba bien en cuentas demo de 3 brokers.

Incluso he intentado sustituir el indicador de una versión anterior. Jura y punto.

Por favor, ejecute este EA:

Lo configuré a propósito para que recibiera los datos del indicador iCCI de las barras 0 a 33 en un bucle y no en cada tick.

Archivos adjuntos:
iCCI.mq5  11 kb