Zigzag指标算法文档格式.docx

上传人:b****6 文档编号:16227284 上传时间:2022-11-21 格式:DOCX 页数:13 大小:18.93KB
下载 相关 举报
Zigzag指标算法文档格式.docx_第1页
第1页 / 共13页
Zigzag指标算法文档格式.docx_第2页
第2页 / 共13页
Zigzag指标算法文档格式.docx_第3页
第3页 / 共13页
Zigzag指标算法文档格式.docx_第4页
第4页 / 共13页
Zigzag指标算法文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Zigzag指标算法文档格式.docx

《Zigzag指标算法文档格式.docx》由会员分享,可在线阅读,更多相关《Zigzag指标算法文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

Zigzag指标算法文档格式.docx

1对计算位置进行初期化

1.1判断是否是第一次进行高低点计算,如果是,则设定计算位置为除去ExtDepth个图形最初的部分。

1.2如果之前已经计算过,找到最近已知的三个拐点(高点或低点),将计算位置设置为倒数第三个拐点之后,重新计算最后的拐点。

2.从步骤1已经设置好的计算位置开始,将对用于存储高低点的变量进行初始化,准备计算高低点

2.1计算ExtDepth区间内的低点,如果该低点是当前低点,则进行2.1.1的计算,并将其记录成一个低点。

2.1.1如果当前低点比上一个低点值小于相对点差(ExtDeviation);

并且之前ExtBackstep个Bars的记录的中,高于当前低点的值清空。

2.2高点的计算如同2.1以及分支处理2.1.1。

3.从步骤1已经设置好的计算位置开始,定义指标高点和低点

3.1如果开始位置为高点,则接下来寻找低点,在找到低点之后,将下一个寻找目标定义为高点

3.2如果开始位置为低点,则与3.1反之。

以上可能比较难以理解,我们这边举个例子说明:

假设上次计算的结果如下:

倒数第14个Bar出现了一个高点(3.1),倒数第4个是低点(1.5),

倒数第1个是新的高点(2.1)——因为距离倒数第14已经大于ExtDepth(14-1>

12)。

Bar-14   Bar-4  Bar-1 

  Bar-Current

高(3.1)  低(1.5)  高(2.1) 

  X

对于Bar-Current,即当前的价格X,

CaseI.

如果X>

=2.1

ExtDeviation,则根据Zigzag的定义,这将是一个新的高点。

假设这里X=2.3,那么我们绘制指标的时候应该成为:

Bar-14 

   Bar-4  Bar-Current

高(3.1) 

  低(1.5)  高(2.3) 

CaseII.

如果1.5 

-ExtDeviation<

X<

2.1ExtDeviation,则我们继续等待价格的变化,所绘制的指标也不会变化。

CaseIII.

-ExtDeviation>

=

X,则这是一个新的低点。

假设这里X=1.3,则我们绘制指标的时候应该成为:

Bar-14   Bar-Current

  低(1.3)

这个时候,之前的Bar-4因为在我们定义的ExtBackstep之内(1-4),所以他的最低值会被清空,

根据算法第三步的定义,我们会一直寻找低点直到发现Bar-Current,这时候已经遍历过Bar-1,所以Bar-1定义的高点也不再成为拐点。

这也就是所谓的重绘部分,也因此诟病为“未来函数”——因为所看见的当前最后的高低点可能在下个时间段里面被抹去。

3Zigzag源码及解释:

Mt4的Zigzag源码里面的注释特别稀罕,估计是感觉实现比较简单,所以一概略去——恩,极坏的编程习惯。

下面简要说明一下,中文部分都是追加的解释:

//——————————————————————

//| 

Zigzag.mq4|

Copyright?

2005-2007,MetaQuotesSoftwareCorp.|

|

#propertycopyright“Copyright?

2007,MetaQuotesSoftware

Corp.”

#property

link 

//Mt4特有的指标属性设置

indicator_chart_window 

//主窗口进行指标显示

#propertyindicator_buffers

//指标运用到数值的个数

#propertyindicator_color1

Red 

//指标显示颜色

//—-indicatorparameters

//Zigzag的三个参数

//—-indicatorbuffers

//指标的数值存储变量

double

ZigzagBuffer[];

//拐点

HighMapBuffer[];

//高点的临时变量数组

LowMapBuffer[];

//低点的临时变量数组

intlevel=3;

//recounting’sdepth 

//最近已知的三个拐点

booldownloadhistory=false;

//是否第一次计算

//|Customindicatorinitialization

function 

|

//Init函数是Mt4指标第一次载入之后运行的初期化函数

intinit()

{

IndicatorBuffers(3);

//对于缓冲储存器分配记忆应用自定义指标计算,用F1可以看到该函数的帮助和解释

//—-drawingsettings

SetIndexStyle(0,DRAW_SECTION);

//划线的风格

//—-indicatorbuffersmapping

SetIndexBuffer(0,ZigzagBuffer);

SetIndexBuffer(1,HighMapBuffer);

SetIndexBuffer(2,LowMapBuffer);

SetIndexEmptyValue(0,0.0);

//—-indicatorshortname

IndicatorShortName(”ZigZag(”

ExtDepth”,”ExtDeviation”,”ExtBackstep

”)”);

//设置指标的简称。

//—-initializationdone

return(0);

}

