Zig-Zag 指标是用于描述高低点趋势的指标。


MQL5 官方实现

MQL5 官方实现十分地烂,辣鸡,很多无用的变量,程序冗长,不一致,效率低下。
感觉是多个菜鸟合作写出来的,有一些没有用的变量都没有删掉。
不过,先来看看MQL5的官方实现:

辅助函数

首先引入两个辅助用纯函数1,用于搜索一个数组中一个区间内的最大/最小值的索引。

array[iHighest]=maxi∈(startPos−depth,startPos]{array[i]}

array[iHighest] = \max_{i \in (startPos-depth, startPos]}\{array[i]\}

array[iLowest]=mini∈(startPos−depth,startPos]{array[i]}

array[iLowest] = \min_{i \in (startPos-depth, startPos]}\{array[i]\}

// searching index of the highest bar
int iHighest(const double &array[], int depth, int startPos);
// searching index of the lowest bar
int iLowest(const double &array[], int depth, int startPos);

尽管数学上是这样定义的,实际的编程中还需要考虑一些其他的问题:

  1. 区间是否会越界?如果越界了怎么处理?
    可能,但程序保证 startPos - depth >= 0 ,不过官方这样做仍有后果:永远无法引用 array[0]
  2. 在区间中遇到多个最值点如何处理?
    取索引号最大的,因为是从startPos 开始倒序搜索,并且采取了尽量少更新最值的策略,所以结果就是取索引号最大的。

指标参数

  • 搜索深度(ExtDepth)
    上述【辅助函数】中用于计算区间最大/最小的索引号的函数中使用的参数depth,即区间长度。
    (实际上在Zig-Zag指标中在区间中搜索最值总是使用ExtDepth 作为区间长度,默认为12)
  • 最大点数差(ExtDeviation)
    实际上,要将点数转化成价格:deviation = ExtDeviation * _Point; (_Point 是一个点的价格)
    正常情况下,希望当前的最高/低价格处于一个区间。

    nowHigh<lastHigh+deviation

    nowHigh

    nowLow>lastLow−deviation

    nowLow > lastLow - deviation

    • 当前柱的最高价不高于上一个高点价位共 ExtDeviation (点)
    • 当前柱的最低价不低于上一个低点价位共 ExtDeviation (点)
      如果这两个条件不满足,即价格超出了上一个高点与上一个低点所划定的区间,要进行回退重算高低点。
      正常情况下是不需要回退重计算的,但同时也不会产生新的Zig-Zag转折点。
  • 回退计算周期(ExtBackstep) 见【回退计算】

重计算区域的选取

最多只需要变动最新的两个Zig-Zag就可以完成重计算,这两个Zig-Zag的值一个是高点一个是低点,即只有最新的Zig-Zag高、低点是不稳定的

所以我们需要向前找3个Zig-Zag点,重新计算从第三新的Zig-Zag点之后的指标值。

(rates_total - 100, rates_total) 区间中找到至多3个Zig-Zag点。

  • 如果这个区间中有至少3个Zig-Zag点,取最新的3个。
  • 如果这个区间中有0~2个Zig-Zag点(异常),取rates_total - 99 (区间中最早的柱) 作为 Zig-Zag 点。

注意:实际上100柱内不到3个 Zig-Zag点这个情况是异常的,官方实现中有这样的漏洞,没有对这种情况进行特殊的处理,也没有报警告。
这个100是程序预设的常量,要求程序从100柱才开始计算指标:越大则取不到3个Zig-Zag的异常越不容易发生,但是同时计算指标的起点会延后,会损失更多的数据。
实际上这个设计完全可以用程序逻辑来规避,官方的实现不是一个好的设计。

以下只讨论正常情况(取到最新的3个Zig-Zag点)。

取3个点中最早的一个Zig-Zag点,看它是低点还是高点:

  • 如果是低点,接下来应该是一个\/ 形状的凹槽(Pike)
    高Zig-Zag + 低Zig-Zag + 当前点
  • 如果是高点,接下来应该是一个/\ 形状的凸起(Sill)
    低Zig-Zag + 高Zig-Zag + 当前点

最后抹除这个最早的Zig-Zag点之后的所有指标数据(不包括原始价格数据),因为要进行重算。

回退计算

最新的一组高、低点划定了一个价格区间:[lastLow - deviation, lastHigh + deviation]
如果当前价格超出了这个区间,就要进行回退计算,试图修改最新的高/低点。

参数 ExtBackstep 回退步数,默认是3。
设当前计算到 X 号柱,回退时仅考虑[X - ExtBackstep, X) 这个区间中是否有高(低)点,如果有,判断当前价格(X号柱的最高(低)价)是否比这个高(低)点更高(低),如果是,重设这个高(低)点到X号柱。

回退计算的触发条件有两个:
1. 在ExtDepth 长度的区间内发现了新的高(低)点。
2. 当前柱的价格超过限定的区间。

重建指标

在高点、低点序列全部计算完毕以后,要合并成Zig-Zag序列。


