Símbolos personalizados. Errores, fallos, preguntas, sugerencias. - página 28

 

Hace unos días me encontré con este error al crear un símbolo personalizado. He comprobado muchas cosas a mano. También noté un error muy extraño, que después de ArrayCopy algunos ticks obtuvieron valores aleatorios. Como era bastante doloroso repetirlo en máquina limpia, he generado a partir de calcos otro sintético personalizado, y la actitud ante los informes aquí últimamente es peculiar, a saber, ignorar por completo, no me he puesto a hacer un informe. Pero se resolvió el problema con una sola llamada aCustomTicksAdd. Es decir, todos los tics al principio se llenan en una matriz, en la que se copian manualmente y luego por una llamada al símbolo personalizado. De esta manera, no se lanzan errores. Pruébalo.

P.D. Debo añadir, que me he encontrado con todo tipo de bugs extraños con CopyTicks, he cambiado a CopyTicksRange.

 
fxsaber:

He mirado el código más de cerca. Le faltan garrapatas al recibir las porciones. La situación es posible cuando Ticks[Limit - 1].time_msc == Ticks[Limit + k], k >= 0.

En consecuencia, al añadir un salto, las banderas pueden no coincidir.


Lo omito intencionadamente en esta prueba para garantizar la ausencia de solapamiento, porque la etiología del problema aún no está clara, y puede ser causada por garrapatas duplicadas (por analogía con Andrey, decidí excluir esa posibilidad por el método "rápido y sucio").

En cuanto a las banderas, por favor, explíquese. El contenido de los ticks (incluyendo las banderas) nunca cambia, y no he leído nada sobre alguna influencia de las banderas en la secuencia de los ticks. Al menos, la descripción del código de error no dice nada sobre las banderas.

 
Stanislav Korotky:

En cuanto a las banderas, por favor, explíquese. Nadie cambia el contenido de los ticks (incluyendo las banderas), y no he leído nada sobre la influencia de las banderas en la secuencia de los ticks. Al menos la descripción del código de error no dice nada sobre banderas.

En cuanto a las banderas, es una hipótesis. Hace un tiempo tuve un problema con ellos, así que yo mismo generé banderas para las garrapatas externas antes de enviarlas.


Por ejemplo, después de pasar el primer tick tiene un precio de oferta diferente, pero no hay ninguna bandera al respecto.

 

No está claro por qué esta línea, si la variable _start con ms incrementada en uno no se utiliza en ningún otro lugar.
Y cuando la función sale, se destruye.
Por lo que veo, el desplazamiento de tiempo no se utiliza ni se recuerda en ningún sitio.
Y por qué se asigna algo a esta variable _start, que sirve como variable de entrada.
Devolverá este valor a la función while y se producirá un bloqueo en su uso.
Por lo tanto, el código es bastante confuso y poco claro. O no entiendo esta construcción ))

_start = array[size - 1].time_msc + 1;
 
Roman:

No está claro por qué esta línea, si la variable _start con ms incrementada en uno no se utiliza en ningún otro lugar.
Y cuando la función sale, se destruye.
Por lo que veo, el desplazamiento de tiempo no se utiliza ni se recuerda en ningún sitio.
Y por qué se asigna algo a esta variable _start, que sirve como variable de entrada.
Devolverá este valor a la función while y se producirá un bloqueo en su uso.
Por lo tanto, el código es bastante confuso y poco claro. O quizás no entiendo esta construcción))

Esta referencia de la variable se lanza en un parámetro de la función "en su lugar" desde el código de llamada, cambia constantemente y se utiliza en las iteraciones.

 
fxsaber:

Sobre las banderas: una hipótesis. Una vez hubo un problema con ellos, así que para las garrapatas de terceros generé yo mismo las banderas antes de enviarlas.


Por ejemplo, después de pasar el primer tick tiene un precio de oferta diferente, pero no hay ninguna bandera al respecto.

La idea es clara. Pero sin la explicación de MQ todo quedará en el plano de nuestra especulación (en cuanto a la posible influencia en la aparición de tal o cual error).

 
Stanislav Korotky:

Esta referencia variable - lanzada en un parámetro de la función "en su lugar" desde el código de llamada, cambiando constantemente y se utiliza en las iteraciones.

Sí, no me fijé en la referencia y quise ofrecerla, pero está ahí.
Intente asignar explícitamente una variable para ahorrar más tiempo.

 

Un nuevo misterio. Problema con CopyTicks en la build 2507, funcionaba bien en las builds más antiguas (particularmente en la 2374).

Lo he reducido a un simple script de prueba en la aplicación. Pide nuevos ticks desde el anterior sondeo.

Poco después de la primera pasada del bucle con éxito, el script comienza a copiar los ticks en el array con un tiempo más lento que el especificado en el parámetro from, es decir, desde el principio del día actual.

¿Cuál es el problema?

Archivos adjuntos:
CopyTicks.mq5  1 kb
 
Stanislav Korotky:

Un nuevo misterio. Problema con CopyTicks en la build 2507, funcionaba bien en las builds más antiguas (particularmente en la 2374).

Lo he reducido a un simple script de prueba en la aplicación. Pide nuevos ticks desde el anterior sondeo.

Poco después de la primera pasada del bucle con éxito, el script comienza a copiar los ticks en el array con la hora que se sabe que es anterior a la especificada en el parámetro from, es decir, desde el principio del día actual.

¿Cuál es el problema?

Confirmo el error en el 2509.

Esta variante no parece fallar.

int size = CopyTicksRange(_Symbol, array, COPY_TICKS_ALL, cursor);
 
Ambigüedad con los símbolos personalizados. Es posible crear dos símbolos que sólo se diferencian por las mayúsculas y minúsculas en las letras (por ejemplo, "xEURUSD" y "XEURUSD"), pero añadir las comillas a "duplicado" no funciona - CustomRatesUpdate devuelve 0, sin error. Tenemos que permitir que los nombres distingan entre mayúsculas y minúsculas (para que esos caracteres funcionen plenamente), o bien no permitir crear esos nombres "similares".