MetaTrader 4 プログラム初級編

ドテン売買の仕方



 今回は、ドテン売買のシステムの説明です。


 サンプルプログラムはこちらです。


 http://jidoubaibai.com/Samples/Sample%20iMA3.mq4


 サンプルプログラムの使い方は、こちらで説明しています。



 では、MetaEditorを起動して下さい。


 NameはiMA3にして置いて下さい。


 内容はほとんど前回と同じです。


 仕掛けと手仕舞い後の処理が少し違っています。


 では、まとめて書きますね。



int start()
{
 //変数の宣言
 int cnt, CurrentPosition;
 int Ticket;
 double kakoa,gennzaia;
 double kakob,gennzaib;

 // オーダーチェック(ポジションなどのデータ)
 CurrentPosition=-1;
 for(cnt=0;cnt < OrdersTotal();cnt++){
  OrderSelect(cnt,SELECT_BY_POS);
  if(OrderSymbol() == Symbol()) CurrentPosition=cnt;
 }

 //一時間前の21日線
 kakoa = iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);
 //一時間前の90日線
 kakob = iMA(NULL,0,90,0,MODE_SMA,PRICE_CLOSE,1);

 //現在の21日線
 gennzaia = iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);
 //現在の90日線
 gennzaib = iMA(NULL,0,90,0,MODE_SMA,PRICE_CLOSE,0);


 // ポジションチェック ポジション無し
 if(CurrentPosition == -1)
 {
   //もし21日線が90日線を下から上にクロスしたら
   if( kakoa < kakob && gennzaia >= gennzaib)
   {
     //買いポジションを取る
     Ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0, "Buy", 0, 0, Red);
   }

   //もし21日線が90日線を上から下にクロスしたら
   if( kakoa > kakob && gennzaia <= gennzaib)
   {
     //売りポジションを取る
     Ticket = OrderSend(Symbol(), OP_SELL, 1, Bid, 3, 0, 0, "Sell", 0, 0, Blue);
   }



 }
 // ポジション有り
 else
 {
    //ポジションの選択
   OrderSelect(CurrentPosition,SELECT_BY_POS);

    //ポジションの確認
    if(OrderSymbol() == Symbol())
    {
    //もし買いポジションだったら
    if(OrderType()==OP_BUY)
    {
      //もし21日線が90日線を上から下にクロスしたら
      if( kakoa > kakob && gennzaia <= gennzaib)
      {
        //手仕舞い
        OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);

        //ドテンで売りポジションを取る
        Ticket = OrderSend(Symbol(), OP_SELL, 1, Bid, 3, 0, 0, "Sell", 0, 0, Blue);
      }
    }
    //もし売りポジションだったら
    else if(OrderType()==OP_SELL)
    {
      //もし21日線が90日線を下から上にクロスしたら
      if( kakoa < kakob && gennzaia >= gennzaib)
      {
        //手仕舞い
        OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);

        //ドテンで買いポジションを取る
        Ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0, "Buy", 0, 0, Red);
      }
    }
   }

 }
  return(0);
}




 書けましたか?


 今回は、前回の応用みたいな感じなので、細かい説明は省きますね。


 変更点は、まず仕掛けに売りを追加しました。


 売りにする場合は、 OP_BUYOP_SELLにして、AskBidにして下さい。


 そして売りの手仕舞いを追加して、手仕舞いの後に、手仕舞いが売りなら買い、手仕舞いが買いなら売りのオーダーを追加しました。


 こうすることによってドテン売買をすることが出来ます。



 仕掛けに買いと売りの両方のオーダーが書いてあるから、いちいち手仕舞いの後に書かなくてもよいのでは?という疑問が浮かぶ人もいるかもしれませんが、手仕舞いのところに書かないとドテン売買出来ません。


 それは何故かというと、プログラムは基本的に上から下に命令を実行して行きますので、手仕舞いのところを通過すると、仕掛けのコードの方が上にありますので、仕掛けの命令は実行しません。


 仕掛けの命令を実行するのは、次の時間足になります。


 そして、次の時間足になった場合は、売買ルールの条件を満たしていませんので、オーダーは実行されません。


 例えば、買いの条件は移動平均の21日線が一つ前の足では90日線の下で、現在では90日線の上になっていることですが、次の時間足になった場合は、前回も現在も21日線のほうが上にありますので、オーダーが実行されません。


 プログラムはこういう細かいところを間違えるとシステムの内容が異なってきますので気をつけて下さい。



 これで、今回のプログラムは終了です。


 今回のシステムは移動平均の21日線と90日線のゴールデンクロスで買い、デッドクロスで売り、手仕舞いは仕掛けの逆のルールで行い、手仕舞いの後にドテン売買するというものです。


 では、コンパイルをするためにcompileのボタンを押してください。


 エラーが出てきた場合は、半角になっているか、;を付け忘れていないか、{}を付け忘れていないか、{}の数は合っているかを確認して下さい。


 どうしてもエラーが分からない場合は、サンプルプログラムを参照して下さい。


 エラーが出なかったら、MetaTrader 4バックテストiMA3を選んで、スタートして下さい。


 終わったら、結果、Graph、レポートを見てください。




iMA3 レポート ドル円日足




iMA3 グラフ ドル円日足




 今回はこれで終了です。


 次回はMACD関数の説明です。



--------------------------------------注意---------------------------------------

 半角のスペースが認識されない為、コードを見易くするために全角で書いている場合があります。
 実際にプログラムにコードを書くときは、コピー&ペーストせずに半角で書いて行って下さい。

<< 手仕舞いの仕方 | TOP | MACD関数の使い方 >>

トップページ プロフィール ブログ リンク オーダーシステム 利用規約 問い合わせ