El indicador se corrompe - página 3

 
AnkaSoftware:

JIC, por favor, ten en cuenta que el problema no ocurre en plataformas de 32 bits. He proporcionado algo de código en uno de los posts anteriores.

Tienes dos (o más) máquinas separadas que no necesariamente están recibiendo exactamente los mismos datos. Por ejemplo, el sistema de 64 bits podría estar en un nodo VPS ocupado que ocasionalmente pierde tráfico y/o conexiones, por ejemplo, porque el nodo físico está operando en los extremos del uso del procesador o del ancho de banda. (Hay muchas otras explicaciones posibles; ésta es sólo una).

Hasta que no entiendas por qué el dibujo de lo que sean las líneas moradas se detiene cuando hay un hueco en las barras M1, entonces yo trataría todo lo demás como una coincidencia.

Termino volviendo a mi afirmación inicial: no hay ninguna razón por la que Windows de 64 bits deba causar problemas como los que describes. Mucha gente ha reportado en este foro que MT4 no funciona correctamente en las plataformas x, y, y z, sólo para que finalmente resulte que el problema estaba en su código. Usted ha descubierto el primer error de buena fe MQL4 en varios años en una pieza madura de software utilizado por literalmente millones de personas, o el problema es con su código. Es abrumadoramente probable, a partir de la evidencia hasta el momento - por ejemplo, los informes separados de usted que el problema se produce ya sea después de 16 horas o después de 3-4 horas - que el problema es causado por las fluctuaciones ocasionales en los datos que no se están atendiendo correctamente.
 

AnkaSoftware:

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

d) El uso del código es el siguiente

Declaraciones

<código>

#property ventana_del_gráfico



  1. No se instala en \Narchivos de programa* en Vista/Win7
  2. void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
    double a = (endlevel - startlevel) / (start - end);
    double y;
    int bar;
    for(int x = 0; x <= start - end; x++) {
    y = a * x;
    bar = start - x;
    serie[bar] = startlevel + y;
    }
    }
    No estoy seguro de lo que estás tratando de hacer aquí. Por un lado estás computando un montón de valores (inicio..fin) pero sólo almacenando UNO (serie[barra]) yo lo codificaría:
    void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {
       double a = (endlevel - startlevel) / (start - end);
       for(int x = start; x <= end; x++) serie[x] = a * x + startlevel;
    }

 
Se adjunta un ejemplo de indicador que reproducirá el problema. En la plataforma Windows de 64 bits, adjunte el indicador a un gráfico M1 y déjelo funcionar durante más de 4 horas.
Archivos adjuntos:
 
AnkaSoftware:
Se adjunta un indicador de muestra, que reproducirá el problema. En la plataforma Windows de 64 bits, adjunte el indicador a un gráfico M1 y déjelo funcionar durante más de 4 horas.
Lo siento, no tengo la paciencia para asignar una máquina limpia de 64 bits a esto y luego esperar 4 o más horas.

Sin embargo, si este indicador realmente reproduce el problema, entonces debo estar de acuerdo en que es interesante. No puedo ver inmediatamente donde cualquier problema interno podría estar escondido. (Suponiendo, como antes, que usted ha descartado definitivamente cosas como una correlación entre el problema que ocurre y un reciente blip en la conexión entre MT4 y el corredor. Usted ha mencionado su fe en CNS; usted no ha confirmado realmente que el diario de MT4 no contiene ninguna mención de los problemas de conexión, que a su vez podría estar causando el relleno de la historia de la barra).

Si usted quiere seguir la ruta de un problema de MT4, entonces parece más probable que se relaciona con el paso de las matrices de indicadores por referencia. Las matrices en MQL4 tienen propiedades extrañas como ser siempre estáticas, y supongo que es posible que haya un extraño problema latente con el paso de las matrices especiales del búfer del indicador por referencia que sólo desencadena problemas en Win64. Aunque la razón por la que el sistema operativo debería hacer una diferencia en un contexto como este sigue siendo un completo misterio.

Yo probaría a modificar DrawMoveEx() para que ya no tome una referencia a la matriz de indicadores, y en su lugar haya funciones separadas como DrawMoveEx_Down1(), DrawMoveEx_Up1(), etc. que simplemente se dirijan a los buffers como variables globales. Si esto supone una diferencia, entonces, enhorabuena, es casi seguro que has encontrado un error en MT4. Posiblemente el segundo de hoy.
 
AnkaSoftware:
Se adjunta un indicador de muestra, que reproducirá el problema. En la plataforma Windows de 64 bits, adjunte el indicador a un gráfico M1 y déjelo funcionar durante más de 4 horas.
Ha estado funcionando durante más de 5 horas en Windows 7 Ultimate 64 bits, sin problemas.
 
RaptorUK:
Ha estado funcionando durante más de 5 horas en Windows 7 Ultimate 64 bits, sin problemas.

JIC a) Tal y como me has sugerido, he modificado el código para eliminar la referencia, pero no se ha solucionado el problema. Adjunto el código modificado.

b) Las barras que faltan a las que te refieres, probablemente se deban a la condición de no operar, por lo que el broker no envió barras. En mi opinión, en caso de pérdida de conectividad, las barras que faltan están disponibles una vez que se restablece la conexión. Si ves mi código de ejemplo, no hay dependencia de que las barras sean contiguas

Raptor, gracias por la prueba. Tal vez necesites joom in para ver el error. Soy capaz de reproducir el problema en Windows Server 2008 R2 Enterprise. Así que podría ser un problema de O / S. Alguna idea, de donde obtener una lista de parches recomendados MT4, para una plataforma en particular.

.

Archivos adjuntos:
 
AnkaSoftware:

Alguna idea, de donde obtener una lista de parches recomendados por MT4, para una plataforma en particular.

No existe tal cosa. Simplemente hay una versión de MT4 que se ejecuta en todas las versiones de Windows, y no hay ninguna razón particular por la que debería haber más de una. No hay versiones o parches específicos para cada sistema operativo.
 
AnkaSoftware:
Se adjunta un indicador de muestra, que reproducirá el problema. En la plataforma Windows de 64 bits, adjunte el indicador a un gráfico M1 y déjelo funcionar durante más de 4 horas.
Sigue funcionando bien por lo que puedo decir... ¿cómo puedo reproducir el error?
 
RaptorUK:
Sigue funcionando bien por lo que veo... ¿cómo reproduzco el error?
No tiene que hacer nada. Aparte de ampliar el gráfico para ver si se ha producido el error.
 
AnkaSoftware:
No tienes que hacer nada. Aparte de ampliar el gráfico para ver si se ha producido el error.

Si busco líneas que parezcan estar desconectadas de las barras del gráfico (como en tu primer post) entonces no tengo ningún problema.

Razón de la queja: