Qual é a melhor maneira de lidar com os coeficientes do filtro? - página 4

 

Desculpe ser amador, mas os filtros digitais como o SATL FATL etc. são próximos do que você faz, ou de outro campo?

Eu entendo que é algo em eletrônica. Qual é a filosofia e a validade teórica de aplicá-las a citações?

 

No processamento de sinais há livros de Sophocles J. Orfanidis, Optimum Signal Processing (e Introduction to Signal Processing)

 
Maxim Dmitrievsky:

Desculpe por ser amador, mas os filtros digitais como o SATL FATL e assim por diante são próximos ao que você faz, ou de outro campo?

Meu entendimento é que se trata de algo de eletrônico. Qual é a filosofia e a validade teórica de poder aplicá-las a citações?


Você pode me dar um link para uma descrição desses tipos de filtros? Então eu seria capaz de responder claramente. Eu não encontrei uma descrição no artigo sobre uma leitura superficial.

Eu faço uma classe para filtros com resposta de impulso finito FIR ou FIR em inglês. E que tipo e parâmetros eles terão é determinado unicamente pelos coeficientes, o algoritmo é o mesmo para todos.

Considero coeficientes para filtros elípticos, pois eles são os mais curtos, portanto serão os que terão menos atrasos.

Sobre filosofia e validade - não faz diferença o que filtrar, sinais elétricos, citações ou quaisquer outros dados. O trabalho do filtro é remover freqüências desnecessárias. Por exemplo, o LPF esmaga as freqüências superiores, no domínio do tempo obtemos suavização das citações, porque o ruído de alta freqüência é morto. Eu afixei gráficos onde pode ser visto claramente. A mesma simples mouving MA é um filtro FIR comum, mas não muito eficaz. Eu dei uma olhada detalhada no artigo.

 
Alexey Volchanskiy:


Você pode me dar um link para uma descrição desses tipos de filtros? Então eu seria capaz de responder claramente. Não encontrei nenhuma descrição no artigo sobre uma leitura superficial.

Eu faço uma classe para filtros com resposta de impulso finito FIR ou FIR em inglês. E que tipo e parâmetros eles têm é determinado unicamente por coeficientes, o algoritmo é o mesmo para todos.

Considero coeficientes para filtros elípticos, pois eles são os mais curtos, portanto serão os que terão menos atrasos.

Sobre filosofia e validade - não faz diferença o que filtrar, sinais elétricos, citações ou quaisquer outros dados. O trabalho do filtro é remover freqüências desnecessárias. Por exemplo, o LPF esmaga as freqüências superiores, no domínio do tempo obtemos suavização das citações, porque o ruído de alta freqüência é morto. Eu afixei gráficos onde pode ser visto claramente. A mesma simples mouving MA é um filtro FIR comum, mas não muito eficaz. Eu o cobri em detalhes no artigo.


Mas ali, o link para o artigo foi inserido por si só e trata precisamente desta questão.

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

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

Para o processamento de sinais existem livros: Sophocles J. Orfanidis, Optimum Signal Processing (e Introduction to Signal Processing)


Interessante que existam muitos exemplos, embora todos com indicações. 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;
}

Fiz isto até agora, isto é do exemplo, sem aulas. Emm_Coeff[] precisamos carregar coeficientes.

#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 aí, o link para o artigo foi inserido por si só; trata-se exatamente deste ponto.


Era disso que eu estava falando. Aqui está a fórmula do filtro FIR que eu mesmo utilizo. Mas eu já escrevi - tudo depende dos coeficientes. Sim, elas são dadas, mas sem qualquer descrição, portanto não posso julgar. Mas há um anúncio da empresa )).

Refiro-me a esta parte do artigo

----------

Por exemplo, você poderia tentar construir código em MQL5 para um filtro digital como o FATL da Finware.

Em termos gerais, a fórmula para calcular um filtro digital é:

FILTRO = SUM (K(i) * FECHAR (i), Período de Filtragem)

onde:

SUM - soma;

K(i) - fator de ponderação;

FECHAR (i) - preço de fechamento da barra atual;

FilterPeriod - número de barras para cálculo da média.

 
Alexey Volchanskiy:


Era disto que eu estava falando. Aqui está a fórmula do filtro FIR que eu mesmo utilizo. Mas eu já escrevi - tudo depende de coeficientes. Sim, elas são dadas, mas sem qualquer descrição, por isso não posso julgar imediatamente. Mas há um anúncio da empresa )).

Refiro-me a esta parte do artigo

----------

Por exemplo, você poderia tentar construir código em MQL5 para um filtro digital como o FATL da Finware.

Em termos gerais, a fórmula para calcular um filtro digital é:

FILTRO = SUM (K(i) * FECHAR (i), Período de Filtragem)

onde:

SUM - soma;

K(i) - fator de ponderação;

FECHAR (i) - preço de fechamento da barra atual;

FilterPeriod - número de barras para cálculo da média.


Entendo, então é o mesmo tópico em uma interpretação diferente
 
Maxim Dmitrievsky:

Estou vendo, então é o mesmo assunto em outra interpretação.


Bem, você não pode pensar em mais nada)) O filtro FIR é tremendamente simples - as citações do buffer de entrada são multiplicadas seqüencialmente pela matriz de coeficientes, tudo se soma, obtemos o tick de saída. Se lidarmos com carrapatos, obteremos um tique de saída. Ou bar, se trabalharmos com Close.

É por isso que é ridículo dizer que uma empresa desenvolveu um filtro revolucionário para análise de cotações). Há muito tempo, as revoluções estão em outros campos.

 
Alexey Volchanskiy:


Bem, você não pode pensar em mais nada aqui)) O filtro FIR é muito simples - as citações do buffer de entrada são multiplicadas por um conjunto de coeficientes, tudo se soma e obtém o tick de saída. Se lidarmos com carrapatos, obteremos um tique de saída. Ou bar, se trabalharmos com Close.

É por isso que é ridículo dizer que uma empresa desenvolveu um filtro revolucionário para análise de cotações). Há muito tempo, as revoluções estão em outros campos.


Sim, há vários anos este assunto foi anunciado aos comerciantes como uma nova descoberta revolucionária de cientistas super geniais).
 
Maxim Dmitrievsky:

Sim, eu me lembro de alguns anos atrás este tópico foi anunciado aos comerciantes como uma nova descoberta revolucionária de cientistas super geniais).

Eles costumavam recrutar pessoas para treinamento. Bem, todos ganham o máximo que podem...