下载MetaTrader 5

创建非滞后数字滤波器

27 五月 2014, 15:06
Konstantin Gruzdev
0
1 222

简介

本文介绍在流数据中确定有效信号(趋势)的一种方法。应用至市场报价的小滤波(平滑)测试表明创建未在最后的柱上重绘的非滞后数字滤波器(指标)的潜力。


标准方法

本方法基于经典时间序列平滑方法。在本网站和其他网站上,有大量的文章讨论这个主题。结果同样经典:

  1. 趋势的变化在显示上存在延迟;
  2. 更好的指标(数字滤波器)响应以平滑质量的下降为代价;
  3. 实现非滞后指标的尝试导致在最后的样本(柱)上重新绘制。

鉴于交易人员已学会用持续的经济过程处理这些事情,这在评估实时经验数据时是不可接受的,例如在测试飞行器构件时。


主要问题

众所周知,大多数交易系统随着时间停止执行,且指标只是反映一定的时间间隔。这很容易解释:市场报价不是平稳的。平稳过程的定义可在维基百科上找到:

平稳过程是一个随机过程,其联合概率分布不随时间而改变。

从这个定义来看,平稳时间序列的分析方法并不适用于技术分析。这是可以理解的。有经验的做市商进入市场会搞乱我们之前就已知市场报价序列的参数进行的所有计算。

尽管这似乎是显而易见的,很多指标均基于平稳时间序列分析理论。这种指标的示例包括移动平均线指标和它们的修改版。然而,也有一些创建自适应指标的尝试。他们应该在一定程度上考虑到市场报价的非平稳性,但他们似乎没能创造奇迹。使用非稳态序列(小波经验模态和其他)的当前已知分析方法“惩罚”做市商的尝试同样未获成功。看起来像是一直忽视了或未予识别某个关键因素。

主要原因在于使用的方法并非为处理流数据而设计。所有(或几乎所有)这些方法都开发用于分析已知或从技术分析的角度而言的历史数据。这些方法十分便利,例如,在地球物理学中:您感觉到地震,获得地震波曲线然后进行数月分析。换言之,在滤波过程中在时间序列端部上升的不稳定性影响最终结果的情形中,这些方法是恰当的。

在分析经验流数据或市场报价时,我们专注于最近接收到的数据而非历史数据。这些是无法使用经典算法来处理的数据。


群集滤波器

群集滤波器是接近初始序列的一组数字滤波器。不要将群集滤波器与群集指标混淆。

群集滤波器在实时分析非稳态时间序列 - 换言之,流数据 - 时十分方便。这意味着,这些滤波器的主要任务是实时获得接收到的新数据的最有可能的平滑值,而非平滑已知时间序列值。

与各种分解方法或所需频率的滤波器不同的是,群集滤波器创建初始序列的可能值的一个组合或一个范围,然后进一步分析以接近初始序列。输入序列在分析中更像是一个参考而不是目标。主分析涉及在处理接收到的数据后由一组滤波器计算得到的值。

图 1. 简单群集滤波器图解

图 1. 简单群集滤波器图解

一般情况下,群集中包含的每个滤波器有其各自的特性,并且不以任何方式相关。这些滤波器有时候定制用于分析它们自己的平稳时间序列,这描述了初始非平稳时间序列的个体属性。在最简单的情况下,如果初始非稳态序列改变其参数,滤波器则“切换”。因此,群集滤波器在本质上追踪实时更改。


群集滤波器设计程序

任何群集滤波器都可通过三个步骤设计:

1. 第一步通常是最难的一步,但接收到的流数据的概率模型就是在这一步中形成的。这些模型的数量可以任意大。它们不总是与影响可接近数据的物理过程相关。模型对可接近序列的描述越精确,获得非滞后群集滤波器的概率越高。

2. 在第二步,为每个模型创建一个或多个数字滤波器。在一个群集中加入滤波器的最普遍的情况是这些滤波器属于描述可接近序列的模型。

3. 因此,我们在群集中可以有一个或多个滤波器。从而,对于每个新的样本,我们具有采样值和一个或多个滤波器值。所以,对于每个样本,我们具有一个向量或由多个(至少两个)值组成的人工噪声。现在我们要做的只是选择最合适的值。


简单群集滤波器示例

为便于说明,我们将使用市场报价作为输入序列来实现与上图对应的简单群集滤波器。您可以使用任意时间表的收盘价。

