炒股软件zigzag指标如何添加?ZigZag

ZigZag指标,即之字转向指标,不是一个主流指标,叠加在超级图表上,勾画出交易商品趋势的大致轮廓。ZigZag连续的折线,可以辅助我们判断出交易商品的多空趋势,当然再加上自己画的......

炒股软件zigzag指标如何添加

接下来具体说说ZigZag

ZigZag指标的使用方法

ZIGZAG指标显示历史趋势走势,但仅能反映稍大的行情变化,对分析者寻求明显的趋势反转时机大有裨益。ZIGZAG指标能根据最新的实时价格相应得调整自身取值,从而客观的反映价格走势。

Zigzag指标是连接一系列价格点的趋势线。所以Zigzag主要用途是来标识过去价格中的相对高低点,并以这些点之间的连线来表示这段价格变动的趋势。有参数调整高低点的定义,因为只画到已出现的k线,所以最后那一段应该怎么转是会随新k线改变的。

ZIG指标(之字转向),是通常不为人注意的非主流指标。叠加在主图上。该指标主要指示了波峰和波谷的转折点,同时,勾画出证券趋势的大致轮廓。ZIG连续的折线可以判断出交易品种多空博弈的性格和未来双向空间。同时可以形成交易价格旋转性的直觉。与江恩理论合起来用时,可以精确判断阻力支撑位置。阻力位通常位于ZIG指标的延长线上。IG指标的波动转折率可以自设,从0.1%到10%任选。

Zigzag使用指标时,需要有下面几点要注意:

1、这个指标会根据最新的价格改变最后的连线,就是有些人说到的包含有未来函数问题。所以,最后的连线不能作为最终的高点和低点,使用的时候要注意。

2、既然是指标,那么它是严格计算的结果,可是在实际应用中,往往过于古板,不能适应行情的变化。不过大部分时候是正确的,你会发现,行情的波浪一览无余。

3、根据ZIGZAG画出最近高点和低点的水平线,和趋势线,会对行情的判断具有极大的帮助。在画趋势线的时候,可以根据Zigzag,再根据自己的判断画,可能更好。

zigzag指标参数怎么设置

Zigzag指标在识别高低点的过程中,主要设置了以下三个参数:ExtDepth,DextDeviation以及ExtBackstep。程序中的表示:

externintExtDepth=12;externintExtDeviation=5;externintExtBackstep=3;ExtDepth:用于设置高低点是相对与过去多少个Bars(价格图形中的一个柱子)而言。Mt4中默认是12。

期货软件TB系统源代码解读系列22-ZigZag

ZigZag指标,即之字转向指标,不是一个主流指标,叠加在超级图表上,勾画出交易商品趋势的大致轮廓。ZigZag连续的折线,可以辅助我们判断出交易商品的多空趋势,当然再加上自己画的阻力支撑位,可能更完美一些。这个指标的算法怎么说呢,很麻烦,我查了一下,看得我也头疼。简略来说吧,分三步:

1、求波峰;

2、求波谷;

3、对波峰波谷的处理判断,从而进行判断画线。

大概就这三步,具体算法,感兴趣的自己百度去看了,这一大段的,我复制过来,解释也挺费劲的。我直接一步步解读代码好了。

先看靠前个如何求转折函数Pivot,代码如下:

Params

NumericSeries Price(1);//声明数值序列参数Price,初值为1.//

Numeric Length(10); //声明数值参数Length,初值为10,即周期。//

Numeric LeftStrength(1); // 声明数值参数LeftStrength,初值为1.//

Numeric RightStrength(1); //声明数值参数RightStrength,初值为1.//

Numeric Instance(1); //声明数值参数Instance,初值为1.//

Numeric HiLo(1); //声明数值参数HiLo,初值为1.//

NumericRef PivotPrice; //声明数值引用参数PivotPrice,这个新出现的NumericRef,引用参数的意思,具体吗,就是这个引用参数返回值根据你代码表达是可以多个数值的,待会看例子吧。//

NumericRef PivotBar; //声明数值引用参数PivotBar。//

Vars

Numeric CandidatePrice( 0 );//声明数值变量CandidatePrice,初值为0.//

Numeric LengthCntr( 0 ); //声明数值变量LengthCntr,初值为0.//

Numeric StrengthCntr( 0 ); //声明数值变量StrengthCntr,初值为0.//

Numeric InstanceCntr( 0 ); //声明数值变量InstanceCntr,初值为0.//

Bool PivotTest( False); //声明布尔型变量PivotTest,初值为假。//

Bool InstanceTest( False ) ;//声明布尔型变量InstanceTest,初值为假。//

Begin

InstanceCntr = 0 ; //变量InstanceCntr,赋值为0.//

InstanceTest = False ; //布尔型变量InstanceTest,初始判断为假。//

LengthCntr = RightStrength ; //变量LengthCntr 等于变量RightStrength了。//

