¿Qué diablos está pasando? - página 2

 

Tengo un truco diferente. El asesor pone una venta en la apertura de cada hora. Para el euro funciona correctamente, pero para el símbolo personalizado no está claro cómo

En el modo visual faltan algunos candelabros


Archivos adjuntos:
MySymbol.mq5  4 kb
Test.mq5  2 kb
 
Сергей Таболин:

Se trata una vez más del probador/optimizador...

Se han observado discrepancias en los resultados de la optimización y de la prueba única. Reinicié el terminal, cambié la configuración (para estar seguro). Comenzó la optimización.

Hice una sola prueba...

¿Cómo puede ser? ¿De dónde viene esta tontería?

Fue de la misma manera. Entre las pasadas de optimización, las variables no siempre se inicializaban o no se inicializaban todas como antes de una pasada. Empecé a inicializar todo y el problema desapareció.

En otra ocasión tuve un problema similar por culpa de iSAR, en pasos mínimos.

 

Un cliente tenía un problema. Su Asesor Experto estaba probando y dando resultados en el probador, pero en el optimizador todas las ejecuciones eran nulas.

El algoritmo de su Asesor Experto en cuanto a la apertura de operaciones se basaba en la lectura de la leyenda del botón que cambiaba dependiendo de la situación. Dado que los objetos gráficos no se renderizan durante la optimización, esta petición siempre daba un resultado negativo.

Si el algoritmo de su Asesor Experto utiliza datos de objetos gráficos, también puede haber diferencias significativas entre la prueba y la optimización.

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


¿Cómo es eso? Ambos son iguales. ¿Cómo puede haber una diferencia? Sobre todo porque prácticamente todos los datos se inicializan en un bucle. Y si algo no se inicializa allí, obtendrá un error.


Si puede, explíquelo. Me gustaría ver la inicialización en el bucle. Se lo enseñaré a mi nieta.

 
Para no hacerlo nunca más.
 
Алексей Тарабанов:

Si es posible, más detalles. Me gustaría ver la inicialización en el bucle. Se lo enseñaré a mi nieta.

int sum = 0;

for ()

  sum = 0;

  for ()

    sum += ....

O mejor aún, su nieta no entenderá el significado:

int sum;

for ()

  sum = 0;

  for ()

    sum += ....
 
Andrey Barinov:
Sólo tienes que olvidarte de inicializar algo en tu código y habrá una diferencia. Comprueba el código.

Comprobado todo de nuevo - todas las variables están inicializadas.

@Andrey Kaunov, gracias, pero no uso ningún objeto gráfico.

Alexei Tarabanov:

Si puede, explíquelo. Me gustaría ver la inicialización en el bucle. Se lo enseñaré a mi nieta.

Por el amor de Dios )))) Me excedí un poco - no todos, por supuesto, pero sólo el indicador maneja ))))

int      ind_handle[];

int OnInit()
{
...........
   if(!nc_getHandles()) return(INIT_FAILED);
...........
}
//+------------------------------------------------------------------+
bool  nc_getHandles(void)
{
   ind_nums = ArraySize(indicators);
   ArrayResize(ind_handle, ind_nums);

   for(int i = 0; i < ind_nums; i++)
   {
      ind_handle[i]  = iCustom(Symbol(), Period(), folder+indicators[i]);
      if(ind_handle[i] == INVALID_HANDLE)
      {
         Print("Ошибка получения хандла индикатора >>> "+indicators[i]);
         writeErrorFile(program_name,program_version,"Ошибка получения хандла индикатора >>> "+indicators[i]);
         return(false);
      }
   }
   Print("Получены хэндлы всех индикаторов >> ",ArraySize(indicators));
//-----------------------------------
   return(true);
}
 

Ahora vamos al grano.

He limpiado completamente todos los registros y cachés.

Inicié el editor, recompilé el Asesor Experto.

Abrió la terminal.

Inició la optimización genética.

Esperando...


Ejecutar una sola prueba.

Compruebo si los parámetros son correctos - se pasan correctamente.

Abro la pestaña de Backtest.

Beneficios - 697 / 247

Oficios - 44 / 56.

Ahora reuniré los registros y los adjuntaré.

Archivos adjuntos:
mt5logs.zip  288 kb
 

Mira en el código y trata de averiguar lo que sucede con las transacciones dentro de la optimización y con un solo paseo.

Desimprímelo y guárdalo tú mismo en un archivo.

Se trata de la lógica dentro de su programa. Que nadie más que tú puede ver y, por lo tanto, no habrá ayuda.

 
Renat Fatkhullin:

Mira en el código y trata de averiguar lo que sucede con las transacciones dentro de la optimización y con un solo paseo.

Desimprímelo y guárdalo tú mismo en un archivo.

Se trata de la lógica dentro de su programa. Que nadie más que tú puede ver y por lo tanto no habrá ayuda.

Renat, gracias. Pero explícame, ¿quién no sabe la diferencia entre 2*2+2*3 en el optimizador y una sola pasada? ¿Dar al menos una pista de dónde puede haber exactamente una discrepancia?

Y, ya que lo mencionas, dame una pista de dónde y cómo encontrar las diferencias entre el EA en el Probador de Estrategias y en una cuenta real?

Yo, quizás por mi propia estupidez, siempre creí que el código escrito (tenga errores o no, esté optimizado o no), está compilado, y por lo tanto debería funcionar igualmente ya sea en el optimizador, o en el tester, o en una cuenta real...

Bien, simplemente tome la posición de un programador ordinario - ¿dónde, cómo y por qué medios se debe buscar cualquier diferencia poco clara en la ejecución de un código (compilado) en estos tres estados?

Yo, como usuario, sólo veo que un ejecutable no funciona igual en el optimizador y en el probador, lo que significa que en la vida real funcionará igual .....


Se me ocurrió una idea, ¿qué pasa si estás probando un EA y es... Bueno, no es bueno. ¿Y si lo utilizo para el comercio real? ¿Y si es el Santo Grial? ))))