套用你的自定義 挑出Bar的位置
沒電腦測試 你自己試試看行不行
int ZigB(int VNum,int ExtDepth,int ExtDeviation,int ExtBackstep) // 定義成正整數
{
double p0,p1,p2,p3,p4,tmp;
int b0,b1,b2,b3,b4; //定義計算Bar的數
for(int i=0; i<=10000; i++)
{
tmp=iCustom(Symbol(),0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i);
if(tmp>0 && p4==0 && p3>0)
{p4=tmp; b4=i} //p4成立時 b4=i
if(tmp>0 && p3==0 && p2>0)
{p3=tmp; b3=i}
if(tmp>0 && p2==0 && p1>0)
{p2=tmp; b2=i}
if(tmp>0 && p1==0 && p0>0)
{p1=tmp; b1=i}
if(tmp>0 && p0==0)
{p0=tmp; b0=i}
if(p0>0 && p1>0 && p2>0 && p3>0 && p4>0)
break;
}
if(VNum==0)
return(b0);
if(VNum==1)
return(b1);
if(VNum==2)
return(b2);
if(VNum==3)
return(b3);
if(VNum==4)
return(b4);
}
谢谢!代码可用,虽然没有不是我想要的结果 但是让我想到可以实现的方式了。再次谢谢
如果我这里想要开盘价、收盘价 成交量之类的如何获取?
//+------------------------------------------------------------------+ //| test_ZigZag.mq4 | //| Copyright 2020,fxMeter | //| https://www.mql5.com/en/users/fxmeter | //+------------------------------------------------------------------+ #property copyright "Copyright 2020,fxMeter" #property link "https://www.mql5.com/en/users/fxmeter" #property version "1.00" #property strict extern int ExtDepth=8; extern int ExtDeviation=5; extern int ExtBackstep=3; struct ZigZag { int shift;//K线位置 int flag;//ZZ是高点还是低点,1是高点,-1是低点 double value;//ZZ的值 }; #define ZZ_NUM 16 // 找最近16个ZZ拐点 ZigZag ZZ[ZZ_NUM]; // 找最近16个ZZ拐点 //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- GetZigZag(ExtDepth,ExtDeviation,ExtDeviation);//获得16个拐点 for(int i=0; i<ZZ_NUM; i++) { int flag = ZZ[i].flag; if(flag==1)//是个高点 { int k = ZZ[i].shift; //拐点对应的K线的位置 //--- double open = Open[k];//拐点开盘价 double close = Close[k];//拐点收盘价 } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void GetZigZag(int depth,int deviation,int backstep) { int k=0; for(int i=0; i<Bars; i++) { double z = iCustom(NULL,0,"ZigZag",depth,deviation,backstep,0,i); if(z>0&&z!=EMPTY_VALUE) //是个拐点 { if(z==High[i])//是个高点 { ZZ[k].value = z;//拐点值 ZZ[k].shift = i;//K线位置 ZZ[k].flag = 1;//1 表示高点 } else if(z==Low[i])//是个低点 { ZZ[k].value = z;//拐点值 ZZ[k].shift = i;//K线位置 ZZ[k].flag = -1;// -1 表示低点 } k++; if(k>=ZZ_NUM)break; } } } //+------------------------------------------------------------------+
附加的文件:
test_ZigZag.mq4
5 kb
Ziheng Zhuang:
首先感谢出手,代码质量很高。 z!=EMPTY_VALUE 这个没看懂没查询文档,只有一条说明是划线的省缺值。能简单解释一下省缺值吗? 再次感谢
这个EMPTY_VALUE是系统默认的空值,空值的作用就是这个K线位置指标不显示。
指标的值与K线是一一对应,但不是所有K线对应的位置都需要显示指标,不显示的位置就用空值,这说明我们在EA中获取指标值时获得的值可能是空值,因此需要排除空值。
我想根据zigzag指标获取过去折点的数值,目前只能获取折点最高价(最低价),想借此判断中长期趋势。
兄弟才疏学浅,可实在不知道从哪获取。希望大家不吝赐教,多谢!!