处理滤波器系数的最佳方式是什么? - 页 4

 

抱歉我是外行,但像SATL FATL等数字滤波器 是否与你的工作接近,或来自另一个领域?

我知道是电子方面的问题。将它们应用于报价的哲学和理论上的有效性是什么?

 

关于信号处理,有Sophocles J. Orfanidis 的书,《最佳信号处理》(和《信号处理 简介》)。

 
Maxim Dmitrievsky:

抱歉我是外行,但像SATL FATL之类的数字滤波器 是否与你的工作接近,还是来自另一个领域?

我的理解是,它是电子产品的东西。能够将其应用于报价的哲学和理论上的有效性是什么?


你能提供一个关于这些类型的过滤器的描述链接吗?然后我就能清楚地回答。我粗略地看了一下,没有发现文章中的描述。

我为有限脉冲响应FIR或FIR的滤波器做了一个类。而它们会有什么样的类型和参数,完全由系数决定,算法对所有的都是一样的。

我考虑的是椭圆滤波器的系数,因为它们是最短的,所以它们的延迟会最短。

关于哲学和有效性--过滤什么没有区别,电信号、报价或任何其他数据。滤波器的工作是去除不必要的频率。例如,LPF粉碎了高频,在时域我们得到平滑的报价,因为高频噪声被杀死了。我张贴了图表,在那里可以清楚地看到它。同样的Simple MA mouving是一种常见的FIR滤波器,但不是很有效。我在文章中详细看了一下。

 
Alexey Volchanskiy:


你能给我一个关于这些类型的过滤器的描述链接吗?然后我就能清楚地回答。我粗略地看了一下,在文章中没有发现任何描述。

我为有限脉冲响应FIR或FIR的滤波器做了一个类。而它们的类型和参数完全由系数决定,算法对所有的都是一样的。

我考虑椭圆滤波器的系数,因为它们是最短的,所以它们的延迟会最小。

关于哲学和有效性--过滤什么没有区别,电信号、报价或任何其他数据。滤波器的工作是去除不必要的频率。例如,LPF粉碎了高频,在时域我们得到平滑的报价,因为高频噪声被杀死了。我张贴了图表,可以清楚地看到它。同样的Simple MA mouving是一种常见的FIR滤波器,但不是很有效。我在文章中已经详细介绍了这一点。


但在那里,文章的链接是自己插入的,它涉及的正是这个问题。

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

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

关于信号处理,有以下书籍:Sophocles J. Orfanidis, Optimum Signal Processing(and Introductionto Signal Processing)


有趣的是,有很多例子,虽然都是用指针。阿拉

/* 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;
}

到目前为止,我已经做到了这一点,这是从例子中得到的,没有课。在m_Coeff[] 中我们需要加载系数。

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

而在那里,文章的链接是自己插入的;它正是关于这一点。


这就是我所说的。下面是我自己使用的FIR滤波器的公式。但我已经写过了--这一切都取决于系数的大小。是的,它们被提供了,但没有任何描述,所以我不能马上判断。但有一个公司的广告))。

我指的是文章中的这一块

----------

例如,你可以尝试在MQL5中为像Finware的FATL这样的数字滤波器 建立代码。

一般来说,数字滤波器的计算公式为:。

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

其中。

SUM - 总数。

K(i) - 加权系数。

CLOSE (i) - 当前条形图的收盘价。

FilterPeriod - 用于平均化的条数。

 
Alexey Volchanskiy:


这就是我所说的。下面是我自己使用的FIR滤波器的公式。但我已经写过了--一切都取决于系数。是的,它们被赋予了,但没有任何描述,所以我不能马上判断。但有一个公司的广告))。

我指的是文章中的这一块

----------

例如,你可以尝试在MQL5中为像Finware的FATL这样的数字滤波器 建立代码。

一般来说,数字滤波器的计算公式为:。

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

其中。

SUM - 总数。

K(i) - 加权系数。

CLOSE (i) - 当前条形图的收盘价。

FilterPeriod - 用于平均化的条数。


我明白了,所以这是同一个主题的不同解释
 
Maxim Dmitrievsky:

我明白了,所以它是同一主题的另一种解释。


好吧,你想不出别的办法了))。FIR滤波器非常简单--来自输入缓冲区的报价依次乘以系数数组,全部加起来,我们就得到了输出勾。如果我们处理滴答,我们将获得一个输出滴答。或者说吧,如果我们和Close一起工作。

这就是为什么说一家公司开发了一个革命性的报价分析过滤器是很荒谬的)。革命在其他领域早就有了。

 
Alexey Volchanskiy:


好吧,你在这里想不出别的办法了))。FIR滤波器非常简单--来自输入缓冲区的报价与一个系数数组相乘,全部相加后得到输出勾。如果我们处理滴答,我们将获得一个输出滴答。或者说吧,如果我们和Close一起工作。

这就是为什么说一家公司开发了一个革命性的报价分析过滤器是很荒谬的)。革命在其他领域早就有了。


是的,几年前,这个主题被宣传为超级天才科学家的新的革命性发现,向交易商宣传)。
 
Maxim Dmitrievsky:

是的,我记得几年前这个话题被宣传为超级天才科学家的新的革命性发现,给交易员们看)。

他们曾经招募人员进行培训。好吧,每个人都能赚到尽可能多的钱......。