//start函数是Mt4的主函数,当每次价格变动之后都会触发该函数的执行

intstart()

//变量定义

//i:

临时变量;

//counted_bars:

用于标识已经计算过的Bar数

inti,counted_bars=

IndicatorCounted();

 

//limit:

算法中所谓的开始计算位置;

//counterZ:

临时变量

//whatlookfor:

用于标识当前计算的是高点或者低点

int

limit,counterZ,whatlookfor;

//以下都是临时变量,具体设值时解释

int

shift,back,lasthighpos,lastlowpos;

doubleval,res;

double

curlow,curhigh,lasthigh,lastlow;

if(counted_bars==0

&

downloadhistory)//historywas

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_bars>

0)

{//如果之前已经计算过,找到最近已知的三个拐点(高点或低点),将计算位置设置为倒数第三个拐点。

(算法1.2)

while(counterZ<

level

i<

100)

{

res=ZigzagBuffer[i];

if(res!

=0)counterZ;

i;

i–;

//在上面while中最后一次找到的时候进行

1,所以要-1才能得到真正第三个拐点处。

limit=i;

//计算位置赋值

if(LowMapBuffer[i]!

=0)

{//如果倒数第三个拐点是低点

curlow=LowMapBuffer[i];

//目标在于寻找高点

whatlookfor=1;

else

curhigh=HighMapBuffer[i];

whatlookfor=-1;

for(i=limit-1;

i>

=0;

i–) 

{//清空第三个拐点后的数值,准备重新计算最后的拐点

ZigzagBuffer[i]=0.0;

LowMapBuffer[i]=0.0;

HighMapBuffer[i]=0.0;

//算法Step2部分:

计算高低点

for(shift=limit;

shift>

shift–)

//2.1计算ExtDepth区间内的低点

val=Low[iLowest(NULL,0,MODE_LOW,ExtDepth,shift)];

if(val==lastlow)val=0.0;

{//如果该低点是当前低点,

lastlow=val;

if((Low[shift]-val)>

(ExtDeviation*Point))

val=0.0;

//是否比上个低点还低ExtDeviation,不是的话则不进行回归处理

{//找到一个新的低点

for(back=1;

back<

=ExtBackstep;

back)

{//回退ExtBackstep个Bar,把比当前低点高的纪录值给清空

res=LowMapBuffer[shiftback];

if((res!

=0)&

(res>

val))

LowMapBuffer[shiftback]=0.0;

//将新的低点进行记录

if(Low[shift]==val)LowMapBuffer[shift]=val;

else

LowMapBuffer[shift]=0.0;

//—high

val=High[iHighest(NULL,0,MODE_HIGH,ExtDepth,shift)];

if(val==lasthigh)val=0.0;

lasthigh=val;

if((val-High[shift])>

res=HighMapBuffer[shiftback];

(res<

HighMapBuffer[shiftback]=0.0;

if(High[shift]==val)HighMapBuffer[shift]=val;

HighMapBuffer[shift]=0.0;

//finalcutting

if(whatlookfor==0)

lastlow=0;

lasthigh=0;

lastlow=curlow;

lasthigh=curhigh;

//算法step3.定义指标的高低点

for

(shift=limit;

shift–)

res=0.0;

switch(whatlookfor)

//初期化的情况下,尝试找第一个高点或者是地点

case0:

//lookforpeakorlawn

if(lastlow==0&

lasthigh==0)

{//lastlow,lasthigh之前已经初始化,再次判断以保证正确性?

if(HighMapBuffer[shift]!

{//发现高点

lasthigh=High[shift];

lasthighpos=shift;

//下个寻找目标是低点

ZigzagBuffer[shift]=lasthigh;

res=1;

if(LowMapBuffer[shift]!

{//发现低点

lastlow=Low[shift];

lastlowpos=shift;

//下个寻找目标是高点

ZigzagBuffer[shift]=lastlow;

break;

case1:

//lookfor

peak 

//寻找高点

=0.0&

LowMapBuffer[shift]<

lastlow

HighMapBuffer[shift]==0.0)

{//如果在上个低点和下个高点间发现新的低点,则把上个低点抹去,将新发现的低点作为最后一个低点

ZigzagBuffer[lastlowpos]=0.0;

lastlow=LowMapBuffer[shift];

LowMapBuffer[shift]==0.0)

{//发现目标高点

lasthigh=HighMapBuffer[shift];

//下一个目标将是寻找低点

case-1:

lawn 

//寻找低点

HighMapBuffer[shift]>

lasthigh

LowMapBuffer[shift]==0.0)

ZigzagBuffer[lasthighpos]=0.0;

HighMapBuffer[shift]==0.0)

default:

return;

4.总结

以上就是对Zigzag算法和实现的分析。

希望能够对大家编写指标和EA有所帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1