Quelle est la meilleure façon de traiter les coefficients du filtre ? - page 4

 

Désolé d'être amateur, mais les filtres numériques comme SATL FATL etc. sont-ils proches de ce que vous faites, ou proviennent-ils d'un autre domaine ?

Je comprends que c'est quelque chose dans l'électronique. Quelle est la philosophie et la validité théorique de leur application aux citations ?

 

Pour le traitement du signal, voir Sophocles J. Orfanidis, Optimum Signal Processing (et Introduction to Signal Processing).

 
Maxim Dmitrievsky:

Désolé de faire preuve d'amateurisme, mais les filtres numériques tels que SATL FATL et ainsi de suite sont-ils proches de ce que vous faites, ou proviennent-ils d'un autre domaine ?

D'après ce que j'ai compris, il s'agit de quelque chose d'électronique. Quelle est la philosophie et la validité théorique de la possibilité de les appliquer aux citations ?


Pouvez-vous me donner un lien vers une description de ces types de filtres ? Je serais alors en mesure de répondre clairement. Je n'ai pas trouvé de description dans l'article lors d'une lecture superficielle.

Je fais une classe pour les filtres à réponse impulsionnelle finie FIR ou FIR en anglais. Et le type et les paramètres qu'ils auront sont déterminés uniquement par les coefficients, l'algorithme est le même pour tous.

Je considère les coefficients des filtres elliptiques, car ils sont les plus courts, donc ils auront le moins de retard.

À propos de la philosophie et de la validité - il n'y a aucune différence entre ce qui est filtré, les signaux électriques, les citations ou toute autre donnée. Le rôle du filtre est d'éliminer les fréquences inutiles. Par exemple, le LPF écrase les fréquences supérieures, dans le domaine temporel nous obtenons un lissage des citations, parce que le bruit de haute fréquence est tué. J'ai posté des graphiques où on peut le voir clairement. Le même mouving Simple MA est un filtre FIR commun mais pas très efficace. Je l'ai examiné en détail dans l'article.

 
Alexey Volchanskiy:


Pouvez-vous me donner un lien vers une description de ces types de filtres ? Je serais alors en mesure de répondre clairement. Je n'ai pas trouvé de description dans l'article lors d'une lecture superficielle.

Je fais une classe pour les filtres à réponse impulsionnelle finie FIR ou FIR en anglais. Et le type et les paramètres qu'ils ont sont déterminés uniquement par des coefficients, l'algorithme est le même pour tous.

Je considère les coefficients des filtres elliptiques, car ils sont les plus courts, donc ils auront le moins de retard.

À propos de la philosophie et de la validité - il n'y a aucune différence entre ce qui est filtré, les signaux électriques, les citations ou toute autre donnée. Le rôle du filtre est d'éliminer les fréquences inutiles. Par exemple, le LPF écrase les fréquences supérieures, dans le domaine temporel nous obtenons un lissage des citations, parce que le bruit de haute fréquence est tué. J'ai posté des graphiques où on peut le voir clairement. Le même mouving Simple MA est un filtre FIR commun mais pas très efficace. J'en ai parlé en détail dans l'article.


Mais là, le lien vers l'article a été inséré tout seul et il traite précisément de cette question.

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

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

Pour le traitement du signal, il existe des livres : Sophocles J. Orfanidis, Optimum Signal Processing (et Introduction to Signal Processing)


Il est intéressant de constater qu'il existe de nombreux exemples, mais tous avec des pointeurs. 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;
}

J'ai fait cela jusqu'à présent, c'est à partir de l'exemple, sans les classes. Dansm_Coeff[] nous devons charger les coefficients.

#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:

Et là, le lien vers l'article a été inséré tout seul ; il s'agit exactement de ce point.


C'est ce dont je parlais. Voici la formule du filtre FIR que j'utilise moi-même. Mais j'ai déjà écrit - tout dépend des coefficients. Oui, ils sont donnés, mais sans aucune description, donc je ne peux pas juger. Mais il y a une publicité de l'entreprise)).

Je fais référence à cette partie de l'article.

----------

Par exemple, vous pourriez essayer de construire un code en MQL5 pour un filtre numérique comme le FATL de Finware.

En termes généraux, la formule pour calculer un filtre numérique est la suivante :

FILTER = SUM (K(i) * CLOSE (i), FilterPeriod)

où :

SUM - somme ;

K(i) - facteur de pondération ;

CLOSE (i) - prix de clôture de la barre actuelle ;

FilterPeriod - nombre de barres pour le calcul de la moyenne.

 
Alexey Volchanskiy:


C'est ce dont je parlais. Voici la formule du filtre FIR que j'utilise moi-même. Mais j'ai déjà écrit - tout dépend des coefficients. Oui, ils sont donnés, mais sans aucune description, donc je ne peux pas juger tout de suite. Mais il y a une publicité de l'entreprise)).

Je fais référence à cette partie de l'article.

----------

Par exemple, vous pourriez essayer de construire un code en MQL5 pour un filtre numérique comme le FATL de Finware.

En termes généraux, la formule pour calculer un filtre numérique est la suivante :

FILTER = SUM (K(i) * CLOSE (i), FilterPeriod)

où :

SUM - somme ;

K(i) - facteur de pondération ;

CLOSE (i) - prix de clôture de la barre actuelle ;

FilterPeriod - nombre de barres pour le calcul de la moyenne.


Je vois, donc c'est le même sujet avec une interprétation différente.
 
Maxim Dmitrievsky:

Je vois, donc c'est le même sujet dans une autre interprétation.


Eh bien, vous ne pouvez pas penser à autre chose)) Le filtre FIR est extrêmement simple - les valeurs du tampon d'entrée sont multipliées séquentiellement par le tableau de coefficients, tout s'additionne, nous obtenons le tic de sortie. Si nous traitons des ticks, nous obtiendrons un tick de sortie. Ou le bar, si on travaille avec Close.

C'est pourquoi il est ridicule de dire qu'une entreprise a mis au point un filtre révolutionnaire pour l'analyse des cotations). Des révolutions ont eu lieu depuis longtemps dans d'autres domaines.

 
Alexey Volchanskiy:


Eh bien, vous ne pouvez pas penser à autre chose ici)). Le filtre FIR est très simple - les valeurs du tampon d'entrée sont multipliées par un tableau de coefficients, tout s'additionne et on obtient le tic de sortie. Si nous traitons des ticks, nous obtiendrons un tick de sortie. Ou le bar, si on travaille avec Close.

C'est pourquoi il est ridicule de dire qu'une entreprise a mis au point un filtre révolutionnaire pour l'analyse des cotations). Des révolutions ont eu lieu depuis longtemps dans d'autres domaines.


Oui, il y a plusieurs années, ce sujet était annoncé aux commerçants comme une nouvelle découverte révolutionnaire de scientifiques super géniaux).
 
Maxim Dmitrievsky:

Oui, je me souviens qu'il y a quelques années, ce sujet était présenté aux traders comme une nouvelle découverte révolutionnaire de scientifiques super géniaux).

Ils avaient l'habitude de recruter des personnes pour les former. Eh bien, tout le monde gagne autant qu'il le peut...