MQL5:zig-zag 指标
Zig-Zag 指标是用于描述高低点趋势的指标。
MQL5 官方实现
MQL5 官方实现十分地烂,辣鸡,很多无用的变量,程序冗长,不一致,效率低下。
感觉是多个菜鸟合作写出来的,有一些没有用的变量都没有删掉。
不过,先来看看MQL5的官方实现:
辅助函数
首先引入两个辅助用纯函数1,用于搜索一个数组中一个区间内的最大/最小值的索引。
array[iHighest] = \max_{i \in (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);
尽管数学上是这样定义的,实际的编程中还需要考虑一些其他的问题:
- 区间是否会越界?如果越界了怎么处理?
可能,但程序保证startPos - depth >= 0
,不过官方这样做仍有后果:永远无法引用array[0]
。 - 在区间中遇到多个最值点如何处理?
取索引号最大的,因为是从startPos
开始倒序搜索,并且采取了尽量少更新最值的策略,所以结果就是取索引号最大的。
指标参数
- 搜索深度(ExtDepth)
上述【辅助函数】中用于计算区间最大/最小的索引号的函数中使用的参数depth,即区间长度。
(实际上在Zig-Zag指标中在区间中搜索最值总是使用ExtDepth
作为区间长度,默认为12) 最大点数差(ExtDeviation)
实际上,要将点数转化成价格:deviation = ExtDeviation * _Point;
(_Point
是一个点的价格)
正常情况下,希望当前的最高/低价格处于一个区间。nowHigh<lastHigh+deviationnowHigh
nowLow>lastLow−deviationnowLow > 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 官方实现
- 纯函数,即无副作用函数。输入不变的情况下结果一定不变,不涉及函数外变量的函数。 ↩
MQL5:zig-zag 指标相关推荐
- mql5的include库文件中自定义enum类型在指标文件中的调用方式
在mql5中编写指标,调用的include文件中某个类中使用了自定义ENUM枚举类型,如图所示: enum Smooth_Method { MODE_SMA_, //SMA MODE_EMA_, // ...
- asixs 响应慢_大智慧技术指标快捷键一览!转的!|家居理财 - 鱼叉论坛 - powered by php......
大智慧技术指标快捷键一览!转的! 大智慧技术指标快捷键一览! [110]:MA 移动平均线[112]:CHANNELS 通道线 [114]:主力成本 [115]:TDX 天地线 [116]:SAR 抛 ...
- 政策面、基本面、消息面、技术面、资金面.
政策面:宏观层.决策层.执行层,对证券市场的指导思想怎么样.指导方针是什么.如果说咱们的证券市场.特别是股市为"政策市",那咱说:做股票,不看<人民日报>不成,是也. ...
- 数据结构小笔记-BST、AVL、Splay-Tree、B-Tree、RB-Tree、Hash Table
20220428 教材:算法导论.具体数学.数据结构与算法分析. 递归:减而治之 or 分而治之. 迭代: ADT = "说明书". Pavlov said his dogs ar ...
- zigzag扫描matlab,ZIGZAG扫描的MATLAB实现 | 学步园
转自阿须数码,用MATLAB实现MPEG中的 ZIG-ZAG 扫描.觉得有点研究价值,实现的方法也很巧妙. 下面给一个参照MPEG提供的方法: === function b=zigzag(a) % 这 ...
- 深度学习中几种常见的激活函数理解与总结
学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比如Sigmoid函数.tanh函数.Relu函数.肯定很多人刚开始和我一样一头雾水,接下来就让我们详细了解一下激活函 ...
- 25 个超棒的 WordPress 主题(2012)
Lulu – Responsive WordPress Theme XO – Responsive Creative WordPress Theme The Arcadian Responsive W ...
- 伸展树(Splay tree)浅谈
树看的越来越多,越来越神奇. 看伸展树这种神级数据结构之前,建议大家首先彻底明白二叉搜索树,这是万树的基础. 然后可以去看下treap,最好再去看下红黑树.如果有线段树的基础那更好了,我们会发现线段树 ...
- matlab zigzag算法,ZIGZAG扫描的MATLAB实现
用MATLAB实现MPEG中的 ZIG-ZAG 扫描.觉得有点研究价值,实现的方法也很巧妙. 下面给一个参照MPEG提供的方法: === function b=zigzag(a) % 这是参照 Uni ...
最新文章
- 漫谈面向对象基石之开闭原则(OCP)(转)
- 热部署Devtools的简单使用
- java object 引用类型_java中的四种引用类型
- 泰拉瑞亚服务器怎么让玩家注册,上线10年,《泰拉瑞亚》为何变成了一款交友游戏?...
- python语法类似于php_通过PHP与Python代码对比浅析语法差异
- 阅文推“单本可选新合同”:授权分级、免费或付费自选
- JDBC_ResultSet类_结果集对象
- 你在寻觅冬季唯美的海报设计素材么?
- antd 轮播图样式_antd-design 的轮播图组件Carousel如何在初始化的时候自动跳转到特定图片...
- php留言板系统制作,php制作留言板讲解
- Google Guice简介
- 怎么用spss做冗余分析_利用SPSS进行相关分析(第八章)概述.ppt
- php实现文件下载的几种方式
- APM2.8 Rover 自己主动巡航车设计(固件安装和设置)
- adb环境搭建以及使用教程
- 工作经验应该这么写,有模板哦!
- android listview替代,Android笔记——RecyclerView替代ListView
- 关于电商商品数据API接口列表,你想知道的(详情页、Sku信息、商品描述、评论问答列表)
- python3画直方图出现“Polygon‘ object has no property ‘normed”
- 大数据平台安全研究报告2021