MT5 MT4 zigzag指标的算法详解
mt4 mt5的zigzag的指标算法,在度娘上面找到了不少,都是讲得云里雾里的,
有些讲得好像是很明了,但是,一对应到代码里面,就又懵了。到底这个是如何用代码实现。
经过我不懈的研读,测试,调试,终于解开了这个谜
首先是 mt4 5 的作图机制,包括这函数OnInit() ,里面的东西就不详细讲了(主要是自己也没搞太清楚);
主要的是 OnCalculate()的循环机制~~
这里,我们主要是理解的是,通过这个函数的循环,我们可以获取的信息:
rates_total (所有k线数目),也就是bar的数目;
prev_calculated,这个是上次运行OnCalculate()留下的结果数目,这里的留的数值的就是bar数目;
后面的都好理解,open[] high[] low[] close[] 这个分别代表每个bar 的开盘价,最高价,最低价,收盘价。
其他参数都米有用到的。
开始来重点了,下面出场的是我们都是经常迷惑的三个可调参数:InpDepth InpDeviation InpBackstep
对应就是depth deviation backsteps 第一个叫宽度比较合适,第二个叫偏离偏差比较合适,名字上看就知道,指细微的差别,第三个即使字面意思了,回退步数,但是我觉得叫回溯步数更合适;
代码当中,同时还定义了重要存储各个顶点的三个数组:
ZigZagBuffer[] :这个是代表需要画出来的各个顶点,就是落实下来的上下转折点,这个是结合HighMapBuffer 和LowMapBuffer的所有点,重新筛选出来的;
HighMapBuffer[]:代表所有的合乎策略的高点,这个肯定比zigzag的高点要多
LowMapBuffer[]:同理这个代表合乎策略低点
以下就详细介绍的 High Low 的MapBuffer是策略是如何实现的:
这里就不结合枯燥的代码了,
只选Low的方向:
low点的选择是这样:在宽度范围depth,按默认值12,就是宽度范围为12跟k线寻找,只有这12根K线最后一根是这么多根线里面最低的(这里肯定最低价,不是收盘价),然后就会把这个最低值记录在LowMapBuffer里面,其它的值,全部是0
而且,误差范围在正负deviation(要乘以基点值)里面,都会去记录
按照以上话,就有可能会产生两个密集的低点,算法里面就会以后面一点的为准,然后往前回溯Backstep的步数,默认值是3步,就是回溯3个k线,把值清零。
可以这么理解,一个极值(low点或者high点)前后三步以内是不允许产生新的同方向的极值
就是low点前后三步,不会有low点 ,high点前后三步也是如此。
上图看再说明一次,以下这是一个宽12bar,就是12K线的水平线,
现在看这个两个低点不能成为极值点呢,
我们用上面那条12宽度的水平线度量一下就懂,
记住最新值跟最低点是同一个点的时候,才会更新为极值,反之亦然
这里还是附上原版代码可以对着看一下:
val=low[Lowest(low,InpDepth,shift)];//这里Lowest函数是找出宽度InpDepth个K线的里面的最低值if(val==last_low)val=0.0;else{last_low=val;if((low[shift]-val)>InpDeviation*_Point)val=0.0;else{for(back=1; back<=InpBackstep; back++){res=LowMapBuffer[shift-back];if((res!=0) && (res>val))LowMapBuffer[shift-back]=0.0;}}}if(low[shift]==val)LowMapBuffer[shift]=val;elseLowMapBuffer[shift]=0.0;
下面讲解另外一个难懂点,就是如何结合HighMapBuffer 和LowMapBuffer 筛选出来最终的zigzag
大概思路是这样:
HighMapBuffer 和LowMapBuffer同时从0位置开始遍历,这个0位置的肯定是对应最左边,时间最早的K线,然后先找出一个zigzag高点或者低点,记录在ZigZagBuffer里面,如果第一个找出来的是zigzag高点,下一个寻找的就必定是zigzag低点,反之亦然。高就肯定找HighMapBuffer ,低就肯定是LowMapBuffer。
这里就会遇到一个问题,上图说明更清楚
上图前面的第一个highmap高点,首先会记录zigzag高点,然后按照流程,下一步就要找zigzag低点,但是在下一个lowmap点找到之前,是要先更新zigzag前高点的值,只要找到更高的,就会自动更新,最后如图,zigzag高点就被挪到后面位置去了,直到找到lowmap低点,再把它记录到zigzag低点,然后就推出循环了。
到这里,整个算法思路就基本讲完了
MT5 MT4 zigzag指标的算法详解相关推荐
- 推荐系统简介+算法详解+项目介绍
目录标题 推荐系统简介 1.推荐系统目的 2.推荐系统的应用 3.推荐系统的基本思想 4.推荐系统的数据分析 5.推荐系统的分类 6.推荐算法简介 6.1 基于人口统计学的推荐算法(基于用户数据) 6 ...
- YOLOv5算法详解
目录 1.需求解读 2.YOLOv5算法简介 3.YOLOv5算法详解 3.1 YOLOv5网络架构 3.2 YOLOv5实现细节详解 3.2.1 YOLOv5基础组件 3.2.2 输入端细节详解 3 ...
- 新颖性搜索(Novelty Search,NS)算法详解与实现
新颖性搜索(Novelty Search,NS)算法详解与实现 基于目标的进化算法的缺点 新颖性搜索与自然进化 新颖性指标 算法描述 新颖性搜索算法实践 基于目标的进化算法的缺点 大多数机器学习方法( ...
- 3. KNN最近邻算法详解与关键技术剖析(理论篇)
一.KNN算法概述 K最近邻(K-Nearest-Neighbour,KNN)算法可以说是最简单的分类算法,易于理解,其核心思想就是距离的比较,即离谁最近,就被归类于谁(群体投票的方式). 通俗解释: ...
- 排序算法,最全的10大排序算法详解(Sort Algorithm)
文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...
- 【机器学习】集成学习及算法详解
集成学习及算法详解 前言 一.随机森林算法原理 二.随机森林的优势与特征重要性指标 1.随机森林的优势 2.特征重要性指标 三.提升算法概述 四.堆叠模型简述 五.硬投票和软投票 1.概念介绍 2.硬 ...
- id3算法c语言实现,从ID3到C5.0的故事:算法详解及实践应用
原标题:从ID3到C5.0的故事:算法详解及实践应用 在前面,我们分别概述性地介绍了决策树的基本知识: 1.算法概述 ID3(Iterative Dichotomiser3)算法可以说决策树算法中最著 ...
- KNN算法详解及实现
KNN算法详解及实现 k近邻法(k-nearest neighbor,k-NN)是一种基本的分类和回归方法,是监督学习方法里的一种常用方法.k近邻算法假设给定一个训练数据集,其中的实例类别已定.分类时 ...
- 【20210922】【机器/深度学习】KNN (K近邻) 算法详解
一.算法概念 KNN, K-near neighbor,即最近邻算法.它是一种分类算法,算法思想是:一个样本与数据集中的 k 个样本最相似,如果这 k 个样本中的大多数属于某一个类别,则该样本也属于这 ...
- JVM底层原理+四大垃圾回收算法详解-周阳老师
转载自,感谢原作者:https://www.jianshu.com/p/9e6841a895b4 注意:垃圾回收算法周阳老师讲的有错误,具体在p19,四大垃圾回收算法为复制算法.标记-整理算法.标记- ...
最新文章
- 用MATLAB画桌子,怎样用matlab编写桌子的动态变化图
- Java 动态绑定 静态绑定
- html div背景半透,css半透明背景实现方法
- docker中部署springboot项目,并且外部访问
- LabVIEW(七):多态VI
- MySQL索引类型总结和使用技巧以及注意事项
- 深入理解 MVC 中的 M 与 C
- 悲痛!临近年关,一位 IT 创业者自杀,曾卖房给员工发工资
- 【追一科技】AAAI、ACL、EMNLP等顶会论文成果分享
- 数字图像处理-绪论 (上)
- 如何做一个简单的学生喜欢家长买单的scratch小游戏
- 网络传输数据基本流程 详解
- 我找到了村里最挣钱的生意!
- Imagination出席AIIA交流活动 PowerVR NNA IP入选首批《AI芯片技术选型目录》
- win7电脑蓝屏代码0x00000034
- 震惊世界的25张照片
- [译]Flutter缓存管理库flutter_cache_manager
- 华硕计算机用户名默认,华硕路由器设置方法_华硕(ASUS)路由器怎么设置?-192路由网...
- linux more命令用法,linux more命令详解
- 统计自然语言处理梳理四:篇章分析