メタトレーダー4でプログラムを作ってみよう -41ページ目

メタトレーダー4でプログラムを作ってみよう

無料のトレードソフトであるメタトレーダー4のプログラムを作るコツをアップします。初心者がインジケーターとEAのプログラムを作成できるのを目指します。

前回の記事で start を作成しましたが、

for 文の中身を ++ のバージョンでやりました。

実は -- を使う方がすっきりするので修正します。

なら先にそっちでやれよ!って感じですが・・・( ̄Д ̄;;

++ と -- の処理の違いは、こちらで説明しています。

では、以下のように修正してください。

int limit=Bars-counted_bars-1;
for(int i=limit; i>=0; i--)
{
   ExtMapBuffer1[i]=iBands(NULL,0,Band_Period,Deviation,0,PRICE_CLOSE,MODE_UPPER,i);
   ExtMapBuffer2[i]=iMA(NULL,0,Band_Period,0,MODE_SMA,PRICE_CLOSE,i);
   ExtMapBuffer3[i]=iBands(NULL,0,Band_Period,Deviation,0,PRICE_CLOSE,MODE_LOWER,i);

   if(ExtMapBuffer3[i+1]>Close[i+1] && ExtMapBuffer3[i+2]<Low[i+2])
   {
      ExtMapBuffer4[i]=Close[i];
      ExtMapBuffer5[i]=0;
   }
   else if(ExtMapBuffer1[i+1]<Close[i+1] && ExtMapBuffer1[i+2]>High[i+2])
   {
      ExtMapBuffer4[i]=0;
      ExtMapBuffer5[i]=Close[i];
   }
   else
   {
      ExtMapBuffer4[i]=0;
      ExtMapBuffer5[i]=0;
   }





こっちの方がすっきりしてますね~

前回のように、0 の現在の足から始めて過去の足にさかのぼって行くように計算した場合、

1本過去や2本過去の足の指標は計算できていません。


ですので、前回の通り ++ で ExtMapBuffer1 等を使って処理をしてしまうと、

矢印の表示がうまく出来ません。


今回のように、一番過去から現在に向かって -- で計算してくると、

過去の値は計算してあるので、ExtMapBuffer1 等の値が使用できます。



この過去から現在に向かって計算したり、

現在から過去に向かって計算したしするのは、

私はなかなか理解できなかったので、

まわりくどいですが何度かこのような説明をさせてもらおうと思います。

ではまた~(^-^)ノ~~




   
それでは、start に入ります。

今回やりたいことは、

2本前のローソク足がバンドの内側で、

1本前のローソク足の終値がバンドの外側なら、

現在の足に矢印を出します。


文章で書くとなんだかわかりにくくてサッパリ星人が出てきそうですね。(;^_^A

しかしながら、文章にできないものはロジックとして表現できませんので、

文章に書き表わしてみるのも大切な作業です。



それでは、以下の分を追加してください。

int limit=Bars-counted_bars-1;
for(int i=0; i<limit; i++)
{
   ExtMapBuffer1[i]=iBands(NULL,0,Band_Period,Deviation,0,PRICE_CLOSE,MODE_UPPER,i);
   ExtMapBuffer2[i]=iMA(NULL,0,Band_Period,0,MODE_SMA,PRICE_CLOSE,i);
   ExtMapBuffer3[i]=iBands(NULL,0,Band_Period,Deviation,0,PRICE_CLOSE,MODE_LOWER,i);

   double band_Upper1=iBands(NULL,0,Band_Period,Deviation,0,PRICE_CLOSE,MODE_UPPER,i+1);
   double band_Upper2=iBands(NULL,0,Band_Period,Deviation,0,PRICE_CLOSE,MODE_UPPER,i+2);
   double band_Lower1=iBands(NULL,0,Band_Period,Deviation,0,PRICE_CLOSE,MODE_LOWER,i+1);
   double band_Lower2=iBands(NULL,0,Band_Period,Deviation,0,PRICE_CLOSE,MODE_LOWER,i+2);

   if(band_Lower1>Close[i+1] && band_Lower2<Low[i+2])
   {
      ExtMapBuffer4[i]=Close[i];
      ExtMapBuffer5[i]=0;
   }
   else if(band_Upper1<Close[i+1] && band_Upper2>High[i+2])
   {
      ExtMapBuffer4[i]=0;
      ExtMapBuffer5[i]=Close[i];
   }
   else
   {
      ExtMapBuffer4[i]=0;
      ExtMapBuffer5[i]=0;
   }





ボリンジャーバンドのインジケーターを作った時(こちら)と、

移動平均線のクロスで矢印を出した時(こちら)のをミックスした感じです。


今回は2本前と1本前を使って作りましたが、

2本前を1本前にして、1本前を現在の足に変更すれば、

バンドを突破したらすぐ矢印が出るようになります。


コンパイルしてチャートにセットしてみてください。

以下のように表示されれます。



ラインをわざわざ設定しなくていいのは楽でいいですね~




 
色々描写させたりするとややこしくなってきます。

今回は矢印とラインの両方を使うので今までよりごちゃごちゃしています。ヽ(;´Д`)ノ

順番に考えていけばそれほどでもないと思いますので、ゆっくりやっていきましょう。


今回は1~3でボリンジャーバンドを描写し、4,5で矢印を描写します。


まずは宣言項目です。

以下を追加してください。

#property indicator_style1 STYLE_DOT
#property indicator_style2 STYLE_SOLID
#property indicator_style3 STYLE_DOT
#property indicator_width4 2
#property indicator_width5 2



1~3のボリンジャーバンドの線の種類を指定します。

線の種類の説明はこちらです。


4,5の矢印の大きさが小さいとわかりにくいので、2 に設定します。

前回は3にしましたが、今回はちょっと控えめで・・・。( ̄ー ̄;

大きさを変える説明はこちらです。


では次に、init に以下を追加してください。

IndicatorShortName("Band_Touch");
SetIndexLabel(0,"Upper");
SetIndexLabel(1,"Main");
SetIndexLabel(2,"Lower");
SetIndexLabel(3,NULL);
SetIndexLabel(4,NULL);



インジケーターの名前と、ラベルを変更します。

この説明はこちらこちらです。

とりあえず、今回はここまで~

次回は start をいじくります