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

 
prostotrader:

Aquí en mi código es la prevención de la duplicación:

Pues entonces :) hay una pérdida de ticks en tu código.
 
Yury Kulikov:
Pues entonces :) hay una pérdida de ticks en tu código.

:) pero por alguna razón son redundantes :)

Muchas gracias Yuri, ahora lo investigaré.

 

Efectivamente, al cambiar a COPY_TICKS_TRADE - el error de mezcla de ticks desapareció, pero al mismo tiempo en el modo COPY_TICKS_TRADE no se pueden recibir las banderas

  • TICK_FLAG_BUY - el tick se ha producido como resultado de una operación de compra
  • TICK_FLAG_SELL - El tick se produjo como resultado de una operación de venta

 
Karputov Vladimir:

Efectivamente, al cambiar a COPY_TICKS_TRADE - el error de mezcla de ticks desapareció, pero al mismo tiempo en el modo COPY_TICKS_TRADE no se pueden recibir las banderas

  • TICK_FLAG_BUY - el tick se ha producido como resultado de una operación de compra
  • TICK_FLAG_SELL - El tick se produjo como resultado de una operación de venta

Las banderas vienen como resultado de un comercio real (las estoy probando ahora)
 
Yury Kulikov:
Pues entonces :) hay una pérdida de ticks en tu código.

Yuri, prueba mi indicador (mira bien)

Espero a que aparezcan las garrapatas, en lugar de verlas en el historial.

Copio cada vez, antes de que aparezcan nuevas garrapatas.

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

"0" es el número de garrapatas que han reaparecido.

Si copiado = 0, no hay nuevos ticks.

Si eliminamos este "apoyo".

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

entonces definitivamente habrá una duplicación.

La tarea no consiste en ver el historial de ticks, sino en mostrar el feed de ticks en tiempo real.

 
prostotrader:
En el real entran las banderas (estoy probando en el real ahora mismo)

Sí, así es. Me confundí conCOPY_TICKS_INFO.

Añadido:

Sin embargo, en el modo COPY_TICKS_ALL los ticks, algunos, llegan desordenados.

 
prostotrader:

Yuri, prueba mi indicador (mira con atención)

Hay demasiadas letras en tu código :)

El algoritmo es sencillo. En OnCalculate() mira el volumen actual, si ha cambiado, entonces carga los últimos ticks, recuerda cuántos ticks había en el último momento (el mismo valor time_msc), para que la siguiente llamada CopyTicks() corte estos ticks del cálculo.

 
Yury Kulikov:

Hay demasiadas letras en tu código :)

El algoritmo es sencillo. En OnCalculate() mira el volumen real, si ha cambiado, entonces carga los últimos ticks, recuerda cuántos ticks había en el último momento (el mismo valor time_msc), para cortar estos ticks del cálculo en la siguiente llamada CopyTicks().

Gracias, creo que sé cómo resolver el problema...
 
Yury Kulikov:

Hay demasiadas letras en tu código :)

El algoritmo es sencillo. En OnCalculate () mira el volumen actual, si ha cambiado, descarga los últimos ticks, y recuerda cuántos ticks había en el último momento (el mismo valor time_msc), así la siguiente llamada CopyTicks () excluye estos ticks del cálculo.

Yuri, muchas gracias de nuevo por los competentes consejos.

Hice todo y funciona perfectamente, pero durante más de 3 horas no hay ninguna situación que

He descrito :)

 

¡Bueno, finalmente! ¡Funcionó!

Todo es correcto y los ticks ya no se duplican ni se pierden.

La demo está en el archivo ZIP, y si quieres comprobarlo tú mismo, la versión de depuración está en el sótano.

Archivos adjuntos:
Razón de la queja: