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

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

このブログはメタトレーダー4プログラムに関するブログです。

インジケーターやEAの作成方法を記事にしています。

自分が学んできてわかりにくかった点や、上達のコツなどを説明しています。


テーマで記事を分けています。

古い記事から順に読んでもらう方がわかりやすいと思いますので、それぞれの最初の記事にリンクしています。

メタトレーダー4  ・・・・・・・・・・・・・ メタトレーダー4の使い方等の全般的なこと

プログラム  ・・・・・・・・・・・・・・・・・ メタトレーダー4でのプログラムの全般的なこと

プログラム(インジケーター)
 ・・・ インジケーター関連のプログラムに関すること

プログラム(Expert Advisor)  ・・・ ExpertAdvisor関連のプログラムに関すること


Twitterやってます^^
色々つぶやいてますのでフォローしてみてください♪



高い約定能力とワンクリック約定で選ぶなら! 【Meta Trader4】
NEW !
テーマ:
メタエディターでプログラムを作成中に、

文字列の検索置換を行いたい場合が出てきます。

プログラムが小さい場合は、使用する機会はあまりないかもしれませんが、

大きくなってくると使用することが出てきますので、

覚えておくと楽になります


検索


Edit」→「Find」を使用します。



Find what」に検索したい文字列を入力して、

Find Next」ボタンをクリックします。



検索したい文字列を選択しておいて「Find」を選択すると、



Find what」にマークした文字列が自動的に入力されます。



Find what」の下矢印マークをクリックすると、

過去に入力した文字列の履歴が表示されます。




置換


Edit」→「Replace」を使用します。



Find what」に検索したい文字列を入力して、

Replace with」に置換したい文字列を入力します。


Find Next」ボタンをクリックすると、

置換したい文字列を検索します。

Replace」ボタンをクリックすると、

検索された文字列を新しく置換したい文字列と置換します。

Replace All」ボタンをクリックすると、

置換したい文字列をプログラム中から全て探して、

新しく置換したい文字列と全て置換します。



上の例ですと、Buffre1 を探し出し、oldtime に変更します。

置換したい文字列を選択しておいて「Replace」を選択すると、

Find what」にマークした文字列が自動的に入力されます。

また、過去に入力した文字列を記憶しています。


便利な機能は覚えて便利に使用しちゃいましょう




 

テーマ:
それでは start をプログラムします。

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

int limit=Bars-counted_bars-1;
for(int i=limit; i>=0; i--)
{
   ExtMapBuffer1[i]=iMA(NULL,0,ma_Period,0,MODE_SMA,PRICE_CLOSE,i);

   if(ExtMapBuffer1[i]>ExtMapBuffer1[i+1]
    && ExtMapBuffer1[i+1]>ExtMapBuffer1[i+2])
   {
      ExtMapBuffer2[i]=ExtMapBuffer1[i];
   }
   else if(ExtMapBuffer1[i]<ExtMapBuffer1[i+1]
    && ExtMapBuffer1[i+1]<ExtMapBuffer1[i+2])
   {
      ExtMapBuffer3[i]=ExtMapBuffer1[i];
   }
   else
   {
      ExtMapBuffer2[i]=EMPTY_VALUE;
      ExtMapBuffer3[i]=EMPTY_VALUE;
   }
}



まず最初に、ExtMapBuffer1 で移動平均線を計算しておきます。

次に、if文で条件を設定します。

1つ目に、現在の足の ExtMapBuffer1 の値と、

1本過去の ExtMapBuffer1 の値を比べ、

現在の足の ExtMapBuffer1 の値が大きいか確認します。

同様に、1本過去の足 ExtMapBuffer1 の値と、

2本過去の ExtMapBuffer1 の値を比べ、

1本過去の足 ExtMapBuffer1 の値が大きいか確認します。

どちらの条件にも当てはまる場合、

過去2本連続して移動平均線が大きくなっていることになり、

この場合を上昇しているとみなすことにします。

この時、ExtMapBuffer2 に ExtMapBuffer1 を代入します。


下降している場合は、小さいかどうかを比べます。

過去2本連続して移動平均線が小さくなっている時に、

ExtMapBuffer3 に ExtMapBuffer1 を代入します。

それ以外の時は、

ExtMapBuffer2 と ExtMapBuffer3 にEMPTY_VALUE を代入します。

EMPTY_VALUE は数値なし、という意味です。

チャートに表示するインジケーターの場合、

0 を代入してしまうと、

画面表示範囲外の 0 の値まで垂直の線が引かれてしまいますので、

EMPTY_VALUE を使用します。

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

カラフルに表示されればOKです。



上昇トレンドは赤、下降トレンドは青、それ以外が黄色の表示です。


今回、if文の条件を書くのに、&& のところで改行しています。(&&の説明

1行の長さが長くなる時に、意味がわかる区切りなら、

今回の例のように途中で改行する場合もあります。

また、説明しますので、今回はその様なこともあると覚えておいてください。

ばいちゃ~。(*゜▽゜ノノ゛☆




    

テーマ:
それでは出来たレインボーソースコードをいじっていきましょう。

宣言項目
のところに以下を追加してください。

#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2




少し太めの方が色が変わったのがわかりやすいです。

作った後にもっと太いのが好みなら数値を変更してみてください。


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

IndicatorShortName("MA 2Color("+ma_Period+")");
SetIndexLabel(0,"MA");
SetIndexLabel(1,NULL);
SetIndexLabel(2,NULL);
SetIndexDrawBegin(0,ma_Period);
SetIndexDrawBegin(1,ma_Period);
SetIndexDrawBegin(2,ma_Period);



まず、表示の名前を MA 2Color(maの期間) にしました。(こちら

次に、0番の項目の数値だけを表示するように設定しました。(こちら

1番と2番の項目は0番と同じ数値なので、特に表示する必要はないです。

最後に、maの計算期間前の値を表示しないように設定します。(こちら


次回、start の説明をします。

お楽しみに~。ヾ(@°▽°@)ノ




 

Amebaおすすめキーワード