¿Cuál debería ser el vaso de los precios? - página 13

 
Реter Konow:

1. El programa está escrito en dos idiomas. El lenguaje de base es MQL5, y sobre él, mi lenguaje de marcado.

2. Se distribuye de la misma manera que se envía. Me refiero a las celdas correctas. Es difícil de explicar con palabras. Te enviaré el código más tarde. Por supuesto, tuve que sudar para meter los datos en las celdas correctas, pero este problema se resolvió.

3. Añadiré todo lo que se pida y que tenga sentido e importancia.

mql5 es bueno porque no habrá problemas de compatibilidad y legibilidad del código.
Y cómo se envían, no sabemos qué tipo de datos tomaste como base.
Stream, cast, Json.
Si el escalonamiento se hace en un bucle for, yo renunciaría a los bucles.
Cualquier bucle tiene tiempo de procesamiento, y eso es latencia.
Sólo hay unos 40 niveles de precios en el bombo, hacia arriba y hacia abajo.
Por lo tanto, para cada nivel escribiría su propia variable con el valor deseado, eliminando el bucle.

 
Roman:

mql5 es bueno, no habrá problemas de compatibilidad y legibilidad del código.
Y cómo se envían, no sabemos en qué tipo de datos se han basado.
Stream, cast, Json.
Si el escalonamiento se hace en un bucle for, yo renunciaría a los bucles.
Cualquier bucle tiene tiempo de procesamiento, y eso es latencia.
Sólo hay unos 40 niveles de precios en el bombo, hacia arriba y hacia abajo.
Por lo tanto, para cada nivel escribiría su propia variable con el valor deseado, eliminando el bucle.

Mira el código de la página anterior.

Centralizo los datos entrantes en relación con la celda central del vaso. El precio más cercano a la demanda se pone en la celda del centro y luego hacia arriba el resto de los precios en orden ascendente. Lo mismo ocurre con los precios de las ofertas y con sus ofertas.

 
Roman:

mql5 es bueno, no habrá problemas de compatibilidad y legibilidad del código.
Y cómo están mapeados, no sabemos qué tipo de datos tienes.
Stream, cast, Json.
Si el escalonamiento se hace en un bucle for, yo renunciaría a los bucles.
Cualquier bucle tiene tiempo de procesamiento, y eso es latencia.
Sólo hay unos 40 niveles de precios en el bombo, hacia arriba y hacia abajo.
Por tanto, para cada nivel escribiría su propia variable con el valor deseado, eliminando el bucle.

No sé cómo resolver el problema de la distribución de los datos entrantes sin un ciclo. ¿Puedes darme una pista?

A veces entran más de 40 niveles de precios. Algunos no caben en la taza. Así que hice una matriz de receptores de 100 celdas. Es imposible mostrar todo en el selector, pero se puede solicitar al motor.

 
Roman:

...
Por ello, prescribiría para cada nivel una variable con el valor necesario, excluyendo el ciclo.

Los datos se presentan en una matriz ordenada del precio más alto al más bajo. No hay límite en la cantidad de datos. Puede haber 60 precios con ofertas, 30 para cada lado, o puede haber 30 precios, todos con precios más altos que la demanda o más bajos que la oferta. Por lo tanto, sin un ciclo no hay manera de resolver el problema.

 
Реter Konow:

Los datos se presentan en una matriz ordenada del precio más alto al más bajo. No hay límite en la cantidad de datos. Puede haber 60 precios con ofertas, 30 para cada lado, o puede haber 30 precios, todos con precios más altos que la demanda o más bajos que la oferta. Por lo tanto, no es posible resolver el problema sin un ciclo.

Si la indexación de los elementos entrantes en el array no se rompe, podemos tomar cada elemento del array sin el bucle y asignarlo a nuestra variable.
Y ya asigna cada variable que contiene el valor a su propio nivel de celda.
O bien, puede asignar cada elemento de la matriz a un nivel a la vez.
Entonces también excluimos las variables, pero los datos no inicializados no son una buena práctica de codificación.

 

Se me ocurrió otra idea.
Para dividir la matriz recibida en dos matrices Oferta y Demanda
Y piensa en cómo utilizar la función CopyArray().

