Mesa de todos los oficios. Acceso a través de MQL5 - página 3

 
prostotrader:

¿Alguien sabe cuál es el error?

El indicador funciona correctamente, pero se muestran más barras,

de lo que se estableció.

No he mirado el código, pero supongo que después de cada nueva barra, no tiene en cuenta que las líneas del indicador también se desplazan automáticamente hacia la izquierda (si te fijas en el gráfico). En otras palabras, es necesario desplazar las líneas del indicador hacia la derecha (al mirar el gráfico).
 
Karputov Vladimir:
No he mirado el código, pero supongo que tras la aparición de cada nueva barra, no tiene en cuenta que las líneas del indicador también se desplazan automáticamente hacia la izquierda (si te fijas en el gráfico). En otras palabras, cuando aparece una nueva barra, desplaza las líneas del indicador hacia la derecha (al mirar el gráfico).
Gracias, he encontrado el error.
Archivos adjuntos:
DealsLent.mq5  10 kb
 
prostotrader:
El toque final...

Resulta que no es el último ....

Necesita algo más de optimización.

Lo terminaré y lo probaré...

 
Si este es el caso, mantenga el indicador de garrapatas - indicador de interés abierto (ejecutado en una cuenta real conectada a la bolsa).
Archivos adjuntos:
 
Karputov Vladimir:
Si este es el caso, mantenga el indicador de garrapatas - indicador de interés abierto (ejecutado en una cuenta real conectada a la bolsa).
Me encantará escucharlo.
 

Se ha descubierto un grave problema:

Ticks duplicados con diferente start_time :(

int copied=CopyTicks(Symbol(),ticks,COPY_TICKS_ALL,start_time,0);

start_time es diferente y los ticks se copian repetidamente si

tienen el mismo tiempo

Lo describiré en detalle mañana.

Última construcción

Archivos adjuntos:
DealsLent.mq5  12 kb
 

No puedo dormir, así que pensé en escribir lo que está pasando.

(El código completo del indicador está en el post anterior).

Los ticks de la bolsa no llegan al terminal estrictamente por intervalos de tiempo,

pero en bloques (véase la captura de pantalla) Bloque 1, Bloque 2, etc.

El terminal los "almacena" y los muestra en la tabla, a medida que los recibe de la central (bloque a bloque).

Enambos bloques puede haber transacciones con la misma hora.

Si llamamos a CopyTicks() NO en tiempo real (digamos al día siguiente o a los pocos segundos),

entonces la función CopyTicks() devolverá los datos exactos.

Pero en tiempo real, ocurre lo siguiente:

int copied=CopyTicks(Symbol(),ticks,COPY_TICKS_ALL,start_time,0);

Si start_time = (23:49:58.114), obtenemos el bloque 1 por completo (marcado en rojo).

A continuación, esperamos el cambio de hora para obtener el bloque 2 (marcado con un círculo verde).

Para evitar la duplicación del bloque 1 (el OnBookEvent puede activarse muy rápidamente)

introducimos una comprobación para asegurarnos de que la hora ha cambiado

if(start_time==ulong(ticks[copied-1].time_msc)) return;

Cuando start_time = (23:49:58.596), deberíamos haber obtenido el bloque 2,

pero la función CopyTicks() devuelve tanto el bloque 2 como todos los ticks con el tiempo (23:49:58.114),

si el bloque 2 tiene al menos un tick con la misma hora (23:49:58.114).

Esto es una noticia muy triste.... :(

A menos que los desarrolladores arreglen esto, es imposible conseguir una cinta en tiempo real de las operaciones.


 
prostotrader:


¿Y por qué crees que los ticks se descargan de un tiempo determinado y FUTURO a la historia cuando consultas por tiempo? De hecho, cuando se solicitan ticks por tiempo, los ticks se descargan desde un tiempo determinado y en el FUTURO. Por ejemplo:

Datos de entrada (solicitud de 20000 ticks), tiempo 2016.08.25 20-00-00:

solicitar 20.000 ticks, hora 2016.08.25 20-00-00:


Recibir:

2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Получено тиков: 10823 код ошибки: 0
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Тик: 2016.08.25 20:00:00 bid: 14377.0 ask: 0.0 last: 0.0 [0]
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Тик: 2016.08.26 00:02:08 bid: 0.0 ask: 0.0 last: 0.0 [10822]
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Size 0 Mb

Es decir, los ticks se reciben desde la hora solicitada2016.08.25 20:00:00 hacia el FUTURO (el último tick tiene la hora2016.08.26 00:02:08)

Archivos adjuntos:
 
Karputov Vladimir:

¿Y por qué crees que los ticks se descargan de un tiempo determinado y FUTURO al historial cuando se consulta por tiempo? De hecho, cuando se solicitan ticks por tiempo, los ticks se descargan desde un tiempo determinado y en el FUTURO. Por ejemplo:

Datos de entrada (solicitud de 20000 ticks), tiempo 2016.08.25 20-00-00:



Recibir:

Es decir, los ticks se reciben desde la hora solicitada2016.08.25 20:00:00 hacia el FUTURO (el último tick tiene la hora2016.08.26 00:02:08)

No pienso en la profundidad, veo "hilvanada" la profundidad.

¿Por qué pensar?

Ejecute el indicador y compruébelo usted mismo.

¿Y acaso lees lo que está escrito?

Если мы вызываем CopyTicks() НЕ в реальном времени (скажкем, на следующий день),

то функция CopyTicks() будет возвращать точные данные.
 
Me di cuenta por casualidad cuando, por la tarde, había menos ofertas.