Mt4のカスタムインジケーターZigZagの天井(山)と底(谷)の値を取得するためのサンプルコードを紹介します。
ZigZagは山で高値、谷で安値を返し、その他の場所ではすべて0を返します。
EAでZigZagを使うにはiCustom()を使います。ZigZagの場合は、
double iCustom(NULL,PERIOD_5M,”ZigZag”,12,5,3,0,1)
のように、
iCustom(通貨ペア、時間足、”インジケーター名”、Depth,Deviation,Backstep,バッファー,Barの位置)
の形になります。(これはZigZagの場合であって他のカスタムインジケーターでは違う書き方になります)。バッファーは複数のiCustomでZigZagを使うときに変えます。
//---Zigzag--------------------------------------------------------------// int m,n; m=0; n=0; double Top[10]; double Bottom[10]; int tPosition[10]; int bPosition[10]; for(int i=0;i<=200;i++) { double Zg=NormalizeDouble(iCustom(NULL,0,"ZigZag",12,5,3,0,i),5); if(Zg!=0 && Zg==NormalizeDouble(High[i],5)) { Top[m++]=Zg; tPosition[m-1]=i; if(m>=10)break; } if(Zg!=0 && Zg==NormalizeDouble(Low[i],5)) { Bottom[n++]=Zg; bPosition[n-1]=i; if(n>=10)break; } } Comment("Top_0= ",Top[0],",Position=",tPosition[0],"\n", "Top_1=",Top[1],",Position=",tPosition[1],"\n", "Top_2=",Top[2],",Position=",tPosition[2],"\n", "Bottom_0=",Bottom[0],",Position=",bPosition[0],"\n", "Bottom_1=",Bottom[1],",Position=",bPosition[1],"\n", "Bottom_2=",Bottom[2],",Position=",bPosition[2],"\n"); //---Zigzag--------------------------------------------------------------//
上のサンプルコードでは、for関数を使ってローソク200本分のZigZagの値を計算し、その中でZigZagが0以外かつ該当ローソクの高値と一致する場合に山、0以外かつ安値と一致する場合に谷として値を取得します。
山はTop[]に谷はBottom[]に格納され、山のローソク位置はtPosition[]に谷のローソク位置はbPosition[]に格納されます。
また、山谷いずれかの値を10個格納した場合にforのループを抜けるようにしてあります。
コード最下部ではComment()を使って取得した値をチャート上に表示させます。値の確認に使ってください。