- 显示:
- 7273
- 等级:
- 已发布:
- 2014.02.06 07:04
- 已更新:
- 2016.11.22 07:33
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
注意!该版本ZigZag指标基于ZigZag code,并且得到作者PPC的授权在此发布 。我测试了那个版本并修复了一个算法上的错误。
该指标是MetaTrader 4Zigzag 指标 的MQL5版本。
注意!AlexSTAL_OutsideBar.mqh 库需要放在MetaTrader5终端的 ..\MQL5\Include\ 文件夹下。
就这样?
我认为ZigZag一定程度上类似价格图表的压缩。ZigZag可以使用柱形的价格进行计算(例如,收盘价)或者高/低价(最通常的方式)。
当在处理MetaQuotes提出的标准ZigZag的时候,我发现了些问题。最主要的问题是标准ZigZag无法处理柱形外的情况。
在2007 Rashid Umarov (Rosh) 发布了处理柱形外情况的Zigzag2 R(DRAW_ZIGZAG方式而非DRAW_SECTION)。
让我们定义“正确的”ZigZag实现细节:
- 高点和低点必须严格的交替;
- 高点必须比所有右侧柱形更高(或者相等),直到下一个(相对的)低点到来。
- 低点必须比所有左侧柱形更低(或者相等),直到下一个(相对的)高点到来。
考虑使用如下例子(EURUSD, H1, 2006, December 8-13)。这里我们有2个柱形外的例子。传统deZigZag无法构建“正确”的图形。
Figure 1.输入参数为[12;5;3] 和 [12;0;0]的 传统 ZigZag
Figure 2.输入参数为[12;5;3]的Zigzag2 R
Figure 3. 输入参数为[12;0;0]的 Zigzag2 R
咋一看,正确的图形应该是如Figure 3所示,但是请注意一些细节:
- 这里之所以能够正确构建是因为输入参数,但是一般情况下算法应该嫩巩固在任何参数下使用。
- 由于柱形高点/低点构成的顺序问题,左侧的外部柱形其实是不正确。
ZigZag必须按如下方式构建。
我测试过如下很多ZigZag算法: ZigZag MT3, ZigZag, Zigzag R, Zigzag2 R, ZigZag_NK, ZigZag_ZUP89_nen, ZigZag_new_nen4, CZigZag, Swing_ZZ_1, DT_ZZ_nen, ZigZag_Talex, Reverse_ZZ, Points_ZZ_1, i_MF_Fractal_ZZ_3in1, ang_Amp_ZZ, ZigzagFr_v1, NonLagZigZag_v2, ZZ_FF_v3, ZigZag Ensign, ZigZag tauber, SQZZ Товаровед, ZZ_2L_nen wellx, Channel ZZ, Azzx_larryzz_3_0, RPoint, RPoint-m v2, ZigZagTF. 但是没有一个很好的解决该问题的。
这里是本指标的图形:
Figure 4. 输入参数为[12;0]的专业ZigZag
Figure 5.输入参数为[23;0]的专业ZigZag
这一版本的一些特点:
- one-pass 算法
- 仅仅重新计算和重绘最后一段(该段不能取消除非历史数据更新)
- 在柱形内部的计算上使用优化算法(如果价格在当前柱形(为完成的)上发生变化或者价格变化小于由输入参数MinMotion定义的阈值时,不会在tick上进行重新计算)
- 有两种算法来对高/低点的形成进行排序:使用柱形的类型(快速但不精确)使用更低时间框架的数据(需要历史数据,你必须对它的存在和正确性进行检查或者你需要修改OutsideBar 库)
这里是一些另外的不正确的ZigZag的例子:
Figure 6. EURUSD, H1, November 29-December 7. (红线:输入参数为[7;0;0]的专业ZigZag。蓝线:输入参数为[7;0;0]的Zigzag2 R
Figure 7. EURUSD, H1, 2010, November 29 - December 7. ZigZag段的正确构建方法。
总结
本版本还不是很完美,我正在试图进行优化。
因为通道算法(iHighest/iLowest)的关系,有时候会跳过高点。
若发现本指标的任何bug请联系我。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/263

该脚本生成一个源代码的文件(MQL5传统程序的解决办法)。这在研究程序和算法时非常有用。

一个用于创建和输出BMP图像的类。