Tras aplicar ambos métodos, podemos medir la velocidad de procesamiento.
Y cuál dará el mejor resultado, y dejarlo.
 
Roman:

Si la indexación de los elementos entrantes en el array no está rota, podemos tomar cada elemento del array sin el bucle y asignarlo a nuestra variable.
Y ya cada variable que contiene el valor se asigna al nivel de la celda.
O bien, puede asignar cada elemento de la matriz a un nivel a la vez.
Entonces también excluimos las variables, pero los datos no inicializados no son una buena práctica de codificación.

Por desgracia, no hay precios ordenados en la matriz y su indexación no apunta a celdas específicas en el bombo. Los datos van de un precio más alto a uno más bajo, pero ahí termina el orden. Puede haber un punto entre los precios, o pueden ser 10 o 153. La barra deslizante muestra los últimos volúmenes de pedidos modificados en todo el rango en el que se encuentran. Si un precio de más de 150 pips desde el asc ha cambiado el número de órdenes limitadas, aparecerá en el array. Por lo tanto, no hay ningún orden en la matriz que no sea de mayor a menor y los datos no pueden ser reordenados de otra manera que no sea en un bucle.

 
Реter Konow:

Por desgracia, no hay indexación en la matriz. Los datos van de un precio más alto a uno más bajo, pero ahí termina el orden. Puede haber un punto entre los precios, o puede haber 10 o 153. La pila muestra los últimos volúmenes de pedido modificados para todo el rango en el que se encuentran. Si un precio de más de 150 pips desde el asc ha cambiado el número de órdenes limitadas, aparecerá en el array. Por lo tanto, no hay ningún orden en la matriz que no sea de más a menos, y los datos no pueden ordenarse más que en un bucle.

Hay una indexación por elementos del array en el array receptor.
Los datos van de mayor a menor precio, siempre están ordenados secuencialmente, ¿no es así?
Entonces, elige cualquier elemento necesario del array por índice, pero sin el bucle.
Y si es imposible captar mejor la oferta/solicitud debido al tamaño cambiante de los datos entrantes,
entonces tal vez deberíamos pensar en CopyArray()

 
Roman:

Hay una indexación por elementos del array en el array receptor.
Los datos van de mayor a menor precio, siempre están ordenados secuencialmente, ¿no es así?
Así que selecciona cualquier elemento deseado de la matriz de recepción por el índice, pero sin el bucle.

Ordenados secuencialmente. Pero:

  1. Pueden entrar más datos que las celdas de los vasos.
  2. No hay un orden claro entre los precios. Puede haber un precio por encima de la demanda y 7 precios por debajo de la oferta.
  3. Puede haber un espacio desigual entre los precios. Puede haber 1 punto entre el primero y el segundo, y 18 puntos o 1008 puntos entre el segundo y el tercero.
Por eso no sabrá qué precio es el más cercano al Ask y cuál es el más cercano al Bid, por lo que no sabrá qué precio debe estar en el medio del paquete sin hacer el ciclo.
 
Реter Konow:

Ordenados secuencialmente. Pero:

  1. Pueden entrar más datos que las celdas de los vasos.
  2. No hay un orden claro entre los precios. Puede haber un precio por encima de la demanda y 7 precios por debajo de la oferta.
  3. Puede haber un espacio desigual entre los precios. Puede haber 1 punto entre el primero y el segundo, y 18 puntos o 1008 puntos entre el segundo y el tercero.
Por lo tanto, sin hacer un ciclo, no se puede saber qué precio está más cerca del Ask y cuál del Bid y, por lo tanto, qué precio debe estar en el centro de la copa.

¿De dónde sacas esos datos tan torcidos? ))

1) Defina un rango claro de selección de datos, por ejemplo 20 arriba, 20 abajo.
y seleccionar sólo esta gama, y cualquier otra cosa no es importante para nosotros.

2. Dices que los precios van de mayor a menor y se ordenan de forma descendente.
Así que lo que puede venir más arriba o más abajo, no importa, no se fijan en los precios sino en los índices de la matriz.

2. Si te refieres a ordenar por la distancia entre los niveles de precios, no importa en absoluto, tenemos la indexación en la matriz de recepción.