Como vocês algoritmam a detecção de aglomerados de ração MA? - página 2

 
Dmitry Fedoseev:

Eu sou preguiçoso demais para inventar mais. Há alguma dica de que, em princípio, o problema é resolúvel.

Todas essas rações são apenas um mapa do calor dos preços anteriores. Vista lateral. 😉

E, ao contrário da média, o mapa de temperatura pode ser estendido para o futuro. E os apagões são fáceis de serem procurados.
 
Maxim Kuznetsov:
Todas essas rações são apenas um mapa do calor dos preços antigos. Vista lateral.

E, ao contrário da média, o mapa de temperatura pode ser estendido para o futuro. E apagões, eles são fáceis de encontrar

Sim, é!

É fácil quando se tem estereótipos prontos.

E trabalhá-las não é tarefa fácil...

Obrigado pela indicação!
 
Mikhail Toptunov:

Sim, certo!

É fácil quando se tem estereótipos prontos.

Não é fácil elaborar os estereótipos...

Obrigado pela direção!

Um algoritmo rudimentar para calcular um mapa térmico (por exemplo, para 100 bar):

para todos Fechar de 1 a 100 :

Close[N]=X adicionará ao heatmap a soma da linha heatmap[Resolution(X)]+={X/N} + {X/(N+1)}+{X/(N+2)}... até 100.
O que está entre parênteses curvos é a soma dos "componentes" das médias, apenas destacados.
Resolução(X) - "resolução", por exemplo, 10 pontos Round((X-MinimalX)/Ponto/10)

obtenha um vetor no qual você precisa encontrar os máximos locais.

Este vetor é praticamente um perfil vertical de preços

 

enquanto você está nisso...

O agrupamento direto de curvas pode ser detectado de forma simples e rápida.

Alg.: busca de um conjunto máximo de pontos dentro de D em um eixo. (provavelmente mais fácil de desenhar, mas não um artista)

para cada ponto X no eixo secundário, marcar +1 em X+D e -1 em X-D.

Em seguida, correr ao longo do eixo suplementar e contar a soma cumulativa das marcas. Ao mesmo tempo, lembrando o máximo, sua duração e posição.

TODOS.

Mas o perfil vertical ou opção de mapa de temperatura é melhor, embora longo e consumidor de recursos

porque 1) é contado diretamente dos preços 2) mantém conexão matricial com SMA 3) é conectado à pilha 4) é variável - você pode "brincar" com desbotamentos, desfocagem e encontrar algo de seu próprio

 
Mikhail Toptunov:

Eu tentei recalcular as repetições de MA por preço, por período.

Eu fiz o seguinte:

- determinou o momento de transição de cada MA de uma direção para outra - sinal1

- após receber os dados, contar o número de repetições de sinal1 em uma barra

mas o resultado acabou sendo muito ruidoso


então detectei que o MA da barra atual tem um período decrescente na barra seguinte, ou seja, o feixe foi deslocado para baixo por período

Comecei a conectar os dados em uma cadeia ao sinal1 e nos dados obtidos, encontrei o momento da transição


Mas não funciona da mesma forma, faz algum barulho ou não aparece.



Droga, o padrão não funciona, a janela superior está vazia.


Idealmente, a tarefa é marcar os valores com um marcador azul

Maxim lhe disse corretamente

Você tira seu mestrado com o período máximo, você tira o mínimo

e é isso, aqui estão eles - as rações.

O padrão funciona muito bem, tudo é claramente visível e compreensível:


 

Outra opção

1

Arquivos anexados:
22.mq5  4 kb
 

E mais um

Arquivos anexados:
23.mq5  6 kb
 
Você poderia estar dentro por uma semana ou um mês...
 
Maxim Kuznetsov:

algoritmo de cálculo do mapa térmico aproximado (por exemplo, para 100 bar):

para todos Fechar de 1 a 100 :

Close[N]=X adicionará ao heatmap a soma do heatmap de linha[Resolução(X)]+={X/N} + {X/(N+1)}+{X/(N+2)}... até 100.
O que está entre parênteses curvos é a soma dos "componentes" das médias, apenas destacados.
Resolução(X) - "resolução", por exemplo, 10 pontos Round((X-MinimalX)/Ponto/10)

obtenha um vetor no qual você precisa encontrar os máximos locais.

Este vetor é na verdade um perfil vertical de preços.

Estou tentando integrar a fórmula... Estou geralmente apertado...

#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-бар        
        }
}

Eu tenho o valor de cada período para cada barra - pr

O que devo obter no final do cálculo?

- Um vetor vertical (matriz de valores) para cada barra,

se eu calcular valores para a primeira barra

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

MininalX - valor mínimo de preço de 100 períodos MA

Eu sei que estou falando bobagens, então por favor, seja misericordioso!)

 
Mikhail Toptunov:

Tentando integrar a fórmula... Estou realmente, realmente apertado...

Eu tenho o valor de cada período para cada barra - pr

O que devo obter no final do cálculo?

- Um vetor vertical (matriz de valores) para cada barra,

se eu calcular valores para a primeira barra

MininalX - valor mínimo de preço de 100 períodos MA

Eu sei que estou falando bobagem, então por favor tenha misericórdia!)

Sim, você deve obter um "vetor vertical" de somas. Cada elemento do vetor é responsável, por exemplo, por 10 pips.

Portanto, para um bar:

1. nós corremos através dos preços das barras Pmax, a fim de determinar o máximo, o mínimo e a partir deles o tamanho do vetor.

2. mais uma vez reveja os preços para cada preço:

2.1 determinar em qual elemento do vetor a adicionar

2.2 determinar o quanto adicionar. Para uma compensação de N, acrescentaremos PREÇO * (soma 1/N 1/(N+1) 1/(N+2) . 1/Pmax) .
O que está entre parênteses é a diferença de duas séries harmônicas = H(Pmax)-H(N-1), você pode contar rapidamente se quiser

---

Por que é assim: o preço à distância das barras N "cairá" apenas no grupo SMA de Pmax para N. Não importa menos do que N, e abaixo de Pmax não contamos

em cada SMA os pesos serão de 1/período, ou seja, de uma só vez 1/N 1/(N+1) 1/(N+2) ...