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

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

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

EAを作成したのはいいのですが、

思った通りに動くかどうかわからないのにいきなり使うわけにもいきません。

チェックせずに実戦投入だなんて、そんな恐ろしいことはやめておきましょうw


EAの動きをチェックするには「テスター」を使用します。

このテスターを使用すると、過去のチャートを用いて検証ができます。

バックテストというやつです。

この検証を行ってうまく動くかどうかをテストします。

動作がおかしければ、メタエディターに戻って不具合を修正し、再度検証します。

このようにしてプログラムを仕上げていきます。



それでは早速テスターを使ってみましょう。

表示」→「Strategy Tester」を選択して「テスター」を開きます。

アイコンバーの虫眼鏡のマークでも開くことができます。



Expert Adovisor」のところで検証したいEAを選択します。

通貨ペア」で、検証したい通貨ペアを選択します。

期間」で、検証したい時間足を選択します。

設定が終わったら、「スタート」をクリックします。

検証中は「スタート」ボタンが「ストップ」ボタンに変わり、緑のバーが何度か動きます。

かわいらしい変な音がして、「ストップ」が「スタート」に変わったら、終了です。



でも、長くなってきたので、結果の見方は次回にします~




   
それでは、start をプログラムしていきましょう。

今回のプログラムでは、説明を簡単にするために買いのみのプログラムにしています。

それでも、今までにやっていないことが盛りだくさんです

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

//ポジション計算
   int buypos=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic01)
        {
         if(OrderType()==OP_BUY)  buypos++;
        }
     }

//指標計算
   double fast_ma1=iMA(NULL,0,ma1_Period,0,MODE_SMA,PRICE_CLOSE,1);
   double fast_ma2=iMA(NULL,0,ma1_Period,0,MODE_SMA,PRICE_CLOSE,2);
   double slow_ma1=iMA(NULL,0,ma2_Period,0,MODE_SMA,PRICE_CLOSE,1);
   double slow_ma2=iMA(NULL,0,ma2_Period,0,MODE_SMA,PRICE_CLOSE,2);

//手仕舞い判断
   if(buypos!=0 && fast_ma1<slow_ma1 && fast_ma2>slow_ma2)
   {
      for(i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()!=magic01 || OrderSymbol()!=Symbol()) continue;
         if(OrderType()==OP_BUY)
         {
            OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         }
      }
   }

//仕掛判断
   if(buypos==0 && fast_ma1>slow_ma1 && fast_ma2<slow_ma2)
   {
      OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",magic01,0,Blue);
   }




EAの基本的な流れとして、

ポジション計算

指標計算

手仕舞い判断

仕掛判断


となります。

ポジション計算と指標の計算は前後しても構いませんが、

どちらも手仕舞い判断の前に計算します。

そして、手仕舞い判断が仕掛判断より先です。

このような流れにしておかないと、動作が不安定になる場合がありますので、

基本的な流れだけ覚えておいてください。

詳しい解説は、次回以降にしていきます。


入力が終わりましたら、コンパイルしてください。

エラーがなければOKです。

チャートにセットするのはまだやめておいてくださいね~(;^_^A



 
それでは、前回ファイルを作成したのでプログラムしていきましょう。

まずは、宣言項目です。

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

int magic01 = 1234001;



今回マジックナンバーというものを設定しました。

マジックナンバーというのは、EAの識別番号です。

メタトレーダーは、同じ口座で色々なEAを使用することができます。

例えば、通貨ペアが EURUSD で A のEAと B のEAを動かした場合、

A のEAが買いのポジションを持ったとしても、

ポジションの区別がつかなければ、同じ EURUSD のポジションということしかわかりません。

この時、B の手仕舞いのルールで手仕舞いする可能性があります。

EAのポジションの区別をつけるために、EAには個別のマジックナンバーを設定します。

ここのところは重要ですので、しっかり覚えてくださいね~


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

int ma_Buffer;
if (ma1_Period>ma2_Period)
{
   ma_Buffer=ma1_Period;
   ma1_Period=ma2_Period;
   ma2_Period=ma_Buffer;
}




これは、以前インジケーターのところで使いました。

ma1_Period と ma2_Period を比較して、

ma1_Period が小さくなるようにチェックして変更するものです。

詳しい説明はこちらをご覧ください。


EAにはマジックナンバーが必要だというのを覚えておいてください。

次回は、start をプログラムしていきます。