While (LengthCntr < Length && (!InstanceTest ))//循环语句,当变量LengthCntr(初值0)小于参数Length(初值10)时,并且InstanceTest为真。!InstanceTest这个连着感叹号意思是非假,即为真了。//

{

CandidatePrice = Price[LengthCntr] ;//价格Price随变量LengthCntr值索引回到相应k线数位,把相应price值赋值给变量CandidatePrice。//

PivotTest = True ; //布尔型PivotTest,判断为真了。//

StrengthCntr = LengthCntr + 1 ; //变量StrengthCntr值 = 变量LengthCntr值 + 1.//

While (PivotTest && StrengthCntr - LengthCntr <= LeftStrength )//嵌套循环,当布尔型变量PivotTest为真,并且(把相应具体初始值代进公式吧)1-0 <= 1,这判断是真的,继续执行下列代码。//

{

If (( HiLo == 1 And CandidatePrice < Price[StrengthCntr] ) or ( HiLo == -1 And CandidatePrice > Price[StrengthCntr] )) //假如里边有两括号,分开来看,靠前个,参数HiLo等于1,并且变量CandidatePrice值(初值为0)小于Price[1],这里的StrengthCntr,根据上面公式算得值为1了。第二个括号,参数HiLo等于-1,并且变量CandidatePrice值大于Price[1]的。这两括号用逻辑判断or来连接,意思是这两括号只要有一个是正确的,就可以继续执行下列代码。//

PivotTest = False; //执行的是布尔型变量PivotTest为假了。//

Else // 就是两括号都是假的时候,执行下列语句。//

StrengthCntr = StrengthCntr + 1 ; //变量StrengthCntr自加1了。//

}

StrengthCntr = LengthCntr - 1 ;//变量StrengthCntr值 = 参数LengthCntr - 1了。//

While (PivotTest && (LengthCntr - StrengthCntr) <= RightStrength ) //也是嵌套循环的,当布尔型变量PivotTest为真,(把初值都代进公式了)并且(0-1)<= 1.可以看出这是真的。//

{

If (( HiLo == 1 And CandidatePrice <= Price[StrengthCntr] ) or ( HiLo == -1 And CandidatePrice >= Price[StrengthCntr] )) //解读同上面的一样了。//

PivotTest = False; // 布尔型PivotTest变为假了。//

Else//还是意思假如条件都不满足两括号的条件。//

StrengthCntr = StrengthCntr - 1 ;//执行变量StrengthCntr自减1.//

}

If (PivotTest) //假如布尔型PivotTest为真的。//

InstanceCntr = InstanceCntr + 1 ; //变量InstanceCntr自加1了。//

If (InstanceCntr == Instance) //假如变量InstanceCntr等于参数Instance(初值为1.)//

InstanceTest = True; // 布尔型变量InstanceTest为真了。//

Else //变量InstanceCntr不等于参数Instance的情况。//

LengthCntr = LengthCntr + 1 ; //变量LengthCntr自加1了。//

}

If (InstanceTest ) //假如布尔型InstanceTest为真。//

{

PivotPrice = CandidatePrice ; //引用参数PivotPrice = 变量CandidatePrice值。这个CandidatePrice值是根据这个代码CandidatePrice = Price[LengthCntr]求得的了。//

PivotBar = LengthCntr ;//引用参数PivotBar = 变量LengthCntr值了。//

Return True;//把这两值返回给主函数了。//

}Else//布尔型InstanceTest假的情况。//

{

PivotPrice = -1 ;//引用参数PivotPrice = -1.//

PivotBar = -1 ; //引用参数PivotBar = -1.//

Return False; //返回的两值是假的。//

}

End

看着这么一堆代码下来,有的人可能觉得头晕了,但这一步步把初值代入公式,计算得了一个,你就发现,其实也就那样,第二个循环也是继续代值进去求就得了。

我们再看这求波峰函数SwingHigh,代码如下:

Params

Numeric Instance(1);

NumericSeries Price(1);

Numeric Strength(1);

Numeric Length(10);

Vars

Numeric PivotPrice;

Numeric PivotBar;

Begin

Pivot(Price,Length,Strength,Strength,Instance,1,PivotPrice,PivotBar);//看到了吧,我们在求转折的时候,定义了8个参数,这边调用Pivot时,也得用相应8个数值返回去求值,再反馈回来PivotPrice值与PivotBar值。//

Return PivotPrice;//这边只把PivotPrice值返回给主函数就行。//

End

接下来就是求波谷函数SwingLow了,代码跟波峰差不多,如下:

Params

Numeric Instance(1);

NumericSeries Price(1);

Numeric Strength(1);

Numeric Length(10);

Vars

Numeric PivotPrice;

Numeric PivotBar;

Begin

Pivot(Price,Length,Strength,Strength,Instance,-1,PivotPrice,PivotBar);//数数也是8个参数吧,这里改的是-1,至于这1跟-1返回对应的函数就是替代HoLi了。//

