double p0,p1,p2;
for(i=0;i<=bars,i++)
{
if(zigzagbuffer(i))>0 && p0==0) p0=zigzagbuffer(i);
if(zigzagbuffer(i))>0 && p1==0 && p0>0) p1=zigzagbuffer(i);
if(zigzagbuffer(i))>0 && p2==0 && p1>0) p2=zigzagbuffer(i);
}
谢谢你。我还没完全理解。是不是要用到iCustom函数? 为什么要设 zigzagbuffer(i)>0 呢?我的理解,价格都是大于零的,自然 zigzagbuffer(i) 就是大于零的,不是吗?
我再看看,不行还得请教。
//---- indicator buffers
double ZigzagBuffer[];
以上是ZIGZAG指标定义的划线所依据的变量数组,这个数组的存储高低点价格,其他的非高低点值为零,所以只要从右往左找三个>0的值就依次是你要的三个数据。
不用ICUSTOME。
不用客气,我个人正巧使用这个指标。
三个值你说的没错,好事做到底了。
double ZigV(int VNum,int ExtDepth,int ExtDeviation,int ExtBackstep)
{
double p0,p1,p2,tmp;
for(int i=0;i<=10000;i++)
{
tmp=iCustom(Symbol(),0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(tmp>0 && p2==0 && p1>0) p2=tmp;
if(tmp>0 && p1==0 && p0>0) p1=tmp;
if(tmp>0 && p0==0) p0=tmp;
if(p0>0 && p1>0 && p2>0) break;
}
if(VNum==0) return(p0);
if(VNum==1) return(p1);
if(VNum==2) return(p2);
}
上面是完整的求三值的函数,复制到你的指标最后的空白地区就行了。
下面是调用三个值并用注释方式显示三值在屏幕左上角即Z0,Z1,Z2,你可以根据需要修改;
这个要放在START{}里面的return语句前。
Comment("Z0:",ZigV(0,12,5,3),"\n","Z1:",ZigV(1,12,5,3),"\n","Z2:",ZigV(2,12,5,3));