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

 
Andrey F. Zelinsky:

declarar una variable globalmente e inicializarla en la declaración, por ejemplo, int kk=0;

entonces en OnTick() desimprimir y cambiar el valor, por ejemplo Print("kk=",kk); ++kk;

y luego cambiar la TF... y ver el resultado.

está claro que la variable global mantendrá su valor aunque se cambie el TF - pero nada de eso ocurre en el probador.

 
Andrey Dik:

está claro que la variable global mantendrá su valor aunque se cambie el TF - pero nada de eso ocurre en el probador.

Ahora ha encontrado la respuesta a la causa de la diferencia en los resultados.

Al optimizar, los parámetros se vuelven a seleccionar, es decir, el Asesor Experto se reinicia con diferentes ajustes.

 
Andrey F. Zelinsky:

Ahora ha encontrado la respuesta a la diferencia de resultados.

¿Cree que la variable global de EA conserva su valor de las pasadas ejecuciones del optimizador y se traslada a las siguientes?

 
Andrey F. Zelinsky:

compruébalo, es más fácil comprobarlo que adivinarlo.

Renat, más arriba, escribió que el optimizador funciona "como un reloj" y que la razón está en el código -- recomendó varias veces hacer un unpriming -- supongo que nadie lo ha hecho.

¿has comprobado tú mismo? ¿algún ejemplo claro de cuándo una sola ejecución funcionará de forma diferente que como parte de la optimización?

por ejemplo, recuerdo que antes no funcionaba la eliminación de un handle en el tester, provocaba un desbordamiento de la memoria y la caída del terminal junto con el sistema. tal vez este problema ya se ha resuelto, pero todavía hay algunos escollos con la creación y eliminación de los handles de los indicadores y hay diferencias en el optimizador y en las ejecuciones de un solo indicador. como sé los desarrolladores trabajaron muy duro para acelerar y minimizar el consumo de memoria siempre que sea posible.

 
Andrey Dik:

¿lo has comprobado tú mismo? ¿hay ejemplos claros en los que una sola ejecución funcione de forma diferente a como parte de la optimización?

en este caso no se trata de una sola carrera.

 
Andrey F. Zelinsky:

Comprobar la inicialización de las variables declaradas globalmente.

Si la inicialización no está en OnInit(), sino en la declaración y si sus valores se cambian en el código.

  1. Lo he comprobado.
  2. Eso es lo que son las variables: se pueden cambiar.
  3. Corríjanme si me equivoco.
  • Si se define una variable, se reserva memoria para ella.
  • Si no se inicializa, se puede almacenar cualquier cosa en él.
  • ¿Cuál es la diferencia entre inicializarlo por cero de inmediato o asignar el resultado de los cálculos en un lugar determinado?
  • Si intenta utilizar una variable no inicializada, el compilador generará una advertencia.

Un ejemplo sencillo:

int tst(int x)
{
   int y;
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);		// possible use of uninitialized variable 'y'
}

Aunque.... El compilador no genera la advertencia por alguna razón si pones la declaración en el ámbito global (((

int y;

int tst(int x)
{
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);           // никакого предупреждения уже нет...
}
'test.mq5'
code generated
0 errors, 0 warnings, 143 msec elapsed

Esperaba algo diferente...

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

  1. Lo he comprobado.
  2. Las variables son sólo eso, variables, se pueden cambiar.
  3. Corríjanme si me equivoco.
  • Si se declara una variable, se reserva memoria para ella.
  • Si no se inicializa, se puede almacenar cualquier cosa en él.
  • ¿Cuál es la diferencia entre inicializarlo por cero de inmediato o asignar el resultado de los cálculos en un lugar determinado?
  • Si intenta utilizar una variable no inicializada, el compilador generará una advertencia.

Un ejemplo sencillo:

Aunque.... El compilador no genera la advertencia por alguna razón si pones la declaración en el ámbito global (((

Esperaba algo diferente.

La quinta página estaba en marcha, pero todavía no había código mql5... También sigue habiendo un misterio envuelto en la oscuridad en lo que respecta a las pruebas: símbolo(s), plazo(s), configuración de las pruebas.

 

Bueno, una pregunta más antes de empezar a cebar.

Por ejemplo, he registrado los resultados:

optimizador - comprar;vender;vender;comprar;comprar;vender

probador - comprar;vender;vender;comprar;comprar;vender;comprar;comprar;vender

¿Cómo pueden los datos sobre estos acuerdos"extra" ayudar a entender de qué techo proceden? Tal vez debamos escribir también los precios de los bares anteriores, ¿o qué más?

 
Vladimir Karputov:

La quinta página estaba en marcha, pero el código mql5 todavía no estaba allí... También sigue habiendo un misterio envuelto en la oscuridad en lo que respecta a las pruebas: símbolo(s), plazo(s), configuración de las pruebas.

Bienvenido a la vuelta de las vacaciones )))

Puedes ver todo aquí.

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

  1. Lo he comprobado.
  2. Las variables son sólo eso, variables, se pueden cambiar.
  3. Corríjanme si me equivoco.
  • Si se declara una variable, se reserva memoria para ella.
  • Si no se inicializa, se puede almacenar cualquier cosa en él.
  • ¿Cuál es la diferencia entre inicializarlo por cero de inmediato o asignar el resultado de los cálculos en un lugar determinado?
  • Si intenta utilizar una variable no inicializada, el compilador generará una advertencia.

Un ejemplo sencillo:

Aunque.... El compilador no genera la advertencia por alguna razón si pones la declaración en el ámbito global (((

Esperaba algo diferente...

Si 'x' es del tipo double, los ejemplos dados son fundamentalmente erróneos y el estado 'y' es indefinido en ambos casos

es decir, es posible que en algún lugar de las profundidades de las redes neuronales se obtengan valores dobles especiales - inf-tipos, nan-tipos o similares a los valores eps

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...