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

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

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

クロスってなんだ?って感じですけど、

Xジャンプとはちょっと違います。

トレードではラインの交差で仕掛けることがよくあります。

交差のことをクロスと言います。

下の画像は移動平均線のクロスの状態です。



黄色が短期線で、赤色が長期線です。

少し微妙でわかりにくいですが、

1本過去の足で、黄色のラインが赤色のラインのになっています。

そして、

現在の足で、黄色のラインが赤色のラインのになっています。

この状態がクロスした状態です。

これを式で表してみます。

まずは以下のようにそれぞれの値を定めます。

黄0 (現在の足の黄色のラインの値)
黄1 (1本過去の足の黄色のラインの値)

赤0 (現在の足の赤色のラインの値)
赤1 (1本過去の足の赤色のラインの値)


1本過去の足は、黄色が下で赤色が上なので、

黄1 < 赤1

です。

現在の足は、黄色が上で赤色が下なので、

黄0 > 赤0


です。

これを組み合わせると

黄1 < 赤1 && 黄0 > 赤0

となります。


これは黄色のラインが赤色のラインを上抜けする場合ですが、

逆に黄色のラインが赤色のラインを上から下抜けする場合は、

黄1 > 赤1 && 黄0 < 赤0

符号が逆になります。

このクロスの考え方は慣れるまでわかりにくいかもしれませんが、

結構よく使うと思いますのでボチボチでいいので覚えてみましょう。




 
それでは start をいじっていきます。

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

int limit=Bars-counted_bars-1;
for(int i=0; i<limit; i++)
{
   double fast_ma0=iMA(NULL,0,ma1_Period,0,MODE_SMA,PRICE_CLOSE,i);
   double fast_ma1=iMA(NULL,0,ma1_Period,0,MODE_SMA,PRICE_CLOSE,i+1);
   double slow_ma0=iMA(NULL,0,ma2_Period,0,MODE_SMA,PRICE_CLOSE,i);
   double slow_ma1=iMA(NULL,0,ma2_Period,0,MODE_SMA,PRICE_CLOSE,i+1);

   if(fast_ma0>slow_ma0 && fast_ma1<slow_ma1)
   {
      ExtMapBuffer1[i]=Close[i];
      ExtMapBuffer2[i]=0;
   }
   else if(fast_ma0<slow_ma0 && fast_ma1>slow_ma1)
   {
      ExtMapBuffer1[i]=0;
      ExtMapBuffer2[i]=Close[i];
   }
   else
   {
      ExtMapBuffer1[i]=0;
      ExtMapBuffer2[i]=0;
   }



なにやらごちゃごちゃしております。(^▽^;)

fast_ma で期間の短い方の移動平均線を計算し、

slow_ma で期間の長い方の移動平均線を計算します。

それぞれ、0 と 1 で現在の足と1本過去の足の移動平均線を計算します。

そして、現在の足と過去の足の移動平均線の位置関係から、

クロスしたかどうかを判定しています。


この、クロスという考え方が慣れるまで難しいので、

次回以降に詳しく説明したいと思います。


入力が完了したら、コンパイルしてチャートにセットしてください。



こんな感じで表示されていればOKです。

移動平均線はMovingAverageをチャートに2本セットして表示させています。

クロスしたところにうまい具合に矢印が出ていると思います。

次回以降これを元にして色々いじっていきます。




   
それではファイト一発オロナミンCでプログラムしていきましょう


まずは宣言項目です。

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

#property indicator_width1 3
#property indicator_width2 3




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

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


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

IndicatorShortName("MA_Cross");
SetIndexLabel(0,NULL);
SetIndexLabel(1,NULL);




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

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

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

次回は start をいじくります