El indicador se corrompe

 

Todo,

He desarrollado un indicador que funciona bien durante las primeras 16 horas más o menos, después se corrompe y empieza a dibujar líneas por todo el gráfico. También estoy comprobando el valor de IndicatorCounted() y su valor no se vuelve negativo cuando me salen las líneas corruptas. No quiero reiniciar los búferes de los indicadores ya que el historial de 'movimientos/líneas válidas' se perdería. ¿Alguna sugerencia para solucionar el problema?

Imágenes del indicador normal y corrupto disponibles en el archivo zip adjunto.

Archivos adjuntos:
images.zip  61 kb
 
No hay lectores de mente aquí - no hay código = no hay ayuda
 
WHRoeder:
No hay lectores de mente aquí - no hay código = no hay ayuda

Muchas gracias.
 

queridos,

¿puede alguien enviarme el enlace para descargar el metaEditor 4?

Gracias.

 
tiger961:

queridos,

¿puede alguien enviarme el enlace para descargar el metaEditor 4?

Gracias.


Tigre que necesita para iniciar un nuevo hilo en lugar de apilar en otros hilos.

El editor está disponible con la descarga gratuita del terminal MT4 de cualquier broker.

 

Algunas informaciones adicionales -

a) La corrupción de los indicadores sólo ocurre en la plataforma Windows de 64 bits

b) He tomado un volcado de la matriz de indicadores antes de la corrupción y después de la corrupción - los mismos están disponibles en el archivo xls adjunto con comentarios.

c) ¿El ajuste "Max Bars in Chart" se aplica sólo cuando se abre el gráfico? El recuento de barras y el recuento de indicadores asociados crece con cada barra adicional añadida.

d) El uso del código es el siguiente

Declaraciones

<código>

#property ventana_del_gráfico

#property indicator_buffers 8

#property indicador_color1 Rojo

#property indicador_ancho1 2

</código>

Para la inicialización del inidicador.

<código>

SetIndexBuffer(0, Down1);

SetIndexStyle(0, DRAW_LINE);

SetIndexEmptyValue(0, EMPTY_VALUE);

</código>

Para añadir los datos de la línea

<código>

void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {

double a = (endlevel - startlevel) / (start - end);

double y

int barra;


for(int x = 0; x <= inicio - fin; x++) {

y = a * x;

bar = inicio - x;

serie[bar] = nivel de inicio + y;

}

}

</código>

 
AnkaSoftware:
a) La corrupción de los indicadores sólo se produce en la plataforma Windows de 64 bits
No instale los archivos de programa* en Vista/Win7
 
WHRoeder:
No instale los archivos de programa* en Vista/Win7
Correcto, la instalación está en C:/metatrader4/<dir terminal>. Creo que este problema no se debe a problemas de ruta, sino a la corrupción de la memoria. El indicador funciona bien durante las primeras 3-4 horas, después de lo cual la corrupción comienza.
 

Sospecho que no es nada de eso...

He visto que ocurre algo similar cuando se añaden nuevos datos históricos al gráfico al desplazar el gráfico hacia la derecha.

 
RaptorUK:

Sospecho que no es nada de eso...

He visto que algo similar ocurre cuando se añaden nuevos datos históricos al gráfico al desplazar el gráfico hacia la derecha.

Hmm, "se añaden nuevos datos históricos al gráfico", ¿cómo? El indicador se inicia y se deja sin alterar. Tenemos un lookback fijo de 1000 barras. El indicador no carga ningún dato histórico.

¿Puede alguien del equipo de desarrollo echar un vistazo a esto?

 
AnkaSoftware:

Hmm, "se añaden nuevos datos históricos al gráfico", ¿cómo? El indicador se inicia y se deja sin alterar. Tenemos un lookback fijo de 1000 barras. El indicador no carga ningún dato histórico.

¿Puede alguien del equipo de desarrollo echar un vistazo a esto?

Estoy con RaptorUK en esto: es colosalmente improbable que esto sea un error en MT4 en lugar de su código, o algo relacionado con Windows de 64 bits. He visto informes de problemas de rendimiento y estabilidad con MT4 que resultaron ser bien fundados (por ejemplo , https://www.mql5.com/en/forum/135355), pero nunca he visto un informe de un error de lenguaje de MT4 que resultó ser correcto.

Permíteme señalar una diferencia entre tus capturas de pantalla de "Mover Normal" y "Mover Error". En "Mover Normal", no hay barras aparentemente perdidas. Mientras que en "Mover error", parece que faltan datos del gráfico. La mayoría de los marcadores en el eje X están separados por 16 minutos, pero el espacio entre el segundo y el tercer marcador es de 21 minutos (06:08 a 06:29). Esto puede o no ser el problema, pero yo empezaría a buscar en su código los lugares que asumen que va a haber una serie continua de barras. Por ejemplo, si actualmente son las 8 de la mañana, cualquier cosa en el código que suponga que (a) la barra de las 7 de la mañana es de hace 60 barras, o incluso (b) que existe una barra de las 07:00.