已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Zigzag指标算法和实现在理解Zigzag指标的算法之前,我们可以思考这么一个问题:给我们下面的这副图,我们怎么能够把这些1、2、3等数字代表的高低点给选择出来?Zigzag指标算法如官方所述:Zigzag指标是连接一系列价格点的趋势线。所以Zigzag主要用途是来标识过去价格中的相对高低点,并以这些点之间的连线来表示这段价格变动的趋势。文章来自:股票自动机-AI Invest:专注于自动交易系统研究和开发的博客更多的股票、系统开发知识在AI Invest()1.Zigzag的3个参数Zigzag在识别高低点的过程中,主要设置了以下三个参数:ExtDepth, DextDeviation 以及ExtBackstep。程序中的表示:extern int ExtDepth=12;extern int ExtDeviation=5;extern int ExtBackstep=3;说明:+ExtDepth:用于设置高低点是相对与过去多少个Bars(价格图形中的一个柱子)而言。Mt4中默认是12。+ExtDeviation:用于设置重新计算高低点时,与前一高低点的相对点差。默认值是5, 也就是说如果A)当前高点上个高点+ 5 ,或者B)当前低点12)。Bar-14Bar-4Bar-1Bar-Current高(3.1)低(1.5)高(2.1) X对于Bar-Current,即当前的价格X,CaseI.如果 X =2.1 + ExtDeviation,则根据Zigzag的定义,这将是一个新的高点。假设这里X=2.3,那么我们绘制指标的时候应该成为:Bar-14Bar-4Bar-Current高(3.1) 低(1.5)高(2.3)CaseII.如果 1.5- ExtDeviation X= X,则这是一个新的低点。假设这里X=1.3,则我们绘制指标的时候应该成为:Bar-14Bar-Current高(3.1) 低(1.3)这个时候,之前的Bar-4因为在我们定义的ExtBackstep之内(1-4),所以他的最低值会被清空,根据算法第三步的定义,我们会一直寻找低点直到发现Bar-Current,这时候已经遍历过Bar-1,所以Bar-1定义的高点也不再成为拐点。这也就是所谓的重绘部分,也因此诟病为“未来函数”因为所看见的当前最后的高低点可能在下个时间段里面被抹去。3 Zigzag源码及解释:Mt4的Zigzag源码里面的注释特别稀罕,估计是感觉实现比较简单,所以一概略去恩,极坏的编程习惯。下面简要说明一下,中文部分都是追加的解释:/+/| Zigzag.mq4 |/| Copyright ?2005-2007, MetaQuotes Software Corp. |/| / |/+#property copyright “Copyright ?2007, MetaQuotes Software Corp.”#property link “/”/Mt4特有的指标属性设置#property indicator_chart_window /主窗口进行指标显示#property indicator_buffers 1/指标运用到数值的个数#property indicator_color1 Red /指标显示颜色/- indicator parameters/Zigzag的三个参数extern int ExtDepth=12;extern int ExtDeviation=5;extern int ExtBackstep=3;/- indicator buffers/指标的数值存储变量double ZigzagBuffer; /拐点double HighMapBuffer; /高点的临时变量数组double LowMapBuffer; /低点的临时变量数组int level=3; / recountings depth /最近已知的三个拐点bool downloadhistory=false; /是否第一次计算/+/| Custom indicator initialization function |/+/Init函数是Mt4指标第一次载入之后运行的初期化函数int init() IndicatorBuffers(3); /对于缓冲储存器分配记忆应用自定义指标计算,用F1可以看到该函数的帮助和解释/- drawing settings SetIndexStyle(0,DRAW_SECTION); /划线的风格/- indicator buffers mapping SetIndexBuffer(0,ZigzagBuffer); SetIndexBuffer(1,HighMapBuffer); SetIndexBuffer(2,LowMapBuffer); SetIndexEmptyValue(0,0.0);/- indicator short name IndicatorShortName(”ZigZag(”+ExtDepth+”,”+ExtDeviation+”,”+ExtBackstep+”)”); /设置指标的简称。/- initialization done return(0); /+/| |/+/start函数是Mt4的主函数,当每次价格变动之后都会触发该函数的执行int start() /变量定义 /i:临时变量; /counted_bars :用于标识已经计算过的Bar数 int i, counted_bars = IndicatorCounted(); /limit:算法中所谓的开始计算位置; /counterZ:临时变量 /whatlookfor:用于标识当前计算的是高点或者低点 int limit,counterZ,whatlookfor; /以下都是临时变量,具体设值时解释int shift,back,lasthighpos,lastlowpos; double val,res; double curlow,curhigh,lasthigh,lastlow; if (counted_bars=0 & downloadhistory) / history was downloaded /指标载入时counted_bars为0,而downloadhistory为false,将在下一次价格变化时进行 ArrayInitialize(ZigzagBuffer,0.0); ArrayInitialize(HighMapBuffer,0.0); ArrayInitialize(LowMapBuffer,0.0); if (counted_bars=0) /初期化,第一次运行时limit为除去ExtDepth个图形最初的部分。(算法1.1) limit=Bars-ExtDepth; downloadhistory=true; if (counted_bars0) /如果之前已经计算过,找到最近已知的三个拐点(高点或低点),将计算位置设置为倒数第三个拐点。(算法1.2) while (counterZlevel & i=0;i) /清空第三个拐点后的数值,准备重新计算最后的拐点 ZigzagBufferi=0.0; LowMapBufferi=0.0; HighMapBufferi=0.0; /算法Step2部分:计算高低点 for(shift=limit; shift=0; shift) /2.1计算ExtDepth区间内的低点 val=LowiLowest(NULL,0,MODE_LOW,ExtDepth,shift); if(val=lastlow) val=0.0; else /如果该低点是当前低点, lastlow=val; if(Lowshift-val)(ExtDeviation*Point) val=0.0;/是否比上个低点还低ExtDeviation,不是的话则不进行回归处理 else /找到一个新的低点 for(back=1; backval) LowMapBuffershift+back=0.0; /将新的低点进行记录 if (Lowshift=val) LowMapBuffershift=val; else LowMapBuffershift=0.0; / high val=HighiHighest(NULL,0,MODE_HIGH,ExtDepth,shift); if(val=lasthigh) val=0.0; else lasthigh=val; if(val-Highshift)(ExtDeviation*Point) val=0.0; else for(back=1; back=ExtBackstep; back+) res=HighMapBuffershift+back; if(res!=0)&(res=0;shift) res=0.0; switch(whatlookfor) /初期化的情况下,尝试找第一个高点或者是地点 case 0: / look for peak or lawn if (lastlow=0 & lasthigh=0) /lastlow,lasthigh之前已经初始化,再次判断以保证正确性? if (HighMapBuffershift!=0) /发现高点 lasthigh=Highshift; lasthighpos=shift; whatlookfor=-1;/下个寻找目标是低点 ZigzagBuffershift=lasthigh; res=1; if (LowMapBuffershift!=0) /发现低点 lastlow=Lowshift; lastlowpos=shift; whatlookfor=1; /下个寻找目标是高点 ZigzagBuffershift=lastlow; res=1; break; case 1: / look for peak /寻找高点 if (LowMapBuffershift!=0.0 & LowMapBuffershiftlasthigh & LowMapBuffershift=0.0) ZigzagBufferlasthighpos=0.0; lasthighpos=shift; lasthigh=HighMapBuffershift; ZigzagBuffershift=lasthigh; if (LowMapBuffershift!=0.0 & HighMapBuffershift=0.0) lastlow=LowMapBuf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025四川绵阳燃气集团有限公司招聘兴绵燃气有限责任公司合规管理岗等岗位拟录用人员笔试历年参考题库附带答案详解
- 监狱执法面试题库及答案
- 2026年四川化工职业技术学院单招职业适应性考试必刷测试卷带答案解析
- 2026年安徽体育运动职业技术学院单招职业倾向性测试必刷测试卷及答案解析(夺冠系列)
- 2026年杭州职业技术学院单招综合素质考试必刷测试卷及答案解析(夺冠系列)
- 2026年包头钢铁职业技术学院单招职业适应性考试必刷测试卷及答案解析(夺冠系列)
- 2026年北京科技大学天津学院单招职业技能考试必刷测试卷及答案解析(夺冠系列)
- 2026年浙江省台州市单招职业适应性考试题库附答案解析
- 2026年山西卫生健康职业学院单招职业适应性测试题库及答案解析(名师系列)
- 2026年四川电力职业技术学院单招职业适应性考试必刷测试卷附答案解析
- 餐饮客诉培训课件
- 铜陵市出租车从业考试及答案解析
- 2025新版太原市劳动合同范本
- 工程渣土资源化利用技术标准
- 监理廉洁从业课件
- HJ 25.4-2014:污染场地土壤修复技术导则
- 羽毛球规则课件
- 2025年党章党史党纪知识竞赛试题库及答案
- 牙周牙龈增生病例汇报
- 2019新人教版高中英语新教材选择性必修三课文及翻译
- 就业帮扶车间培训课件
评论
0/150
提交评论