Return PivotPrice;//这边只把PivotPrice值返回给主函数就行。//

End

真正求ZigZag指标的代码,如下了:

Params

Numeric RetracePct(2);//声明参数RetracePct,初值为2.//

Vars

NumericSeries SwingPrice;//声明序列变量SwingPrice。//

Numeric SwingHighPrice;//声明变量SwingHighPrice。//

Numeric SwingLowPrice; //声明变量SwingLowPrice。//

NumericSeries PreBar(0); //声明序列变量PreBar,初值为0.//

NumericSeries UpDn(0);//声明序列变量UpDn,初值为0.//

Bool SaveSwing(False);//声明布尔型变量SaveSwing,初值为假。//

Bool NewTL(False); //声明布尔型变量NewTL,初值为假。//

Bool UpdateTL(False);//声明布尔型变量UpdateTL,初值为假。//

begin

If(CurrentBar == 0)//假如为靠前根k线的。//

SwingPrice = Close;//变量SwingPrice = 收盘价。//

SwingHighPrice = SwingHigh( 1, Close, 1,2); //变量SwingHighPrice值就是把这四个参数值返回函数SwingHigh求波峰了。//

SwingLowPrice = SwingLow( 1, Close, 1, 2 );//同理的,SwingLowPrice值即为求波谷了。//

If (SwingHighPrice <> -1) //假如波峰值不等于-1.下列代码是处理波峰情况的。//

{

If(UpDn <=0 && SwingHighPrice >= SwingPrice * (1+RetracePct*0.01)) //假如变量UpDn小于等于0,并且波峰SwingHighPrice <= 变量SwingPrice * 固定系数(1+2*0.01)。//

{

UpDn = 1; //变量UpDn = 1.//

NewTL = True; //布尔型变量NewTL为真。//

SaveSwing = True;//布尔型SaveSwing为真。//

}

Else If(UpDn == 1 && SwingHighPrice >= SwingPrice) //假如变量UpDn等于1,并且波峰SwingHighPrice >= 变量SwingPrice值。//

{

UpdateTL = True;//布尔型变量UpdateTL为真。//

SaveSwing = True; //布尔型变量SaveSwing为真。//

}

If(SaveSwing)//假如布尔型SaveSwing为真。//

{

SwingPrice = SwingHighPrice;//变量SwingPrice = 波峰SwingHighPrice。//

PreBar = CurrentBar;//序列变量PreBar = 当前k线数位值。//

}

}

Else If(SwingLowPrice <> -1)//假如波谷SwingLowPrice不等于-1.下列代码是处理波谷情况的,跟波峰反过来。//

{

If(UpDn >=0 && SwingLowPrice <= SwingPrice * (1-RetracePct*0.01)) // 假如变量UpDn>= 0,并且波谷SwingLowPrice <= 变量SwingPrice * 系数(1-2*0.01).//

{

UpDn = -1; //变量UpDn = -1.//

NewTL = True; //布尔型NewTL为真。//

SaveSwing = True; //布尔型SaveSwing为真。//

}

Else If(UpDn == -1 && SwingLowPrice <= SwingPrice)//假如变量UpDn等于-1,并且波谷SwingLowPrice <=变量SwingPrice值。//

{

UpdateTL = True;//布尔型UpdateTL 为真。//

SaveSwing = True;//布尔型SaveSwing为真。//

}

If(SaveSwing )//假如SaveSwing为真。//

{

SwingPrice = SwingLowPrice; //变量SwingPrice = 波谷SwingLowPrice值。//

PreBar = CurrentBar; // 序列变量PreBar = 当前K线索引值。//

}

}

If( NewTL)//假如布尔型NewTL为真。//

{

PlotNumeric("ZigZag",SwingPrice,0,-1,1); //画线ZigZag线,值为SwingPrice值了。至于后边的0,-1,1,分别对应着输出值的定位点,颜色,返回k线索引值。//

}

Else If(UpdateTL) //假如布尔型UpdateTL为真。//

{

If (UpDn == UpDn[1]) //假如当前变量UpDn等于前一个变量UpDn。//

{

Unplot("ZigZag",PreBar - PreBar[1]+1); //函数Unplot意思删除曾经输出的值,这里就是删除ZigZag值,其值为当前PreBar减去前一个PreBar值,再加上1.//

PlotNumeric("ZigZag",SwingPrice,0,-1,1);//重新画线ZigZag线。//

}

Else//除了上边当前变量UpDn等于前一个变量UpDn情况之外的,直接用下列代码处理。//

{

PlotNumeric("ZigZag",SwingPrice,0,-1,1);//直接画线ZigZag,值为变量SwingPrice值了。//

}

}

End

以上就是炒股软件zigzag指标如何添加?ZigZag的详细内容,希望通过阅读小编的文章之后能够有所收获!

版权:本文由用户自行上传,观点仅代表作者本人,本站仅供存储服务。如有侵权,请联系管理员删除,了解详情>>

发布
问题