Discusión sobre el artículo "Desarrollo de un sistema de repetición — Simulación de mercado (Parte 01): Primeros experimentos (I)"

 

Artículo publicado Desarrollo de un sistema de repetición — Simulación de mercado (Parte 01): Primeros experimentos (I):

¿Qué te parece crear un sistema para estudiar el mercado cuando está cerrado o simular situaciones de mercado? Aquí iniciaremos una nueva secuencia de artículos para tratar este tema.

Este código creará las barras con un periodo de 1 minuto, que es el mínimo requerido por la plataforma para generar cualquier otro periodo del gráfico. Las partes resaltadas no forman parte del código en sí, pero son útiles para analizar la barra de 1 minuto. Nos permiten comprobar si se está creando dentro de ese marco temporal. Si tarda mucho más de 1 minuto en crearse, tendremos que hacer algo al respecto. Sin embargo, si se está creando en menos de 1 minuto, tal vez el sistema es viable desde el principio.

Ejecutando este sistema, tendremos el resultado que se muestra en el siguiente vídeo:



Autor: Daniel Jose

 

¿Qué sentido tiene el siguiente código?

 17        struct st00
 18       {
 19           datetime dt;
 20           int      milisec;
 21           double   Bid,
 22                    Ask,
 23                    Last;
 24           long     Vol;
 25           uchar    flag;
 26       }st00 m_ArrayInfoTicks[];
 53      m_ArrayInfoTicks[m_ArrayCount].dt = macroRemoveSec ( StringToTime ( StringSubstr (szInfo, 0 , 19 ))); 
 54      m_ArrayInfoTicks[m_ArrayCount].milisec = ( int ) StringToInteger ( StringSubstr (szInfo, 20 , 3 ));   
Si se eliminaron los segundos en la línea 53, entonces los milisegundos y su uso pierden todo significado en la línea 54.
Aunque, los añades a la estructura.
Los eventos del temporizador se generan independientemente. Y cada tick viene de acuerdo a un temporizador, y no en milisegundos y segundos (que son eliminados).
Los milisegundos ahora pesan en el aire, como espacio extra de memoria. Y operaciones innecesarias para el llenado.
 
Además, no ha resuelto otro problema que permite reducir la construcción de una barra de minutos.
Por ejemplo, los tiempos resaltados en rojo y azul son los mismos, donde el último precio puede o no ser el mismo.
Estos ticks pueden comprimirse y reducir en gran medida el tiempo de construcción de una barra de minutos.
 449      2021.10 . 22        09 : 00 : 38.649      107900    107905                    6
 450      2021.10 . 22        09 : 00 : 38.651                      107900    1.00000000        88
 451      2021.10 . 22        09 : 00 : 38.651                      107895    5.00000000        88
 452      2021.10 . 22        09 : 00 : 38.651                      107890    5.00000000        88
 453      2021.10 . 22        09 : 00 : 38.651                      107885    3.00000000        88
 454      2021.10 . 22        09 : 00 : 38.651                      107880    15.00000000       88
 455      2021.10 . 22        09 : 00 : 38.651                      107880    3.00000000        88
 456      2021.10 . 22        09 : 00 : 38.651                      107875    16.00000000       88
 457      2021.10 . 22        09 : 00 : 38.651                      107870    2.00000000        88
 458      2021.10 . 22        09 : 00 : 38.654                      107875    1.00000000        88
 459      2021.10 . 22        09 : 00 : 38.654                      107875    1.00000000        88
 460      2021.10 . 22        09 : 00 : 38.654                      107880    1.00000000        88
 461      2021.10 . 22        09 : 00 : 38.659                      107880    2.00000000        88
 462      2021.10 . 22        09 : 00 : 38.659                      107885    2.00000000        88
 463      2021.10 . 22        09 : 00 : 38.660                      107885    1.00000000        88
 464      2021.10 . 22        09 : 00 : 38.660                      107890    3.00000000        88
 465      2021.10 . 22        09 : 00 : 38.662                      107885    3.00000000        88
 466      2021.10 . 22        09 : 00 : 38.662                      107880    3.00000000        88
 467      2021.10 . 22        09 : 00 : 38.662                      107875    2.00000000        88
 468      2021.10 . 22        09 : 00 : 38.662                      107895    3.00000000        88
 469      2021.10 . 22        09 : 00 : 38.662                      107900    1.00000000        88
 470      2021.10 . 22        09 : 00 : 38.664                      107880    1.00000000        88       
Pero, usted eliminó los segundos en la línea 53.

53      m_ArrayInfoTicks[m_ArrayCount].dt = macroRemoveSec ( StringToTime ( StringSubstr (szInfo, 0 , 19 ))); 
54      m_ArrayInfoTicks[m_ArrayCount].milisec = ( int ) StringToInteger ( StringSubstr (szInfo, 20 , 3 ));   
Y dejaste los milisegundos en la línea 54.
Lo que hace imposible realizar esta compresión con precisión. No hay vinculación de milisegundos a segundos - se ha eliminado.
Por supuesto, hay una baja probabilidad de que el valor de milisegundos se mueva al siguiente segundo, e incluso continúe en los siguientes ticks. Pero está ahí.
Hay una garantía del 100% de exactitud sólo cuando se mueve de una barra de minutos a la siguiente - hay una unión de milisegundos a minutos.
 
¿Necesita milisegundos para comprimir los ticks en el futuro? ¿Lo he entendido bien?
Bueno, "en el futuro" - para mí - todavía no he leído más. Para ti, supongo, esto ya es "en el pasado"...)))
Si esto es así, entonces estoy de acuerdo en que los segundos se puede quitar - la probabilidad de una coincidencia es extremadamente baja.)))
 
¡Oh, un milagro! Si comprime milisegundos, entonces el tiempo de formación de la vela minuto será 00:01:06. Contra 00:01:52 - sin compresión. Ganamos 46 segundos!)))
 

Como resultado, con todas las ediciones.


se crearon 1153.809 posiciones de movimiento.

Ticks borrados = 1066231

Comprobando la velocidad de ejecución . 2023.12.02 01:52:21 ---- 2023.12.02 01:53:17

Tiempo para construir la primera vela: 00:00:56 segundos)))

¡Ganamos 56 segundos!

Exactamente la mitad.
 

Gracias por su gran trabajo.

Tengo una pregunta. ¿Es posible añadir la opción de rebobinado a la repetición? Me refiero a volver a las velas anteriores y jugar de nuevo.