Errores, fallos, preguntas - página 348

 
Rosh:

Si hay una posición, obtendrá un bucle infinito porque

equivale a

No hay manera de salir del bucle en el código porque no hay ruptura en el cuerpo del operador;
Muchas gracias, no debería estar ahí ; lo he corregido, todo funciona
 

Errores (build 421, tal vez algo arreglado en 425, no hay actualización a 425 de alpari todavía):

1. Ya escribí en el hilo sobre la visualización en 3D: los títulos de los gráficos en 3D (nombre de la escala y valor de la escala) no cambian cuando se cambian los parámetros de visualización en el gráfico.

2. Durante la optimización rápida, el gráfico se iguala en la 10600ª pasada, es decir, la optimización continúa durante 50,51...60 generaciones y el gráfico no se desplaza y no se muestran nuevas pasadas. Al mismo tiempo, la pestaña Configuración muestra "Progreso de la optimización:" en lugar del número de pasadas, y en algunas circunstancias inexplicables sigue cambiando, por ejemplo, a 12420/14400 (las cifras son aproximadas).

3. Los agentes eliminados pueden pasar al estado de ocupado y permanecer en este estado, tengo que apagarlos y encenderlos, después de eso la optimización continúa.

Y una pregunta: ¿será posible cambiar la vista del gráfico (1D/2D/3D) durante la optimización y no después de su finalización?

 
PiramidaR:

Errores (build 421, tal vez algo arreglado en 425, no hay actualización a 425 de alpari todavía):

En el mismo terminal, abra una cuenta de MetaQuotes y se actualizará. Entonces, cambie a otra cuenta de nuevo
 
PiramidaR:

Errores (build 421, tal vez algo arreglado en 425, no hay actualización a 425 de alpari todavía):

1. Ya escribí en el hilo sobre la visualización en 3D: los títulos de los gráficos en 3D (nombre de la escala y valor de la escala) no cambian cuando se cambian los parámetros de visualización en el gráfico.

2. Durante la optimización rápida, el gráfico se iguala en la 10600ª pasada, es decir, la optimización continúa durante 50,51...60 generaciones y el gráfico no se desplaza y no se muestran nuevas pasadas. Al mismo tiempo, la pestaña Configuración muestra "Progreso de la optimización:" en lugar del número de pasadas, y en algunas circunstancias inexplicables sigue cambiando, por ejemplo, a 12420/14400 (las cifras son aproximadas).

3. Los agentes eliminados pueden pasar al estado de ocupado y permanecer en este estado, tengo que apagarlos y encenderlos, después de eso la optimización continúa.

Y una pregunta: ¿será posible cambiar la vista de los gráficos (1D/2D/3D) durante la optimización y no después de su finalización?

1,2 Corregido, pero no incluido en la última versión

3 Estamos trabajando en ello.

No habrá tal característica

 
Me gustaría tener la posibilidad no sólo de especificar el valor que no se dibujará
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);

sino también para poder autoinicializarel array con este valor. Si el indicador no ha asignado nada a la última barra, entonces por defecto asigna lo que se ha especificado en el

PLOT_EMPTY_VALUE

o mejor dicho, primero lo inicializas con un valor vacío y luego dejas que el indicador escriba lo que quieras.

Porque ahora el valor por defecto será cero, pero el cero en muchos indicadores es un número significativo que debe ser dibujado.

SZY escribió en este hilo como no estoy seguro de que esto no se ha resuelto, por lo que el deseo puede ser considerado como una pregunta. Si es así, por favor, dígame cómo se soluciona.

 

Urain:

Porque ahora mismo el número por defecto será cero, pero el cero en muchos indicadores es un número significativo para ser dibujado.

De hecho, cualquier cosa puede estar ahí, sólo que suele ser una suerte que sea cero. El artículoindicador de indicador en MQL5 dice directamente:

¿Es necesario inicializar los buffers de los indicadores?

Los arrays en MQL5 no se inicializan por defecto con ningún valor, y esto ciertamente se aplica a los arrays que se asignan a los buffers de indicadores usando SetIndexBuffer(). Si un array es un buffer indicador, su tamaño dependerá del parámetro rates_total en el manejador OnCalculate().

Puede existir la tentación de inicializar todos los búferes de los indicadores con un valor vacío de EMPTY_VALUE utilizando la función ArrayInitialize(), por ejemplo, una vez al principio de OnCalculate()
//--- если это первый вызов OnCalculate() 
   if(prev_calculated==0)
     {
      ArrayInitialize(TSIBuffer,EMPTY_VALUE);
     }

Pero no se recomienda hacerlo por la siguiente razón: durante el funcionamiento del terminal, se reciben las cotizaciones del símbolo, sobre cuyos datos se calcula el indicador. Así, el número de barras aumentará con el tiempo, y el terminal asignará memoria adicional para los búferes de los indicadores.

Pero los valores de los elementos de la matriz recién adjuntados tendrán cualquier valor, porque cuando se reasigna la memoria para cualquier matriz, no hay inicialización. Y la inicialización puede dar una confianza engañosa de que todos los elementos del array, a los que no hemos asignado explícitamente ningún valor, se llenarán con el mismo valor con el que inicializamos el array la primera vez. Esto no es cierto, y nunca debemos confiar en que el valor de alguna variable o elemento de la matriz se inicialice con el valor que queremos.

Es necesario establecer un valor para cada elemento del buffer del indicador, y si el valor del indicador para esta barra no está definido (no se calcula, de acuerdo con el algoritmo implementado en el indicador), entonces para tales casos se debe establecer explícitamente un valor vacío. Por ejemplo, el valor del buffer del indicador se calcula utilizando la operación de división, y en algún momento puede resultar que el divisor es igual a cero.
 
Rosh:

En realidad puede haber de todo, lo que pasa es que suele haber suerte de que haya cero. El artículoIndicator from Indicator in MQL5 lo dice explícitamente:


Este es exactamente el problema que me gustaría resolver a nivel de lenguaje, porque la inicialización del último valor requerirá líneas adicionales de código donde puede haber errores.

De esta manera, puede estar seguro de que existe el valor exacto y, en base a esto, puede construir más algoritmos.

 
Urain:

Este es exactamente el problema que me gustaría resolver a nivel de lenguaje, porque la inicialización del último valor requerirá líneas adicionales de código que pueden contener errores.

De este modo, puede estar seguro de que existe un valor exacto y, sobre esta base, puede construir más algoritmos.

Yo también me enfrenté a este problema. Apoyo: hacer una solución a nivel lingüístico.
 
Lizar:
Yo también me he encontrado con esto. Apoyo: hacer la solución a nivel lingüístico.
+1
 

Construir 425

Me confunde esta situación con el probador: el EA se ejecuta varias veces en las mismas condiciones, pero los resultados de las ejecuciones son diferentes. La diferencia es pequeña, pero...

Comprobado en dos máquinas, obtengo 2 resultados diferentes, con aproximadamente la misma probabilidad. ¿Qué significa eso?

Razón de la queja: