¿Cuál es la mejor manera de tratar los coeficientes del filtro? - página 4

 

Siento ser aficionado, pero ¿los filtros digitales como el SATL FATL, etc., se acercan a lo que usted hace, o son de otro ámbito?

Tengo entendido que es algo de electrónica. ¿Cuál es la filosofía y la validez teórica de aplicarlas a las citas?

 

Para el procesamiento de señales, véase Sophocles J. Orfanidis, Optimum Signal Processing (e Introduction to Signal Processing)

 
Maxim Dmitrievsky:

Perdón por ser aficionado, pero ¿los filtros digitales como SATL FATL y demás son cercanos a lo que tú haces, o son de otro ámbito?

Tengo entendido que es algo de electrónica. ¿Cuál es la filosofía y la validez teórica de poder aplicarlas a las citas?


¿Puede proporcionar un enlace a una descripción de este tipo de filtros? Así podría responder con claridad. En una lectura rápida no he encontrado ninguna descripción en el artículo.

Hago una clase para los filtros con respuesta de impulso finito FIR o FIR en inglés. Y el tipo y los parámetros que tendrán están determinados únicamente por los coeficientes, el algoritmo es el mismo para todos.

Considero los coeficientes de los filtros elípticos, ya que son los más cortos, por lo que tendrán los menores retrasos.

En cuanto a la filosofía y la validez, da igual lo que se filtre, las señales eléctricas, las cotizaciones o cualquier otro dato. La función del filtro es eliminar las frecuencias innecesarias. Por ejemplo, el LPF aplasta las frecuencias superiores, en el dominio del tiempo obtenemos un suavizado de las cotizaciones, porque se mata el ruido de alta frecuencia. He publicado gráficos donde se ve claramente. El mismo Simple MA mouving es un filtro FIR común pero poco efectivo. Lo analicé en detalle en el artículo.

 
Alexey Volchanskiy:


¿Puede darme un enlace con una descripción de este tipo de filtros? Así podría responder con claridad. En una lectura superficial no he encontrado ninguna descripción en el artículo.

Hago una clase para los filtros con respuesta de impulso finito FIR o FIR en inglés. Y el tipo y los parámetros que tienen están determinados únicamente por los coeficientes, el algoritmo es el mismo para todos.

Considero los coeficientes de los filtros elípticos, ya que son los más cortos, por lo que tendrán los menores retrasos.

En cuanto a la filosofía y la validez, da igual lo que se filtre, las señales eléctricas, las cotizaciones o cualquier otro dato. La función del filtro es eliminar las frecuencias innecesarias. Por ejemplo, el LPF aplasta las frecuencias superiores, en el dominio del tiempo obtenemos un suavizado de las cotizaciones, porque se mata el ruido de alta frecuencia. He publicado gráficos donde se puede ver claramente. El mismo Simple MA mouving es un filtro FIR común pero poco efectivo. Lo he tratado con detalle en el artículo.


Pero ahí, el enlace al artículo se insertó solo y trata de este mismo tema.

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

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

Para el procesamiento de señales hay libros: Sophocles J. Orfanidis, Optimum Signal Processing (and Introduction to Signal Processing)


Es interesante que haya muchos ejemplos, aunque todos con punteros. 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;
}

Esto lo he hecho hasta ahora, esto es del ejemplo, sin clases. Enm_Coeff[] tenemos que cargar los 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:

Y allí, el enlace al artículo se insertó por sí mismo; se trata exactamente de este punto.


A eso me refería. Esta es la fórmula del filtro FIR que yo mismo utilizo. Pero ya he escrito que todo depende de los coeficientes. Sí, se dan, pero sin ninguna descripción, por lo que no puedo juzgar de inmediato. Pero hay un anuncio de la empresa )).

Me refiero a esta parte del artículo

----------

Por ejemplo, podrías intentar construir código en MQL5 para un filtro digital como el FATL de Finware.

En términos generales, la fórmula para calcular un filtro digital es

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

donde:

SUM - suma;

K(i) - factor de ponderación;

CLOSE (i) - precio de cierre de la barra actual;

FilterPeriod - número de barras para promediar.

 
Alexey Volchanskiy:


A esto me refería. Esta es la fórmula del filtro FIR que yo mismo utilizo. Pero ya he escrito que todo depende de los coeficientes. Sí, se dan, pero sin ninguna descripción, por lo que no puedo juzgar de inmediato. Pero hay un anuncio de la empresa )).

Me refiero a esta parte del artículo

----------

Por ejemplo, podrías intentar construir código en MQL5 para un filtro digital como el FATL de Finware.

En términos generales, la fórmula para calcular un filtro digital es

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

donde:

SUM - suma;

K(i) - factor de ponderación;

CLOSE (i) - precio de cierre de la barra actual;

FilterPeriod - número de barras para promediar.


Ya veo, así que es el mismo tema en una interpretación diferente
 
Maxim Dmitrievsky:

Ya veo, así que es el mismo tema en otra interpretación.


Bueno, no se puede pensar en otra cosa)) El filtro FIR es tremendamente sencillo: las cotizaciones del buffer de entrada se multiplican secuencialmente por la matriz de coeficientes, todo se suma y obtenemos el tick de salida. Si tratamos con ticks, obtendremos un tick de salida. O barra, si trabajamos con Close.

Por eso es ridículo decir que una empresa ha desarrollado un filtro revolucionario para el análisis de las cotizaciones). Hace tiempo que las revoluciones se producen en otros campos.

 
Alexey Volchanskiy:


Bueno, no se puede pensar en otra cosa aquí)) El filtro FIR es muy sencillo: las cotizaciones del búfer de entrada se multiplican por una matriz de coeficientes, todo se suma y se obtiene el tick de salida. Si tratamos con ticks, obtendremos un tick de salida. O barra, si trabajamos con Close.

Por eso es ridículo decir que una empresa ha desarrollado un filtro revolucionario para el análisis de las cotizaciones). Hace tiempo que las revoluciones se producen en otros campos.


Sí, hace varios años este tema se anunciaba a los comerciantes como un nuevo descubrimiento revolucionario de científicos supergeniales).
 
Maxim Dmitrievsky:

Sí, recuerdo que hace unos años este tema se anunciaba a los comerciantes como un nuevo descubrimiento revolucionario de científicos supergeniales).

Solían reclutar gente para la formación. Bueno, cada uno gana lo que puede...
Razón de la queja: