Errores y sugerencias para mejorar CopyTicks() y CopyTicksRange() después de la compilación 1485. - página 3

 
MetaQuotes Software Corp.:
Gracias por el mensaje, el error ha sido corregido - ahora también funcionará en los indicadores. Pronto se publicará una actualización.
Por favor, dígame si la velocidad de obtención de los ticks a través de CopyTicksRange() aumentará?
 
Compilación 1491 - la documentación del idioma en ME no está actualizada. La información sobre CopyTicksRange() sólo está disponible en el sitio web.
 
En el probador, los ticks del "pack" (que tienen el mismo tiempo de mseg) en este momento (build 1495) se dan de uno en uno. Y el probador calcula cada uno por separado. En realidad, esto no puede ser así.
 

Creo que he venido al lugar correcto. Estimados miembros del foro, he estado luchando con este problema por mi cuenta durante mucho tiempo, pero parece que no puedo resolverlo. Espero que pueda ayudar.

La situación es la siguiente: broker Finam (Whotrades), cuenta MMA. Trabajo con 26 valores rusos, es decir, tengo 26 ventanas abiertas y tengo una copia de mi Asesor Experto colgada en cada ventana. Utilizan la biblioteca común de C++, que tiene una ventana común para gestionar y mostrar la información de depuración.

Algunos parámetros de la estrategia dependen directamente de la cinta de ticks, por lo que es muy importante que todos los ticks pasen por el algoritmo. Por supuesto, fue una sorpresa saber que OnTick() no funciona en cada tic, y no siempre, incluso en un tic. Como resultado, he llegado a la necesidad de utilizar las funciones CopyTicks y CopyTicksRange por temporizador. Debido a grandes esfuerzos (y no está escrito en ninguna parte) he descubierto, que datetime*1000 es exactamente el número de milisegundos desde 1970, pero no es el punto.
El resultado final de lo que tenemos ahora es un bloque de código, que, onTimer, desde las 10 de la mañana comienza a solicitar los últimos datos de los ticks.

El problema es que, por alguna razón es importante, en el primer día después del reinicio de metatrader, para algunos valores, los datos de garrapatas comienza a llegar sólo a las 11 am (más o menos), el día siguiente - todo es normal, comienza a las 10 am. La lista de estos valores no está fijada de ninguna manera, en algún primer día los ticks pueden no venir para algunos valores, en algún otro - para otros.
Pensaba que el problema era el almacenamiento en caché de los ticks. Pensé que era un problema de sincronización incorrecta, pero resultó no ser el caso. Además, parece que si CopyTicks(Range) no pudiera devolver los datos, podría devolver un error (-1) y todo tendría sentido. Pero devuelve 0, el array también es cero y GetLastError devuelve ERR_SUCCESS. Es decir, es como si esos ticks no existieran, lo cual es extraño ya que están presentes en la cinta de la ventana.

Estoy perdido. Espero que me puedan decir qué hacer, o al menos la dirección en la que moverme.

Si necesitas proporcionar el código, con el siguiente comentario lo limpiaré de los comandos "extra" y lo publicaré.

Gracias.

 
antru:

Sí, un código es deseable. ¿Es una cuenta real o demo? ¿Cuál es la construcción del terminal?

Sinceramente, no sé si alguien aquí trabaja con su corredor. Si nadie aquí reacciona a su mensaje - escriba al ServiceDesk, puede enlazar directamente a su mensaje. También tendrán que proporcionar un código.

 
antru:
Es mejor que vayas directamente al servicio técnico con el código para reproducirlo.
 
Alexey Kozitsyn:

Sí, un código es deseable. ¿Es una cuenta real o demo? ¿Cuál es la construcción del terminal?

Sinceramente, no sé si alguien aquí trabaja con su corredor. Si nadie aquí reacciona a su mensaje - escriba al ServiceDesk, puede enlazar directamente a su mensaje. También tendrán que proporcionar un código.

La cuenta es real, última compilación, 1525. Creo que esto es lo que hay que hacer. Cree el código de toma de ticks desnudo sin el algoritmo de la estrategia. Hazlo. Si no funciona, debes llamar al servicio técnico. Si funciona, quizá haya que buscar los errores en el propio código.

Gracias por mencionar el servicio de asistencia, no sabía que fuera posible. He mirado en la web de metaquotes, todos los contactos son números de teléfono en chipre y china, ni un solo email.

 
Andrey Khatimlianskii:
Mejor ir directamente al servicio técnico con el código para reproducirlo.
Gracias.
 
antru:

La cuenta es real, la construcción es la última, 1525. Creo que esto es lo que debemos hacer. Haga un código de toma de ticks desnudo sin el algoritmo de la estrategia. Hazlo. Si no funciona, llévalo al servicio técnico. Si funciona, quizá haya que buscar los errores en el propio código.

Gracias por mencionar el servicio de asistencia, no sabía que fuera posible. He mirado en la web de metaquotes, todos los contactos son números de teléfono en chipre y china, ni un solo email.

Exactamente lo que necesita, su estrategia, en este caso, sólo se interpondrá en la identificación del problema. Lo que se necesita es un código de cómo se solicitan las garrapatas.
 
antru:

Creo que he venido al lugar correcto. Estimados miembros del foro, he estado luchando con este problema por mi cuenta durante mucho tiempo, pero parece que no puedo resolverlo. Espero que pueda ayudar.

La situación es la siguiente: broker Finam (Whotrades), cuenta MMA. Trabajo con 26 valores rusos, es decir, tengo 26 ventanas abiertas y tengo una copia de mi Asesor Experto colgada en cada ventana. Utilizan la biblioteca común de C++, que tiene una ventana común para gestionar y mostrar la información de depuración.

Algunos parámetros de la estrategia dependen directamente de la cinta de ticks, por lo que es muy importante que todos los ticks pasen por el algoritmo. Por supuesto, fue una sorpresa saber que OnTick() no funciona en cada tic, y no siempre, incluso en un tic. Como resultado, he llegado a la necesidad de utilizar las funciones CopyTicks y CopyTicksRange por temporizador. Debido a grandes esfuerzos (y no está escrito en ninguna parte) he descubierto, que datetime*1000 es exactamente el número de milisegundos desde 1970, pero no es el punto.
El resultado final de lo que tenemos ahora es un bloque de código, que, onTimer, desde las 10 de la mañana comienza a solicitar los últimos datos de los ticks.

El problema es que, por alguna razón es importante, en el primer día después del reinicio de metatrader, para algunos valores, los datos de garrapatas comienza a llegar sólo a las 11 am (más o menos), el día siguiente - todo es normal, comienza a las 10 am. La lista de estos valores no es fija de ninguna manera, en algún primer día los ticks pueden no venir para algunos valores, en algún otro día - para otros.
Pensaba que el problema era el almacenamiento en caché de los ticks. Pensé que era un problema de sincronización incorrecta, pero resultó no ser el caso. Además, parece que si CopyTicks(Range) no pudiera devolver los datos, podría devolver un error (-1) y todo tendría sentido. Pero devuelve 0, el array también es cero y GetLastError devuelve ERR_SUCCESS. Es decir, es como si estos ticks no existieran, lo cual es extraño ya que están presentes en la cinta de la ventana.

Estoy perdido. Espero que me puedan decir qué hacer, o al menos la dirección en la que moverme.

Si necesitas proporcionar el código, con el siguiente comentario lo limpiaré de los comandos "extra" y lo publicaré.

Gracias.

Intenta utilizar todas las formas posibles de obtener ticks y OnTisk y CopyTicks, y luego compara los resultados y utiliza la más adecuada.