参考资料

  • MQL5 ZigZag 官方实现

  1. 纯函数,即无副作用函数。输入不变的情况下结果一定不变,不涉及函数外变量的函数。 ↩

MQL5:zig-zag 指标相关推荐

  1. mql5的include库文件中自定义enum类型在指标文件中的调用方式

    在mql5中编写指标,调用的include文件中某个类中使用了自定义ENUM枚举类型,如图所示: enum Smooth_Method { MODE_SMA_, //SMA MODE_EMA_, // ...

  2. asixs 响应慢_大智慧技术指标快捷键一览!转的!|家居理财 - 鱼叉论坛 - powered by php......

    大智慧技术指标快捷键一览!转的! 大智慧技术指标快捷键一览! [110]:MA 移动平均线[112]:CHANNELS 通道线 [114]:主力成本 [115]:TDX 天地线 [116]:SAR 抛 ...

  3. 政策面、基本面、消息面、技术面、资金面.

    政策面:宏观层.决策层.执行层,对证券市场的指导思想怎么样.指导方针是什么.如果说咱们的证券市场.特别是股市为"政策市",那咱说:做股票,不看<人民日报>不成,是也. ...

  4. 数据结构小笔记-BST、AVL、Splay-Tree、B-Tree、RB-Tree、Hash Table

    20220428 教材:算法导论.具体数学.数据结构与算法分析. 递归:减而治之 or 分而治之. 迭代: ADT = "说明书". Pavlov said his dogs ar ...

  5. zigzag扫描matlab,ZIGZAG扫描的MATLAB实现 | 学步园

    转自阿须数码,用MATLAB实现MPEG中的 ZIG-ZAG 扫描.觉得有点研究价值,实现的方法也很巧妙. 下面给一个参照MPEG提供的方法: === function b=zigzag(a) % 这 ...

  6. 深度学习中几种常见的激活函数理解与总结

    学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比如Sigmoid函数.tanh函数.Relu函数.肯定很多人刚开始和我一样一头雾水,接下来就让我们详细了解一下激活函 ...

  7. 25 个超棒的 WordPress 主题(2012)

    Lulu – Responsive WordPress Theme XO – Responsive Creative WordPress Theme The Arcadian Responsive W ...

  8. 伸展树(Splay tree)浅谈

    树看的越来越多,越来越神奇. 看伸展树这种神级数据结构之前,建议大家首先彻底明白二叉搜索树,这是万树的基础. 然后可以去看下treap,最好再去看下红黑树.如果有线段树的基础那更好了,我们会发现线段树 ...

  9. matlab zigzag算法,ZIGZAG扫描的MATLAB实现

    用MATLAB实现MPEG中的 ZIG-ZAG 扫描.觉得有点研究价值,实现的方法也很巧妙. 下面给一个参照MPEG提供的方法: === function b=zigzag(a) % 这是参照 Uni ...

最新文章

  1. 漫谈面向对象基石之开闭原则(OCP)(转)
  2. 热部署Devtools的简单使用
  3. java object 引用类型_java中的四种引用类型
  4. 泰拉瑞亚服务器怎么让玩家注册,上线10年,《泰拉瑞亚》为何变成了一款交友游戏?...
  5. python语法类似于php_通过PHP与Python代码对比浅析语法差异
  6. 阅文推“单本可选新合同”:授权分级、免费或付费自选
  7. JDBC_ResultSet类_结果集对象
  8. 你在寻觅冬季唯美的海报设计素材么?
  9. antd 轮播图样式_antd-design 的轮播图组件Carousel如何在初始化的时候自动跳转到特定图片...
  10. php留言板系统制作,php制作留言板讲解
  11. Google Guice简介
  12. 怎么用spss做冗余分析_利用SPSS进行相关分析(第八章)概述.ppt
  13. php实现文件下载的几种方式
  14. APM2.8 Rover 自己主动巡航车设计(固件安装和设置)
  15. adb环境搭建以及使用教程
  16. 工作经验应该这么写,有模板哦!
  17. android listview替代,Android笔记——RecyclerView替代ListView
  18. 关于电商商品数据API接口列表,你想知道的(详情页、Sku信息、商品描述、评论问答列表)
  19. python3画直方图出现“Polygon‘ object has no property ‘normed”
  20. 大数据平台安全研究报告2021

热门文章

  1. java8中, 格林威治时间、世界时、祖鲁时间、GMT、UTC、跨时区、夏令时需要用什么类表示呢
  2. mysql 多主多从
  3. 计算机网络的类型和特点
  4. PPT中图表不同粘贴方式的区别
  5. (论文翻译)AutoEncoder 聚类算法 - DEPICT
  6. css解决图片缩小变模糊问题
  7. 飞机机身控制电子设计,原理图和PCB
  8. 树莓派 电脑 网线对联 桥接及ssh
  9. wincc服务器不可用项目打不开,wincc客户端与服务器同步
  10. 疫情后的数字化转型:如何做好医疗数据治理