¿Cómo se algoritmiza la detección de los grupos de alimentación MA? - página 2

 
Dmitry Fedoseev:

Me da pereza inventar más. Hay algunos indicios de que, en principio, el problema tiene solución.

Todos estos datos son sólo un mapa de calor de los precios anteriores. Vista lateral. 😉

Y a diferencia de la media, el mapa de temperaturas puede extenderse hacia el futuro. Y los apagones, son arneses fáciles de buscar
 
Maxim Kuznetsov:
Todas estas fuentes son sólo un mapa de calor de los antiguos precios. Vista lateral.

Y a diferencia de la media, el mapa de temperaturas puede extenderse hacia el futuro. Y los apagones, son fáciles de encontrar, ¿no?

Sí, lo es.

Es fácil cuando tienes estereotipos ya hechos.

Y resolverlos no es tarea fácil...

Gracias por la recomendación.
 
Mikhail Toptunov:

Sí, claro.

Es fácil cuando tienes estereotipos ya hechos.

No es fácil elaborar los estereotipos...

Gracias por la dirección.

Un algoritmo aproximado para calcular un mapa térmico (por ejemplo, para 100 bares):

para todos los Close de 1 a 100 :

Close[N]=X añadirá al mapa de calor la suma de la fila heatmap[Resolution(X)]+={X/N} + {X/(N+1)}+{X/(N+2)}... hasta 100.
Lo que está entre corchetes son los "componentes" de los promedios, sólo resaltados.
Resolution(X) - "resolución", por ejemplo, 10 puntos Round((X-MinimalX)/Punto/10)

obtener un vector en el que los máximos locales que necesita encontrar.

Este vector es prácticamente un perfil vertical de precios

 

ahora que has empezado...

La agrupación directa de curvas puede detectarse de forma sencilla y rápida.

Alg.: búsqueda de un grupo máximo de puntos dentro de D en un eje. (probablemente más fácil de dibujar, pero no es un artista)

para cada punto X del eje secundario, marca +1 en X+D y -1 en X-D.

A continuación, recorra el eje suplementario y cuente la suma acumulada de marcas. Al mismo tiempo recordar el máximo, su duración y posición.

TODO.

Pero la opción del perfil vertical o del mapa de temperatura es mejor, aunque sea larga y consuma muchos recursos

porque 1) se cuenta directamente desde los precios 2) mantiene conexión matricial con SMA 3) está conectado a la pila 4) es variable - puedes "jugar" con los fundidos, el desenfoque y encontrar algo propio

 
Mikhail Toptunov:

He probado a recalcular las repeticiones de MA por precio, por periodo.

Hice lo siguiente:

- determinó el momento de cada transición de MA de una dirección a otra - señal1

- tras recibir los datos, contar el número de repeticiones de la señal1 en una barra

pero el resultado resultó ser demasiado ruidoso


entonces he detectado que la MA de la barra actual tiene un periodo decreciente en la siguiente barra, es decir, el paquete se desplazó hacia abajo por periodo

Empecé a conectar los datos en cadena a la señal1 y en los datos obtenidos encontré el momento de la transición


Pero no funciona igual, hace algún ruido o no se ve.



Maldita sea, el patrón no funciona, la ventana superior está vacía.


Lo ideal es conseguir los valores marcados con un marcador azul

Maxim te dijo correctamente

Tomas tu MA con el periodo máximo, tomas el mínimo

y eso es todo, aquí están - los alimentos.

El patrón funciona muy bien, todo es claramente visible y comprensible:


 

Otra opción

1

Archivos adjuntos:
22.mq5  4 kb
 

Y una más

Archivos adjuntos:
23.mq5  6 kb
 
Podrías estar una semana o un mes...
 
Maxim Kuznetsov:

Algoritmo de cálculo aproximado del mapa térmico (por ejemplo, para 100 bar):

para todos los Close de 1 a 100 :

Close[N]=X añadirá al mapa de calor la suma de la fila heatmap[Resolution(X)]+={X/N} + {X/(N+1)}+{X/(N+2)}... hasta 100.
Lo que está entre corchetes son los "componentes" de los promedios, sólo resaltados.
Resolution(X) - "resolución", por ejemplo, 10 puntos Round((X-MinimalX)/Punto/10)

obtener un vector en el que los máximos locales que necesita encontrar.

Este vector es, de hecho, un perfil vertical de precios.

Estoy tratando de integrar la fórmula... Por lo general, estoy apretado...

#define           Pmax 100   //размер массива по периоду

void ...
{
   for(int p=5; p<=Pmax; p++) // отбор по периодам
      for(int b=rates_total-Pmax; b<rates_total; b++)
        {
         double pr=sm.d[p-1].m[b]; // массив значений цен МА        p-период, b-бар        
        }
}

Tengo el valor de cada período para cada barra - pr

¿Qué debería obtener al final del cálculo?

- Un vector vertical (matriz de valores) para cada barra,

si calculo los valores de la primera barra

heatmap[Round((pr-MininalX)/Point/10)]+=pr;

MininalX - valor de precio mínimo de 100 períodos de MA

Sé que estoy diciendo tonterías, así que, por favor, tened piedad).

 
Mikhail Toptunov:

Tratando de integrar la fórmula... Estoy muy, muy apretado...

Tengo el valor de cada período para cada barra - pr

¿Qué debería obtener al final del cálculo?

- Un vector vertical (matriz de valores) para cada barra,

si calculo los valores de la primera barra

MininalX - valor de precio mínimo de 100 períodos de MA

Sé que estoy diciendo tonterías, así que, por favor, tened piedad).

Sí, deberías obtener un "vector vertical" de sumas. Cada elemento del vector es responsable de, por ejemplo, 10 puntos.

Así que para un bar:

1. recorremos los precios de las barras Pmax, para determinar el máximo, el mínimo y a partir de ellos el tamaño del vector.

2. Revisar una vez más los precios de cada uno de ellos:

2.1 determinar en qué elemento del vector hay que sumar

2.2 determinar la cantidad a añadir. Para un desplazamiento de N, añadiremos PRECIO * (suma de 1/N 1/(N+1) 1/(N+2) . 1/Pmax) .
Lo que está entre paréntesis es la diferencia de dos series armónicas = H(Pmax)-H(N-1), puedes contar rápidamente si quieres

---

Por qué es así: el precio a la distancia de N barras "caerá" sólo en el grupo SMA de Pmax a N. No importa menos de N, y por debajo de Pmax no contamos

en cada SMA los pesos serán 1/periodo, es decir, en todos a la vez 1/N 1/(N+1) 1/(N+2) ...