1. 模型说明。我们接下来的工作将基于下述假设:

  • 可接近序列是非平稳的,即其特性倾向于随时间而变。
  • 柱的收盘价不是实际柱的价格。换言之,柱的登记收盘价与该柱上其他价格变动一样,是噪声变动之一。
  • 实际价格或可接近序列的实际值位于当前柱的收盘价和上一个柱的收盘价之间。
  • 可接近序列趋于保持其方向。也就是说,如果它在上一个柱上上涨,它趋于在当前柱上保持上涨。

2. 选择数字滤波器。为简便起见,我们采用两个滤波器:

  • 第一个滤波器将是一个基于最后两个收盘价计算的简单移动平均线。我相信它非常适合为我们的模型指定的第三个假设。
  • 既然我们有了非平稳滤波器,我们也将尝试使用额外的滤波器,希望有助于识别时间序列的特性变化。我选择指数移动平均线,因为这个选项看上去合理并相当适合我。这是因为 EMA 要快于 MA 的事实,因此它不会引起相对于趋势的延迟并具有更好的噪音响应。EMA 同样将基于最后两个收盘价计算。

3. 为群集滤波器选择合适的值。

因此,对于每个新的样本,我们将具有样本值(收盘价)以及 MA 和 EMA 的值。根据为我们的模型指定的第二个假设,将忽略收盘价。此外,我们基于最后一个假设选择 MA 或 EMA 值,即保持趋势方向:

  • 对于上升趋势,即 CF(i-1)>CF(i-2),我们从下面四个变体中选择一个:

    如果 CF(i-1)<MA(i) 且 CF(i-1)<EMA(i),则 CF(i)=MIN(MA(i),EMA(i));

    如果 CF(i-1)<MA(i) 且 CF(i-1)>EMA(i),则 CF(i)=MA(i);

    如果 CF(i-1)>MA(i) 且 CF(i-1)<EMA(i),则 CF(i)=EMA(i);

    如果 CF(i-1)>MA(i) 且 CF(i-1)>EMA(i),则 CF(i)=MAX(MA(i),EMA(i))。


  • 对于下降趋势,即 CF(i-1)<CF(i-2),我们从下面四个变体中选择一个:

    如果 CF(i-1)>MA(i) 且 CF(i-1)>EMA(i),则 CF(i)=MAX(MA(i),EMA(i));

    如果 CF(i-1)>MA(i) 且 CF(i-1)<EMA(i),则 CF(i)=MA(i);

    如果 CF(i-1)<MA(i) 且 CF(i-1)>EMA(i),则 CF(i)=EMA(i);

    如果 CF(i-1)<MA(i) 且 CF(i-1)<EMA(i),则 CF(i)=MIN(MA(i),EMA(i))。


其中:

  • CF(i) – 群集滤波器在当前柱上的值;
  • CF(i-1) 和 CF(i-2) – 群集滤波器在之前柱上的值;
  • MA(i) – 简单移动平均线在当前柱上的值;
  • EMA(i) – 指数移动平均线在当前柱上的值;
  • MIN – 最小值;
  • MAX – 最大值;


程序代码和群集滤波器性能

含我们的群集滤波器的指标的代码并不比移动平均线的代码更复杂。它不涉及任何专门技术,所以无须在此讨论。本文附带了源代码。

不用浪费时间,您可以观看下方提供的视频,查看我们的指标性能:


视频 1. 简单群集滤波器的性能

尽管滤波器的设计过程看上去更像是变戏法而非严格的数学方法,该视频清楚地表明了群集滤波器线的行为比单独的移动平均线的行为更充分。这一点在初始序列的锯齿部分表现得尤为明显。如果这些还未给读者留下深刻印象,我们可以进一步比较群集滤波器和 JJMA,后者被视为最好的指标之一。下一个视频展示 JJMA 和我们的群集滤波器在相同部分上的对比。我尝试选择 JJMA 参数,以便其线可与我们的指标线在最大程度上匹配。

视频 2. 简单群集滤波器对比 JJMA

平均而言,我们的滤波器在任何时间序列上展现出与 JJMA 大致相当的性能。但 JJMA 已达到其最佳状态,而我们的群集滤波器还有提升空间。


高级平滑效果

到目前为止,尚没有证据表明群集滤波器能够平滑输入数列而无延迟。要取得这一效果,需要比上文中讨论的远为复杂的滤波器。

