Creazione di filtri digitali non-lagging

Konstantin Gruzdev | 12 gennaio, 2022

Introduzione

L'articolo descrive uno degli approcci per determinare un segnale utile (tendenza) nei dati di flusso. Piccoli test di filtraggio (smoothing) applicati alle quotazioni di mercato dimostrano il potenziale per la creazione di filtri digitali (indicatori) non-lagging che non vengono ridisegnati sulle ultime barre.


Approccio standard

Questo approccio si basa sui classici metodi di levigatura delle serie temporali. Ci sono molti articoli dedicati a questo argomento sia su questo che su altri siti web. I risultati sono anche classici:

  1. I cambiamenti nelle tendenze vengono visualizzati con latenza;
  2. Migliore risposta dell'indicatore (filtro digitale) ottenuta a scapito della diminuzione della qualità delle levigazioni;
  3. I tentativi di implementare indicatori non-lagging portano a ridisegnare gli ultimi campioni (barre).

E mentre i trader hanno imparato a far fronte a queste cose usando la persistenza di processi economici e altri trucchi, questo sarebbe inaccettabile nella valutazione dei dati sperimentali in tempo reale, ad esempio quando si testano le aerostrutture.


Il problema principale

È noto che la maggior parte dei sistemi di trading smette di funzionare con il passare del tempo e che gli indicatori sono indicativi solo su determinati intervalli. Questo può essere facilmente spiegato: le quotazioni di mercato non sono fisse. La definizione di processo stazionario è disponibile Wikipedia:

Un processo stazionario è un processo stocastico la cui distribuzione di probabilità congiunta non cambia quando viene spostata nel tempo.

A giudicare da questa definizione, i metodi di analisi delle serie temporali stazionarie non sono applicabili nell'analisi tecnica. E questo è comprensibile. Un abile market-maker che entra nel mercato rovinerà tutti i calcoli che potremmo aver fatto prima di ciò per quanto riguarda i parametri di una serie nota di quotazioni di mercato.

Anche se questo sembra ovvio, molti indicatori si basano sulla teoria dell'analisi delle serie temporali stazionarie. Esempi di tali indicatori sono le medie mobili e le loro modifiche. Tuttavia, ci sono alcuni tentativi di creare indicatori adattivi. Dovrebbero tenere conto della non stazionarietà delle quotazioni di mercato in una certa misura, ma non sembrano funzionare benissimo. Anche i tentativi di "punire" il market-maker utilizzando i metodi attualmente noti di analisi delle serie non stazionarie wavelets, modi empirici e altri) non hanno dato successo. Sembra che un certo fattore chiave venga costantemente ignorato o non identificato.

La ragione principale di ciò è che i metodi utilizzati non sono progettati per lavorare con i dati di flusso. Tutti (o quasi) sono stati sviluppati per l'analisi dei dati già noti o, parlando in termini di analisi tecnica, storici. Questi metodi sono convenienti, ad esempio, in geofisica: senti il terremoto, prendi un sismogramma e poi lo analizzi per alcuni mesi. In altre parole, questi metodi sono appropriati dove le incertezze che sorgono alla fine di una serie temporale nel corso del filtraggio influenzano il risultato finale.

Quando analizziamo i dati di flusso sperimentali o le quotazioni di mercato, ci concentriamo sui dati più recenti ricevuti, piuttosto che sulla cronologia. Si tratta di dati che non possono essere trattati utilizzando algoritmi classici.


Filtro cluster

Il filtro cluster è un insieme di filtri digitali che si avvicinano alla sequenza iniziale. I filtri cluster non devono essere confusi con indicatori cluster.

I filtri cluster sono utili quando si analizzano serie temporali non stazionarie in tempo reale, in altre parole, dati di flusso. Significa che questi filtri sono di interesse principale non per appianare i valori delle serie temporali già noti, ma per ottenere i valori di smussatura più probabili dei nuovi dati ricevuti in tempo reale.

A differenza di vari metodi di decomposizione o semplicemente filtri della frequenza desiderata, i filtri cluster creano una composizione o una ventaglio di probabili valori di serie iniziali che vengono ulteriormente analizzati per l'approssimazione della sequenza iniziale. La sequenza di input funge più da riferimento che da target dell'analisi. L'analisi principale riguarda i valori calcolati da un insieme di filtri dopo l'elaborazione dei dati ricevuti.

Figura 1. Diagramma di un semplice filtro cluster Figura 1.

Figura 1. Il diagramma di un semplice filtro cluster

