どうも、izuです。
今回はMT4による自動売買で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; } } //---Zigzag END--------------------------------------------------------------// //---Trend Line--------------------------------------------------------------// double Open_1 = iOpen(NULL,0,1); double Y_R,Y_0,Y_1,Y_2; int X_R,X_1,X_2; //BUY if(tPosition[0]<bPosition[0]) { Y_R = iClose(NULL,0,1); X_1 = tPosition[1]; X_2 = tPosition[2]; Y_1 = High[X_1]; Y_2 = High[X_2]; X_R = 1; Y_0 = (Y_1 - Y_2)/(X_2 - X_1)*(X_2 - X_R) + Y_2; } //SELL if(bPosition[0]<tPosition[0]) { Y_R = iClose(NULL,0,1); X_1 = bPosition[1]; X_2 = bPosition[2]; Y_1 = Low[X_1]; Y_2 = Low[X_2]; X_R = 1; Y_0 = (Y_1 - Y_2)/(X_2 - X_1)*(X_2 - X_R) + Y_2; } //---Trend Line END--------------------------------------------------------------//
前半部分は以前紹介した「ZigZagの天底の値の取得方」のコードです。
後半部分ではZigZagの直近の底2点、もしくは直近の天井2点を利用して、トレンドライン(直線)の傾きを計算し、現在のトレンドライン上の価格をY_0に格納しています。
実際にトレンドラインをチャートに表示したい場合は「EAで自動的にレジサポラインを引いてみる。サンプルコード」でも使った「ObjectCreate関数」を使ってみてください。