为便于说明,我开发了一个GMomentum 测试指标。它包含两个指标线:

  • 蓝线 - 经典动量。
  • 红线 - 数字群集滤波器使用更复杂的算法平滑后的经典动量。

指标的设置涵盖专为本文准备的各种测试选项。在下文说明的测试中,我们将使用William Blau 提出的相对动量。在开展您自己的试验时,您可以使用其他动量变体 - 结果将会一样。指标详细说明以及下载和使用指示在指标说明中提供。

本文使用动量并无特殊原因。动量线噪音污染严重,因此在我看来滤波器的性能更能说明问题。那么,运行GMomentum 测试指标,对比分析红线和蓝线的行为。

首先,我们来看一件有趣的事情。为此,在您运行指标前,将 "Filter"(滤波器)参数设置为 "Test No.1 Advance"(预先测试 No.1)。在此模式下,滤波器设置往往揭示了什么是“超前效应”。测试时,您将无法查看对动量的整个初始线的平滑。滤波器监视获得超前效应的可能性较大的区域。不足为奇的是,这并不总是成功的。然而,它发生的频率足够引起我们的注意。

下图给出了最能说明滤波器性能的部分之一。

图 2. 动量线平滑中的超前效应

图 2. 动量线平滑中的超前效应

应该注意的是,它似乎仅仅超前滤波。此效应的发生完全是由于动量线的噪声变动,而不是因为滤波器存在提前。对其他指标(从简单 MA 到 JJMA)的类似研究确认,平滑的超前效应可在各个指标中观察到。指定的周期越小,观察到该效应的频率越大。最新的研究表明,该效应可被增强。它完全取决于生成可能值的向量的方法及其分析。


眼镜蛇效应

那些已经看过指标运行的读者可能会注意到另一个异常。最后一个未完成柱上的指标线不是始终跟随价格的。例如,价格可能上涨,而指标向下移动,反之亦然。当市场较为快速或通过观察仪查看时,它有时酷似眼镜蛇的舌头追踪猎物。

视频 3.平滑的超前效应和眼镜蛇效应


超前趋势错误

从上文我们可以得知,当动量的初始线与趋势相背离时(成为噪音),结果是平滑线对初始线的超前效应。显然,动量线也可能在其他方向上进行错误移动,即与趋势方向相去甚远的意外“射击”,有时候延迟时间太长,即使趋势已经反向。如果滤波器能够放慢这种走势,这是符合逻辑的。

让我们看看算法是如何过滤这些超前趋势错误的。为此,在您运行指标前,应将 "Filter"(滤波器)参数设置为 "Test No.2 Smoothing"(测试 No.2 平滑)。在此测试期间,群集滤波器的操作被分为两个部分。

在图表子窗口中显示的指标简称 "GMomentum(Parameter 1, Parameter 2)" 在括号中具有两个参数。如果第二个参数为 -1,算法将尝试修复(平滑)超前趋势错误。如果第二个参数等于或大于零,高级平滑设置将开始工作。

下方提供的视频展示了在从最小到可接受值的方向(以及反向)改变滤波器的灵敏度时滤波器的操作。要获得视频中显示的效果,可使用向上和向下键控制滤波器的灵敏度(假设指标窗口是激活的)。

视频 4. 过滤超前趋势错误。

上述视频表明,尽管价格和动量的初始线突然变动,随着滤波器的灵敏度增加,动量线平滑而无滞后。达到最大平滑时,我们得到可接受的进入点。

此外,平缓区域给大多数指标带来一个问题。不过,在这里,即使在现有的设置下,它们当中的一些也很容易衰退为近乎直线。理论上,这个技巧可用于改善任何现有指标而不会带来额外的滞后。从实用的观点来看,这还有待考证。

在下一个视频中,请重点关注滤波器如何使初始动量线的主要波峰变平,以及如何绘制更接近于价格变动的更平滑的趋势线而几乎没有滞后。相关解释在有关William Blau 的指标的文章中提供。

视频 5. 平滑初始动量线的波峰。

取得的令人印象深刻的结果在报价的整个历史数据上并不是一致的。但考虑到动量具有大量噪音以及指标被单独实施以展示过滤流数据而无滞后的事实,我们可以认为这是完全可以接受的。此外,还应注意到指标并未重绘。


脉冲响应

