指标: FIR_filter

 

FIR_filter:

移动平均, 使用数字滤波器计算。

FIR_filter

作者: Vladimir

 
为什么 PI数字 如此准确
 

DC2008:
А зачем такая точность числа ПИ? 

我没怎么想过这个问题。在谷歌上很容易找到任何高精度常数。我想,如果 metatradair 不需要这么高的精度,它就会自动决定舍弃多少位小数。
 

您确定公式正确吗?请与以下http://dspsystem.narod.ru/add/win/win.html 进行比较

Скользящая средняя на основе цифрового фильтра. В данном примере используется Hann Window. Для изменения коэффициентов фильтра, редактируйте следующие строки в OnInit():

关于术语,抱歉,您更改的不是滤波系数,而是窗口系数。它们是不同的东西。在你的例子中,数字滤波器 (DF) 是移动平均线 (MA) 它(MA)可以与任何窗口一起使用(上面的链接提供了其中的一小部分)。每个窗口(有很多)都有特定的用途。通常,它能改善 DF 的某些特性,但您必须为此付出代价,没有什么是不劳而获的,输出频谱会出现失真。

至于 Pi 的准确性,准确性从来都不是多余的。 我们 总是有时间加载结果。这里有一个简单的设置方法https://www.mql5.com/zh/code/8309。

这是一个非常不错的解决方案。

 pi = 4*MathArctan(1);
 
Prival:

至于圆周率的准确性,准确性从来都不是多余的。 我们 可以随时加载结果。这里有一个简单的设置方法https://www.mql5.com/zh/code/8309。

不要将 pi 定义为变量。让它成为一个常数。

但也不需要额外的字符。对于 double,我们知道可以存储的字符数。

 
lea:

您不应该将 pi 定义为变量。最好让它成为一个常数。

但也不需要额外的字符。对于 double,我们知道可以存储的字符数。

你错了。仅仅因为没有以最高精度定义 pi,我就损失了两周的时间。我检查了用 Matkad 得到的频谱结构和用 FFT 库https://www.mql5.com/zh/code/9696 得到的频谱结构。
 
Prival:

您确定公式正确吗?请与以下http://dspsystem.narod.ru/add/win/win.html 进行比较

关于术语,抱歉,您更改的不是滤波系数,而是窗口系数。它们是不同的东西。在你的例子中,数字滤波器 (DF) 是移动平均线 (MA) 它(MA)可以与任何窗口一起使用(上面的链接提供了其中的一小部分)。每个窗口(有很多)都有特定的用途。通常,它可以改善 DF 的某些特性,但你必须为此付出代价,没有什么是不劳而获的,输出频谱会出现失真。

哈恩窗口和其他类似窗口有不同的公式。仔细想想,它们都是一样的。您链接中的公式有一个很大的缺点:在 n=0 和 n=N-1 时窗口值为零。由于价格乘以零是没有意义的,因此窗口只存在于 n=1...n=N-2 的价格中。现在,让我们用 Per 表示窗口不等于零的价格数,就像我所做的那样,那么我们就得到 N-2=Per 或 N=Per+2。将这个 N 代入您链接中的哈恩公式,您将得到与我相同的公式。

关于指标的名称,名称是对的。根据定义,我所构建的是一个具有有限脉冲响应的数字滤波器

根据输入定义 FIR 滤波器输出的差分方程

y[n]=b_0 x[n] + b_1 x[n-1] + ...+ b_N x[n-N]

其中

  • x[n] 为输入信号,
  • y[n] 为输出信号,
  • bi 为滤波器系数
  • N 为滤波器阶数

参见http://en.wikipedia.org/wiki/Finite_impulse_response

我从事电子技术工作已经 21 年了。感谢您的评论。能与知识渊博的人交流真好。

 
gpwr:

哈恩窗和其他类似的窗户有不同的公式。仔细想想,它们都是一样的。您链接中的公式有一个很大的缺点:在 n=0 和 n=N-1 时,窗口值为零。由于价格乘以零是没有意义的,因此窗口只存在于 n=1...n=N-2 的价格中。现在,让我们用 Per 表示窗口不等于零的价格数,就像我所做的那样,然后我们得到 N-2=Per 或 N=Per+2。把这个 N 代入你链接中的哈恩公式,就会得到与我相同的公式。

....

谢谢你的维基百科链接。我将尝试用公式来说明,

对于您的情况,更准确的公式写法是

y[n]=a_0*b_0* x[n]+a_1*b_1* x[n-1] + ...+a_N*b_N* x[n-N]

x[n] 是输入信号、

y[n] 为输出信号、

bi 是滤波器系数,而

а[i] 是 窗口系数、

N 是滤波器阶数

也就是说,您将 DF 系数(b) 和窗口系数(a) 进行了卷积。

是的,你说得对,窗函数的书写公式是不同的。但造成这种差异的原因在于卷积是在频域还是时域进行的。而这些公式是通过傅立叶变换http://ru.wikipedia.org/wiki/Оконное_преобразование_Фурье 严格联系在一起的。

虽然公式相似,但千万不要混淆卷积是在哪个域中进行的,否则就会出现 "天罡"。

关于n。在公式中,确定是从 0 还是 1 开始是非常重要的("......窗口只适用于 n=1 的价格.....n=N),如果移动 1,那么一切都会移动,N-1 就会变成N,而不是N-2

哈恩窗口的精确公式如下

p(t) = 0.5[1+cos(pi*t/tac)].

如果您想更深入地了解这一主题,我在附件中提供了一份讲座文件。

对于交易者

我将尝试用一个大家都知道的例子来解释我们在谈论什么。

https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma

大家都知道

(a) 简单移动平均线 (SMA)。

它的窗口是矩形的,即每个价格值的权重 a[i]= 1 相同,与历史深度无关。

b) 线性加权移动平均线(LWMA)

在加权移动平均法中,最近的数据权重较大,较早的数据权重较小。

即窗口系数 a[1]=1,a[2]=1/2, a[3]=1/3 ....a[n]=1/n

所以。 gpwr 无线电工程师总是能与电子工程师找到共同语言,尤其是如果双方都不是新手,都会说一种通用语言--数学语言。

附加的文件:
dsp.rar  1811 kb
 

只有 3 个指标 - 价格、收盘价 和简单移动平均线