Qual è il modo migliore per trattare i coefficienti del filtro? - pagina 4

 

Scusate il dilettantismo, ma i filtri digitali come SATL FATL ecc. sono vicini a quello che fate voi, o provengono da un altro campo?

Ho capito che è qualcosa nell'elettronica. Qual è la filosofia e la validità teorica della loro applicazione alle citazioni?

 

Per l'elaborazione del segnale, vedere Sophocles J. Orfanidis, Optimum Signal Processing (e Introduzione all'elaborazione del segnale)

 
Maxim Dmitrievsky:

Scusa se sono dilettante, ma i filtri digitali come SATL FATL ecc. sono vicini a quello che fai tu, o provengono da un altro campo?

La mia comprensione è che si tratta di qualcosa di elettronico. Qual è la filosofia e la validità teorica di poterli applicare alle citazioni?


Puoi darmi un link per una descrizione di questi tipi di filtri? Allora sarei in grado di rispondere chiaramente. Non ho trovato una descrizione nell'articolo ad una lettura sommaria.

Faccio una classe per i filtri a risposta impulsiva finita FIR o FIR in inglese. E quale tipo e quali parametri avranno è determinato unicamente dai coefficienti, l'algoritmo è lo stesso per tutti.

Considero i coefficienti dei filtri ellittici, poiché sono i più corti, quindi avranno meno ritardi.

Sulla filosofia e la validità - non fa differenza cosa filtrare, segnali elettrici, quotazioni o qualsiasi altro dato. Il compito del filtro è quello di rimuovere le frequenze non necessarie. Per esempio, LPF schiaccia le frequenze superiori, nel dominio del tempo si ottiene lo smoothing delle citazioni, perché il rumore ad alta frequenza viene ucciso. Ho postato dei grafici dove si vede chiaramente. Lo stesso Simple MA mouving è un filtro FIR comune ma non molto efficace. Ho dato un'occhiata dettagliata nell'articolo.

 
Alexey Volchanskiy:


Puoi darmi un link per una descrizione di questi tipi di filtri? Allora sarei in grado di rispondere chiaramente. Non ho trovato alcuna descrizione nell'articolo ad una lettura sommaria.

Faccio una classe per i filtri a risposta impulsiva finita FIR o FIR in inglese. E quale tipo e quali parametri hanno è determinato unicamente dai coefficienti, l'algoritmo è lo stesso per tutti.

Considero i coefficienti dei filtri ellittici, poiché sono i più corti, quindi avranno meno ritardi.

Sulla filosofia e la validità - non fa differenza cosa filtrare, segnali elettrici, quotazioni o qualsiasi altro dato. Il compito del filtro è quello di rimuovere le frequenze non necessarie. Per esempio, LPF schiaccia le frequenze superiori, nel dominio del tempo si ottiene lo smoothing delle citazioni, perché il rumore ad alta frequenza viene ucciso. Ho postato dei grafici dove si può vedere chiaramente. Lo stesso Simple MA mouving è un filtro FIR comune ma non molto efficace. Ne ho parlato in dettaglio nell'articolo.


Ma lì, il link all'articolo è stato inserito da solo e tratta proprio di questo argomento.

https://www.mql5.com/ru/articles/32

Практическая реализация цифровых фильтров на MQL5 для начинающих
Практическая реализация цифровых фильтров на MQL5 для начинающих
  • 2010.03.19
  • Nikolay Kositsin
  • www.mql5.com
Идее цифровой фильтрации сигналов посвящаются достаточно объёмные темы обсуждения на форумах по построению торговых систем. В этой статье автор знакомит с процессом превращения кода более простого индикатора SMA из своей статьи "Пользовательские индикаторы в MQL5 для начинающих" в код гораздо более сложного универсального цифрового фильтра. В ней также изложены простейшие приёмы замены текста в коде и методика получения простейших навыков по исправлению ошибок программирования.
 
Quantum:

Per l'elaborazione del segnale ci sono libri: Sophocles J. Orfanidis, Optimum Signal Processing (e Introduction to Signal Processing)


È interessante che ci siano molti esempi, anche se tutti con puntatori. A la

/* cfir1.c - FIR filter implemented with circular delay-line buffer */

void wrap();

double cfir1(M, h, w, p, x)
double *h, *w, **p, x;
int M;
{                        
       int i;
       double y;

       *(*p)-- = x;
       wrap(M, w, p);                          /* \(p\) now points to \(s\sb{M}\) */

       for (y=0, h+=M, i=M; i>=0; i--) {       /* \(h\) starts at \(h\sb{M}\) */
              y += (*h--) * (*(*p)--);
              wrap(M, w, p);
              }

       return y;
}

Ho fatto questo finora, questo è dall'esempio, senza classi. Inm_Coeff[] dobbiamo caricare i coefficienti.

#define  TICK_BUF_SIZE       0x1000              // 4096
#define  TICK_BUF_MAX_IDX    (TICK_BUF_SIZE - 1) // 0xFFF
#define  OUT_BUF_SIZE        0x10000             // 65536
#define  OUT_BUF_MAX_IDX     (OUT_BUF_SIZE - 1)  // 0xFFFF   