Nel caso generale, ogni filtro incluso nel cluster ha le sue caratteristiche individuali e non è correlato ad altri in alcun modo. Questi filtri sono talvolta personalizzati per l'analisi di una propria serie temporale stazionaria che descrive le singole proprietà della serie temporale iniziale non stazionaria. Nel caso più semplice, se la serie iniziale non stazionaria cambia i suoi parametri, i filtri "cambiano". Pertanto, un filtro cluster tiene traccia delle modifiche delle caratteristiche in tempo reale.


Procedura di progettazione del filtro cluster

Qualsiasi filtro cluster può essere progettato in tre passaggi:

1. Il primo passo è di solito il più difficile, ma è qui che si formano i modelli probabilistici dei dati di flusso ricevuti. Il numero di questi modelli può essere arbitrariamente grande. Non sono sempre correlati a processi fisici che influenzano i dati approssimabili. Più precisamente i modelli descrivono la sequenza approssimante, maggiore è la probabilità di ottenere un filtro cluster non-lagging.

2. Nella seconda fase, vengono creati uno o più filtri digitali per ogni modello. La condizione più generale per unire i filtri in un cluster è che appartengano ai modelli che descrivono la sequenza approssimante.

3. Quindi, possiamo avere uno o più filtri in un cluster. Di conseguenza, con ogni nuovo campione abbiamo il valore del campione e uno o più valori del filtro. Quindi, con ogni campione abbiamo un vettore o un rumore artificiale composto da diversi (almeno due) valori. Tutto quello che dobbiamo fare ora è selezionare il valore più appropriato.


Esempio di filtro cluster semplice

A titolo illustrativo, implementeremo un semplice filtro cluster corrispondente al diagramma sopra, utilizzando le quotazioni di mercato come sequenza di input. Puoi semplicemente utilizzare i prezzi di chiusura di qualsiasi periodo di tempo.

1. Descrizione del Livello Procederemo partendo dal presupposto che:

2. Selezione dei filtri digitali. Per semplicità, prendiamo due filtri:

3. Selezione del valore appropriato per il filtro cluster.

Quindi, con ogni nuovo campione avremo il valore del campione (prezzo di chiusura), così come il valore di MA ed EMA. Il prezzo di chiusura verrà ignorato in base alla seconda ipotesi specificata per il nostro modello. Inoltre, selezioniamo il valore МА o ЕМА in base all'ultima ipotesi, ovvero mantenendo la direzione della tendenza:

Dove:


Codice di programma e prestazioni del filtro cluster

Il codice dell'indicatore con il nostro filtro cluster non è più complesso del codice della media mobile. Non presenta alcuna tecnica di know-how, quindi non ha senso rivederlo. Il codice sorgente è allegato all'articolo.

Senza perdere tempo, puoi guardare il video fornito di seguito per vedere le prestazioni del nostro indicatore:


Video 1. Prestazioni di un semplice filtro cluster

Anche se il processo di progettazione del filtro potrebbe essere sembrato più simile all'evocazione piuttosto che a un approccio strettamente matematico, il video dimostra chiaramente che il comportamento della linea di filtro del cluster è più adeguato di quello delle singole medie mobili. È particolarmente evidente sulle sezioni a dente di sega della serie iniziale. Se non è stato abbastanza impressionante per alcuni di voi, possiamo confrontare ulteriormente il filtro cluster con JJMA, che è considerato uno dei migliori indicatori. Il prossimo video mostra una competizione di JJMA e il nostro filtro cluster sulla stessa sezione. Ho provato a selezionare i parametri JJMA in modo che la sua linea potesse corrispondere al massimo alla nostra linea di indicatori.

Video 2. Semplice filtro cluster vs. JJMA

Il nostro filtro, in media, dimostra circa le stesse prestazioni di JJMA su qualsiasi serie temporale. Ma mentre JJMA è già al suo meglio, il nostro filtro cluster può essere ulteriormente migliorato.


Effetto levigante avanzato

Fino ad ora, non c'erano prove che i filtri cluster fossero in grado di smussare una sequenza di input senza latenza. Per ottenere questo risultato, è necessario un filtro più complesso di quello considerato sopra.

A scopo illustrativo, ho sviluppato un indicatore di test Contiene due linee indicatore:

Le impostazioni dell'indicatore coprono varie opzioni di test appositamente preparate per l'articolo. Nei test descritti di seguito, useremo uno slancio relativo come descritto William Blau. Quando esegui i tuoi esperimenti, puoi usare altre variazioni di slancio: i risultati saranno gli stessi. Una descrizione dettagliata dell'indicatore, nonché le istruzioni per il download e l'uso sono disponibili nella descrizione dell'indicatore.

