指标: ZigZag

 

ZigZag:

Zigzag指标是在价格点连接重要波峰和波谷的一系列线段。

ZigZag指标 

作者: MetaQuotes Software Corp.

 

如何在 EA 代码中获取 "之 "字形条形顶部和底部的收盘价

 

之字形指标对于确定价格趋势、支撑和阻力区域以及头肩、双底和双顶等经典图表形态非常有用。之字形 "指标在计算中同时使用摆动高点和摆动低点:

  • 摆动高点:当一个价格(通常是收盘价)同时高于它之前和之后的价格时。
  • 波动低点:当价格既低于前一个价格,又低于后一个价格时。

之字形指标在构建时可以使用百分比或点。要构建 "之 "字形指标,摆动高点和摆动低点之间必须有一定的百分比或点数,才能画出一条线。下图是 E-mini Nasdaq 100 期货合约的图表,直观地说明了 3%的价格回撤之字形和 5%的价格回撤之字形之间的区别:


请注意,在上图中,回撤百分比为 3%的 "之 "字形线比回撤百分比为 5%的 "之 "字形线更明显。使用回撤百分比较大的之字形指标的目的是帮助消除对交易者的分析没有意义的价格噪音。

之字形指标在揭示股票周期方面极为有效,同时还能剔除短期价格噪音。

之字形指标在过滤短期噪音、识别市场价格的重要趋势和重大变化方面极为有效。

下图是 E-mini S&P 500 期货合约的图表,说明了 Zig-Zag 指标在寻找支撑和阻力区域以及价格突破方面的有效性:


上图中的 E-mini 使用的是 5%的 Zig-Zag 回撤值;因此,只显示 5%或更大的价格变化,这有助于长期交易者或投资者确定重要的支撑、阻力和价格突破区域。

在图表左侧,标准普尔 500 指数正在形成三角形整理形态。当价格突破阻力位时,就会产生长期买盘。在图表中部,Zig-Zag 指标有效地说明了标准普尔 500 指数处于价格上涨通道中。事实证明,在价格触及下方支撑趋势线时买入,在价格触及上方阻力线时卖出,都会带来极大的利润。

在短期交易中使用 Zig-Zag 指标也能证明是有利可图的。英特尔(INTC)的下图显示了一个经典的头肩顶形态,Zig-Zag 指标(回撤 1 美元)很容易就能看出来:


当右肩的价格突破向上倾斜的趋势线时,这个容易识别的头肩形态发出了卖出信号

之字形指标是识别经典图表形态的绝佳技术分析工具。之字形指标还能有效减少噪音,帮助技术交易者看清真正的市场方向。

 
帮助我理解 zz 的行为
 

在这段代码中,具体到下面的代码块,是否需要使用 "res "变量?

//--- 最终拒绝
   for(shift=limit;shift<rates_total && !IsStopped();shift++)
     {
      res=0.0;
      switch(whatlookfor)
        {
         case 0: // 搜索山峰或草坪
            if(lastlow==0 && lasthigh==0)
              {
               if(HighMapBuffer[shift]!=0)
                 {
                  lasthigh=high[shift];
                  lasthighpos=shift;
                  whatlookfor=Sill;
                  ZigzagBuffer[shift]=lasthigh;
                  res=1;
                 }
               if(LowMapBuffer[shift]!=0)
                 {
                  lastlow=low[shift];
                  lastlowpos=shift;
                  whatlookfor=Pike;
                  ZigzagBuffer[shift]=lastlow;
                  res=1;
                 }
              }
            break;
         case Pike: // 搜索峰值
            if(LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<lastlow && HighMapBuffer[shift]==0.0)
              {
               ZigzagBuffer[lastlowpos]=0.0;
               lastlowpos=shift;
               lastlow=LowMapBuffer[shift];
               ZigzagBuffer[shift]=lastlow;
               res=1;
              }
            if(HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)
              {
               lasthigh=HighMapBuffer[shift];
               lasthighpos=shift;
               ZigzagBuffer[shift]=lasthigh;
               whatlookfor=Sill;
               res=1;
              }
            break;
         case Sill: // 搜索草坪
            if(HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>lasthigh && LowMapBuffer[shift]==0.0)
              {
               ZigzagBuffer[lasthighpos]=0.0;
               lasthighpos=shift;
               lasthigh=HighMapBuffer[shift];
               ZigzagBuffer[shift]=lasthigh;
              }
            if(LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0)
              {
               lastlow=LowMapBuffer[shift];
               lastlowpos=shift;
               ZigzagBuffer[shift]=lastlow;
               whatlookfor=Pike;
              }
            break;
         default: return(rates_total);
        }
     }


真的需要吗?

 
soi kawasaki:

在这段代码中,具体到下面的代码块,"res "变量是否需要? 在其他代码块中,我知道它的用法,但在这段代码中不知道。


真的需要吗?

请检查 在您显示的代码之前,"res "变量在做什么。或者更好的办法是:删除它,看看之字形指标会发生什么变化。
 
Mladen Rakic:
检查在您显示的代码之前它在做什么。或者更好的办法是:删除它,看看之字形指标会发生什么变化。

感谢您的回复 : )

我用 Print()检查了 值以及使用它的地方,但不明白为什么需要在这个代码块中使用它。

我还在指标中删除了它,但没有它也能正常工作。

我很好奇,因为它是 MT5 的默认指标。

我只是想听听别人的意见,看我是否误解了该代码块中的用法。

 
亲爱的社区成员,你们好!我想请大家分享一下你们对以下问题的看法--我们可以在什么基础上做出假设(或者更确切地说事实),即当前极值之间区段的形成已经完成。我很清楚这个问题的复杂性,所以如果有任何想法,我将不胜感激。还有一个问题--如果参数 Depth - 最小蜡烛数是极值(最大值或最小值)之间的间隔,那么在参数值为 12 时,指标会在最大值和最小值之间画一条线,但同时在最大值和最小值之间,蜡烛数却少于 12,这是怎么回事?
 
Andrey Kornishkin #:

如何在 EA 代码中获取 "之 "字形条形顶部和底部的收盘价

使用 iCustom() 在图表上从右到左查看所有条形图,寻找指标缓冲区的非空值。这就是您要找的柱形图,您可以从中获取任何蜡烛图的价格。

 

Aleksandr Shirin 画一条线,但同时在最大值和最小值之间,蜡烛数却少于 12,这是怎么回事?

这还取决于价格所经过的点数(ExtDeviation 参数)。