double  m_TickBuf[TICK_BUF_SIZE]; // ring-buffer for ticks store
double  m_OutBuf[OUT_BUF_SIZE];   // output ring-buffer
double  m_Coeff[];                // coefficient array
int     m_CoeffSize;              // size of m_Coeff  
int     m_TickBufIdx;             // index of new tick placed in m_TickBuf
int     m_OutBufIdx;              // index of new tick placed in m_OutBuf

//+------------------------------------------------------------------+
//| filter one tick                                                                 |
//+------------------------------------------------------------------+
double  FilterTick(double tick)
  {
   static double acc;
   static int tbIdx;
   acc=0;
   tbIdx=m_TickBufIdx;
   m_TickBuf[m_TickBufIdx]=tick;
   if(m_TickBufIdx==0)
      m_TickBufIdx=TICK_BUF_MAX_IDX;
   else
      m_TickBufIdx--;
// filter in cycle "for""
   for(int n=0; n<m_CoeffSize; n++)
     {
      acc+=m_TickBuf[tbIdx++]*m_Coeff[n];
      tbIdx &=TICK_BUF_MAX_IDX; 
      /* it was little optimization instead if
      if(tbIdx > TICK_BUF_MAX_IDX)
         tbIdx = 0;*/
     }
   m_OutBuf[m_OutBufIdx++]=acc;
   m_OutBufIdx &=OUT_BUF_MAX_IDX;
   return acc;
  }
 
Maxim Dmitrievsky:

E lì, il link all'articolo è stato inserito da solo; è esattamente su questo punto.


Questo è ciò di cui stavo parlando. Ecco la formula del filtro FIR che uso io stesso. Ma ho già scritto - tutto dipende dai coefficienti. Sì, sono dati, ma senza alcuna descrizione, quindi non posso giudicare. Ma c'è una pubblicità della società )).

Mi riferisco a questo pezzo dell'articolo

----------

Per esempio, si potrebbe provare a costruire il codice in MQL5 per un filtro digitale come il FATL di Finware.

In termini generali la formula per calcolare un filtro digitale è:

FILTRO = SOMMA (K(i) * CLOSE (i), FilterPeriod)

dove:

SUM - somma;

K(i) - fattore di ponderazione;

CLOSE (i) - prezzo di chiusura della barra corrente;

FilterPeriod - numero di barre per la media.

 
Alexey Volchanskiy:


Questo è quello di cui parlavo. Ecco la formula del filtro FIR che uso io stesso. Ma ho già scritto - tutto dipende dai coefficienti. Sì, sono dati, ma senza alcuna descrizione, quindi non posso giudicare subito. Ma c'è una pubblicità della società )).

Mi riferisco a questo pezzo dell'articolo

----------

Per esempio, si potrebbe provare a costruire il codice in MQL5 per un filtro digitale come il FATL di Finware.

In termini generali la formula per calcolare un filtro digitale è:

FILTRO = SOMMA (K(i) * CLOSE (i), FilterPeriod)

dove:

SUM - somma;

K(i) - fattore di ponderazione;

CLOSE (i) - prezzo di chiusura della barra corrente;

FilterPeriod - numero di barre per la media.


Capisco, quindi è lo stesso argomento in una diversa interpretazione
 
Maxim Dmitrievsky:

Capisco, quindi è lo stesso soggetto in un'altra interpretazione.


Beh, non si può pensare ad altro)) Il filtro FIR è tremendamente semplice - le citazioni dal buffer d'ingresso sono moltiplicate sequenzialmente per l'array di coefficienti, il tutto si somma, otteniamo il tick di uscita. Se abbiamo a che fare con i tick, otterremo un tick in uscita. O bar, se lavoriamo con Close.

Ecco perché è ridicolo dire che un'azienda ha sviluppato un filtro rivoluzionario per l'analisi delle quotazioni). Le rivoluzioni sono state a lungo in altri campi.

 
Alexey Volchanskiy:


Beh, non si può pensare ad altro qui)) Il filtro FIR è molto semplice - le citazioni dal buffer d'ingresso sono moltiplicate per un array di coefficienti, il tutto si somma e si ottiene il tick di uscita. Se abbiamo a che fare con i tick, otterremo un tick in uscita. O bar, se lavoriamo con Close.

Ecco perché è ridicolo dire che un'azienda ha sviluppato un filtro rivoluzionario per l'analisi delle quotazioni). Le rivoluzioni sono state a lungo in altri campi.


Sì, diversi anni fa questo argomento è stato pubblicizzato ai commercianti come una nuova scoperta rivoluzionaria di scienziati super geniali).
 
Maxim Dmitrievsky:

Sì, mi ricordo che qualche anno fa questo argomento veniva pubblicizzato ai commercianti come una nuova scoperta rivoluzionaria di scienziati super geniali).

Reclutavano persone per l'addestramento. Beh, ognuno guadagna quanto può...