使用内置滤波器进行的动量参数研究看上去十分有趣。例如,脉冲响应很好地阐明了波峰从指标线消失的方式和位置。要执行测试,应将 "Filter"(滤波器)参数设置为 "Test No.3 Impulse"(测试 No.3 脉冲)。在测试期间,每 1024 个柱接收到一个单位脉冲。执行指标后,在图表中找到相关位置。应如下所示:

图 3. 动量脉冲响应

图 3. 动量脉冲响应

当指标运行时,滤波器被禁用。因此,您将能够在蓝线和红线上看到两个波峰:一个波峰出现在单位脉冲出现时,即与其相等;另一个方向相反的波峰在指定周期数后出现。这就是“裸”动量的脉冲响应的外观。此外,使用向上或向下键逐渐增大或降低滤波器灵敏度,看到的画面应如下所示:

视频 6. 动量脉冲响应

我们可以看到,第二个波峰被滤波器完全扁平化,而第一个波峰完全保持不变。滤波器修复了所有动量效应,精确地重建了初始画面:一个单位脉冲本身。不存在滞后。振幅或单位脉冲形状无失真。运行时它会是完美滤波器吗?


完美滤波器

有一个材料因素不允许我们立即将所述的过滤器视为完美。 这一点将稍后解释。

人们认为,完美滤波器不可能存在,所有滤波器(指标)都存在滞后。但我们如何解释得到的结果?所有这些都表现为可观察到的形式。这是开发人员的技巧吗?我们也许可以在单位脉冲代码中使用编码技巧。但任何报价上都可以观察到该效应。此外,无需为每个交易工具专门设置或重设指标。

使用物理对象(冷凝器、电感器等)构建滤波器时,完美滤波器不可能存在。这是由自然本身所决定的。然而,数字世界中有可能存在完美滤波器吗?在给出这个问题的答案时当然不应考虑计算机系统的物理局限性(精确度、计算速度等)。

让我们回到我们的指标。内置数字滤波器不属于线性滤波器。对于包含内置滤波器的指标,上文中讨论的脉冲响应只是碰巧结果很好的一种特殊滤波情况。要得出任何深远的结论,更加充分和仔细的研究是必需的。


总结

我希望本文提供的信息有助于打破有关创建数字滤波器(指标)的陈腔滥调。

所有说明的内容都可使用提议指标进行研究。引入的 GMomentum 测试版本将允许您访问群集滤波器的性能和潜能,而简单滤波器示例可为开发人员带来创建他们自己的滤波器的动力。

最后,我冒昧得出下述结论:创建全功能的非滞后指标(数字滤波器)是有潜在可能的。

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
原文地址: https://www.mql5.com/ru/articles/812

附加的文件 |
clusterfilter.mq5 (6.67 KB)
处理 MQL5“EA 交易”的 GSM 调制解调器 处理 MQL5“EA 交易”的 GSM 调制解调器

当前,有相当数量的方式可以对交易账户进行轻松的远程监视:移动终端、推送通知、ICQ 。但都需要互联网连接。本文描述了“EA 交易”的创建程序,即使在移动互联网不可用的情况下,其也允许您通过电话或短信与交易终端保持联系。

Kagi 制图指标 Kagi 制图指标

文中介绍了 Kagi 图指标以及各种制图选项和其它函数,同时考虑了指标制图原则及其 MQL5 实现功能。本文还展示了最常见的实现方式,阴阳交易策略,偏离走势线并不断提高“肩”部/降低“腰”部。

MQL5 细则手册:保存基于指定标准的“EA 交易”的优化结果 MQL5 细则手册:保存基于指定标准的“EA 交易”的优化结果

我们继续有关 MQL5 编程的系列文章。这一次,我们来看一看如何获得“EA 交易”参数优化期间传递的每个优化的结果。将完成实现,以确保如果外部参数中指定的条件得到满足,对应的传递值将被写入文件。除了测试值,我们还将保存带来这样的结果的参数。

MQL5 Cookbook: 开发多品种指标分析价格偏离 MQL5 Cookbook: 开发多品种指标分析价格偏离

在本篇中, 我们将研究开发一款多品种指标来分析指定时间周期内的价格偏离。其核心议题已经在之前的多货币对指标编程文章中进行过讨论 "MQL5 Cookbook: 用 MQL5 开发多品种波动指标"。所以这次,我们将仅关注那些有了大幅变化的新特征和功能。如果您是多货币对指标编程的新人, 我建议您先去阅读之前的文章。