2008年05月10日

MT4でリピートイフダン注文

最近、某有名為替ブログでリピートイフダン注文の話題が続いていますね。

対応しているFX業者さんが、大々的に宣伝しているせいでもあるかと思います。

ただ、これはシステムをプログラミングできるプラットフォームであれば簡単にできてしまいますね。

ちなみにMT4だと、こんなプログラムになります。

//マジックナンバー
#define MAGIC  20080321
 
//パラメーター
extern double Lots = 0.1;
extern double OpenPrice = 104.00;
extern double ClosePrice = 105.00;
 
//ポジションの計算
int CalculateCurrentOrders()
{
   int pos=0;
   for(int i=0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC)
      {
         if(OrderType() == OP_BUY || OrderType() == OP_BUYLIMIT)  pos++;
         if(OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT) pos--;
      }
   }
   return(pos);
}
 
// スタート関数
int start()
{
   if(IsTradeAllowed() == false || CalculateCurrentOrders() != 0) return(0);
 
   if(OpenPrice < ClosePrice) OrderSend(Symbol(),OP_BUYLIMIT,Lots,OpenPrice,0,0,ClosePrice,"",MAGIC,0,Blue);
   else if(OpenPrice > ClosePrice) OrderSend(Symbol(),OP_SELLLIMIT,Lots,OpenPrice,0,0,ClosePrice,"",MAGIC,0,Red);
 
   return(0);
}

何度も発注しないように CalculateCurrentOrders()で現在の注文数をチェックする必要がありますが、オープンポジションか指値注文がなければ、新たに指値注文を入れるという非常に簡単なロジックです。

OpenPrice と ClosePrce を適当に設定して、OpenPrice < ClosePrice の場合買い注文、逆の場合、売り注文になります。これをエキスパートプログラム(EA)として実行しておけば、リピートイフダン注文に対応したことになります。

なお、CalculateCurrentOrders()は、 同じようなものを「FXメタトレーダー入門」の334ページで使っていますが、紙面の都合で詳しい説明は書けませんでした。オーダー関連の関数については別の機会に説明したいと思います。