Non c'è una ragione speciale dietro l'uso di Momentum nell'articolo. La linea di quantità di moto è abbastanza contaminata dal rumore e quindi le prestazioni del filtro saranno a mio parere più illustrative. Quindi, esegui l'indicatore e analizzi il comportamento della linea rossa rispetto a quella blu.

Prima di tutto, diamo un'occhiata a una cosa interessante. A tale scopo, prima di eseguire l'indicatore, impostare il parametro "Filtro" su "Test No.1 Advance". Le impostazioni del filtro in questa modalità rivelano molto spesso quello che può essere definito un "effetto principale". Durante il test, non sarai in grado di vedere l'levigatura dell'intera linea iniziale del momentum. Il filtro sorveglia le aree in cui la possibilità di ottenere un effetto principale è buona. Non c'è da stupirsi, questo non ha sempre successo. Eppure, si verifica abbastanza spesso da notare.

Una delle parti più illustrative delle prestazioni del filtro viene visualizzata nel grafico sottostante.

Figura 2. Effetto principale nello smoothing (levigatura) della linea di quantità di moto (momentum)

Figura 2. Effetto principale nella levigatura della linea di quantità di moto

Va notato che sembra solo guidare il filtraggio. Questo effetto si verifica esclusivamente a causa dei movimenti del rumore della linea di quantità di moto, piuttosto che a causa del fatto che il filtro è in anticipo. Studi simili di altri indicatori (da un semplice MA a JJMA) confermano che l'effetto principale della levigatura può essere osservato in ciascuno di essi. Più piccolo è il periodo specificato, più frequentemente si osserva l'effetto. Gli ultimi studi suggeriscono che l'effetto può essere migliorato. Tutto dipende dal metodo di generazione di un vettore di valori probabili e dalla sua analisi.


L'effetto Cobra

Quelli di voi che hanno già visto l'indicatore in azione, potrebbero notare un'altra anomalia. La linea dell'indicatore sull'ultima barra incompleta non sempre segue il prezzo. Ad esempio, il prezzo potrebbe salire, mentre l'indicatore si sta muovendo verso il basso e viceversa. Quando il mercato è veloce o quando viene guardato nel visualizzatore, a volte assomiglia alla lingua di un cobra che rintraccia la preda.

Video 3. Effetto principale di levigatura e l'effetto cobra


Errori in anticipo sulla tendenza

Abbiamo potuto vedere sopra che quando la linea iniziale del momentum va contro la tendenza (diventa rumorosa), si traduce nell'effetto principale della linea levigata sulla linea iniziale. Apparentemente, la linea di momentum può anche fare una mossa sbagliata nella direzione opposta, cioè sparare inaspettatamente lontano nella direzione della tendenza, a volte indugiando troppo a lungo, anche se la tendenza si è già invertita. Sarebbe logico se il filtro potesse rallentare tali movimenti.

Vediamo come l'algoritmo filtra questi errori in anticipo sulla tendenza. A tale scopo, prima di eseguire l'indicatore, è necessario impostare il parametro "Filtro" su "Test No.2 Smoothing". Il funzionamento del filtro cluster durante questo test è diviso in due parti.

Il nome breve dell'indicatore "GMomentum(Parametro 1, Parametro 2)" visualizzato nella sottofinela del grafico ha due parametri tra parentesi. Se il secondo parametro è -1, l'algoritmo tenta di correggere (attenuare) gli errori in anticipo rispetto alla tendenza. Se il secondo parametro è uguale o superiore a zero, vengono messe in atto le impostazioni avanzate di arrotatura.

Il video fornito di seguito illustra l'operazione del filtro dopo aver modificato la sua sensibilità dal valore minimo al valore accettabile e ritorno. Per ottenere l'effetto come mostrato nel video, la sensibilità del filtro può essere controllata (a condizione che la finestra dell'indicatore sia attiva) utilizzando i tasti Su e Giù.

Video 4. Filtraggio degli errori in anticipo rispetto alla tendenza.

Il video sopra suggerisce che, nonostante i movimenti improvvisi del prezzo e la linea iniziale del momentum, la linea del momentum viene levigata senza ritardo all'aumentare della sensibilità del filtro. Al massimo livellamento, otteniamo punti di ingresso accettabili.

Su una nota a margine, le aree pianeggianti rappresentano un problema per la maggior parte degli indicatori. Qui, tuttavia, alcuni di essi degenerano facilmente in una linea quasi retta anche con le impostazioni esistenti. Teoricamente, questa tecnica può essere utilizzata per migliorare uno qualsiasi degli indicatori esistenti senza produrre un ulteriore ritardo. Dal punto di vista pratico, ha bisogno di essere controllato.

Nel prossimo video, focalizza la tua attenzione su come il filtro appiattisce i picchi principali della linea di momentum iniziale e disegna una linea di tendenza più liscia più vicina al movimento dei prezzi quasi senza ritardo. La spiegazione del perché è così è fornita nell'articolo Gli indicatori di William Blau.

Video 5. Levigatura dei picchi della linea di quantità di moto iniziale.

Gli impressionanti risultati raggiunti non sono gli stessi in tutta la storia delle citazioni. Ma considerando il fatto che lo slancio ha molto rumore e che l'indicatore è stato implementato esclusivamente per dimostrare il filtraggio dei dati di flusso senza ritardi, possiamo ritenerlo abbastanza accettabile. Inoltre, va notato che l'indicatore non viene ridisegnato.


Risposta agli impulsi

Lo studio dei parametri della quantità di moto con un filtro incorporato può sembrare piuttosto interessante. Ad esempio, la risposta all'impulso fornisce una buona illustrazione di come e dove i picchi scompaiono dalla linea dell'indicatore. Per eseguire il test, il parametro "Filtro" deve essere impostato su "Test No.3 Impulse". Durante il test, ogni 1024a barra riceve un impulso unitario. Dopo aver eseguito l'indicatore, trova il posto pertinente nel grafico. Dovrebbe assomigliare a questo:

Figura 3. Risposta all'impulso momentum

Figura 3. Risposta all'impulso momentum

Quando l'indicatore è in esecuzione, il filtro è disabilitato. Sarai quindi in grado di vedere due picchi sulla linea blu e rossa: un picco che è apparso al momento dell'impulso unitario e che è uguale ad esso, e l'altro picco diretto in modo opposto che è apparso dopo il numero specificato di periodi. Ecco come appare la risposta all'impulso dello slancio "nudo". Inoltre, aumentare o diminuire gradualmente la sensibilità del filtro utilizzando i tasti Su e Giù. Dovresti essere in grado di ottenere qualcosa del genere:

Video 6. Risposta all'impulso momentum

Come si può vedere, il secondo picco è completamente appiattito dal filtro, mentre il primo rimane assolutamente intatto. Il filtro corregge tutti gli effetti di quantità di moto e ricostruisce accuratamente l'immagine iniziale: un impulso unitario da solo. Non ci sono ritardi. Non vi è alcuna distorsione dell'ampiezza o della forma dell'impulso unitario. Potrebbe essere questo il filtro perfetto in azione?


Il filtro perfetto

C'è un fattore materiale che non ci permette di ritenere immediatamente perfetto il filtro in questione. Questo sarà spiegato un po 'più tardi.

Si ritiene che il filtro perfetto non possa esistere e che tutti i filtri (indicatori) siano in ritardo. Ma allora come possiamo spiegare i risultati ottenuti? Tutti loro sono presentati come qualcosa che può essere osservato. È un trucco per sviluppatori? Probabilmente si potrebbe usare un trucco di codifica in un codice di impulso unitario. Ma l'effetto può essere osservato su qualsiasi citazione. Inoltre, non è necessario impostare o ripristinare specificamente l'indicatore per ogni strumento di trading.

Il filtro perfetto non può esistere quando un filtro viene costruito utilizzando oggetti fisici (condensatore, induttore, ecc.). Questo è stato curato dalla natura stessa. Eppure, l'esistenza del filtro perfetto è impossibile nel mondo digitale? La risposta a questa domanda dovrebbe certamente essere data senza tener conto dei limiti fisici dei sistemi informatici (precisione, velocità di calcolo, ecc.).

Torniamo al nostro indicatore. Il filtro digitale integrato non appartiene ai filtri lineari. Per un indicatore con filtro incorporato, la risposta all'impulso considerata sopra è solo un caso speciale di filtraggio che si è verificato bene. Per poter trarre conclusioni di vasta portata, è necessario uno studio più adeguato e attento.


Conclusione

Spero che le informazioni fornite nell'articolo aiuteranno a rompere alcuni stereotipi sulla creazione di filtri digitali (indicatori).

Tutte le cose descritte possono essere esaminate utilizzando gli indicatori proposti. La versione introdotta del test GMomentum consentirà di valutare le prestazioni e le potenziali capacità dei filtri cluster, mentre il semplice esempio di filtro potrebbe dare un impulso agli sviluppatori a creare i propri filtri.

Infine, mi prendo la libertà di trarre la seguente conclusione: la creazione di indicatori non-lagging (filtri digitali) dotati tutte le funzionalità è potenzialmente possibile.