Come si fa ad algoritmizzare il rilevamento dei cluster di alimentazione MA? - pagina 2

 
Dmitry Fedoseev:

Sono troppo pigro per inventarne altri. C'è qualche indizio che, in linea di principio, il problema è risolvibile.

Tutti questi feed sono solo una mappa di calore dei prezzi precedenti. Vista laterale. 😉

E a differenza della media, la mappa della temperatura può essere estesa nel futuro. E i blackout, sono imbracature facili da cercare
 
Maxim Kuznetsov:
Tutti questi feed sono solo una heatmap dei vecchi prezzi. Vista laterale.

E a differenza della media, la mappa della temperatura può essere estesa nel futuro. E i blackout sono facili da trovare, vero?

Sì, è così!

È facile quando si hanno stereotipi già pronti.

E risolverli non è un compito facile...

Grazie per la segnalazione!
 
Mikhail Toptunov:

Sì, come no!

È facile quando si hanno stereotipi già pronti.

Non è facile risolvere gli stereotipi...

Grazie per la direzione!

Un algoritmo approssimativo per calcolare una mappa termica (ad esempio per 100 bar):

per tutti i Close da 1 a 100 :

Close[N]=X aggiungerà a heatmap la somma della riga heatmap[Resolution(X)]+={X/N} + {X/(N+1)}+{X/(N+2)}... fino a 100.
Ciò che è tra parentesi graffe è il "componente" delle medie, appena evidenziato.
Risoluzione(X) - "risoluzione", ad esempio 10 punti Round((X-MinimalX)/Point/10)

ottenere un vettore in cui si devono trovare i massimi locali.

Questo vettore è praticamente un profilo verticale dei prezzi

 

già che ci sei...

il raggruppamento diretto delle curve può essere rilevato in modo semplice e rapido.

Alg.: ricerca di un cluster massimo di punti entro D su un asse. (probabilmente più facile da disegnare, ma non sono un artista)

per ogni punto X sull'asse secondario, segnare +1 su X+D e -1 su X-D.

Poi corri lungo l'asse supplementare e conta la somma cumulativa dei voti. Allo stesso tempo ricordare il massimo, la sua durata e la sua posizione.

TUTTI.

Ma l'opzione del profilo verticale o della mappa della temperatura è migliore, anche se è lunga e richiede risorse

perché 1) è contato direttamente dai prezzi 2) mantiene la connessione della matrice allo SMA 3) è collegato allo stack 4) è variabile - puoi "giocare" con le dissolvenze, la sfocatura e trovare qualcosa di tuo

 
Mikhail Toptunov:

Ho provato a ricalcolare le ripetizioni MA per prezzo, per periodo.

Ho fatto quanto segue:

- determinato il momento di ogni transizione MA da una direzione all'altra - segnale1

- dopo aver ricevuto i dati, contare il numero di ripetizioni del segnale1 in una barra

ma il risultato si è rivelato troppo rumoroso


poi ho rilevato che la MA della barra corrente ha un periodo decrescente sulla barra successiva, cioè il fascio è stato spostato verso il basso di periodo

Ho iniziato a collegare i dati in una catena al segnale1 e nei dati ottenuti ho trovato il momento della transizione


Ma non funziona lo stesso, fa qualche rumore o non si vede.



Accidenti, il modello non funziona, la finestra superiore è vuota.


Idealmente, il compito è quello di ottenere i valori segnati con un marcatore blu

Maxim ti ha detto correttamente

Prendete il vostro MA con il periodo massimo, prendete quello minimo

e questo è quanto, eccoli qui - i feed.

Il modello funziona benissimo, tutto è chiaramente visibile e comprensibile:


 

Un'altra opzione

1

File:
22.mq5  4 kb
 

E un altro

File:
23.mq5  6 kb
 
Potresti essere dentro per una settimana o un mese...
 
Maxim Kuznetsov:

algoritmo di calcolo approssimativo della mappa termica (ad esempio per 100 bar):

per tutti i Close da 1 a 100 :

Close[N]=X aggiungerà a heatmap la somma delle righe heatmap[Resolution(X)]+={X/N} + {X/(N+1)}+{X/(N+2)}... fino a 100.
Ciò che è tra parentesi graffe è il "componente" delle medie, appena evidenziato.
Risoluzione(X) - "risoluzione", ad esempio 10 punti Round((X-MinimalX)/Point/10)

ottenere un vettore in cui si devono trovare i massimi locali.

Questo vettore è infatti un profilo verticale dei prezzi.

Sto cercando di integrare la formula... Sono generalmente stretto...

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

Ho il valore di ogni periodo per ogni barra - pr

Cosa dovrei ottenere alla fine del calcolo?

- Un vettore verticale (array di valori) per ogni barra,

se calcolo i valori per la prima barra

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

MininalX - valore minimo del prezzo di 100 periodi MA

So che sto dicendo delle sciocchezze, quindi per favore siate clementi!)

 
Mikhail Toptunov:

Cercando di integrare la formula... Sono davvero, davvero stretto...

Ho il valore di ogni periodo per ogni barra - pr

Cosa dovrei ottenere alla fine del calcolo?

- Un vettore verticale (array di valori) per ogni barra,

se calcolo i valori per la prima barra

MininalX - valore minimo del prezzo di 100 periodi MA

So che sto dicendo delle sciocchezze, quindi per favore siate clementi).

Sì, dovresti ottenere un "vettore verticale" di somme. Ogni elemento del vettore è responsabile, ad esempio, di 10 pips.

Quindi per un bar:

1. eseguiamo i prezzi per le barre Pmax, al fine di definire max, min e da essi la dimensione del vettore.

2. rivedere ancora una volta i prezzi per ogni prezzo:

2.1 determinare in quale elemento del vettore aggiungere

2.2 determinare quanto aggiungere. Per un offset di N, aggiungeremo PRICE * (somma 1/N 1/(N+1) 1/(N+2) . 1/Pmax) .
Ciò che è tra parentesi è la differenza di due serie armoniche = H(Pmax)-H(N-1), si può contare velocemente se si vuole

---

Perché è così: il prezzo alla distanza di N barre "cadrà" solo nel gruppo SMA da Pmax a N. Non importa meno di N, e sotto Pmax non contiamo

in ogni SMA i pesi saranno 1/periodo, cioè in tutti insieme 1/N 1/(N+1) 1/(N+2) ...

Motivazione: