FxPro MetaTrader 5で書いたExpertAdvisorが取引しない

FxProのMetaTrader 5で、MQL5 Wizardで作成したExpertを実行しても、なぜかポジションを全くオープンしません。恐らくOrderSendを行うときにエラーになっていると思われるのですが、エラーメッセージが何も出ないのでお手上げです。

そこで、デバッグ機能を使用して調べてみました。

すると、CTrade::FillingCheckメソッドでFillModeが期待するモードになっていないためfalseを返しており、取引を行っていませんでした。FxProの場合、OrderTypeのFillModeを、ORDER_FILLING_IOCに指定しないとダメなようです。

解決策としては、MQL5のWizerdで作成されたソースのOnInit()関数に以下のコードを加えることにより、取引するようになりました。 取引するときのクラス、CExpertTradeクラスを生成し、FillingTypeをORDER_FILLING_IOCに設定してExtExpertオブジェクトに設定しています。 デフォルトのFillModeは、ORDER_TYPE_FOCのようです。

int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
 
//-- ここから追加      
   CExpertTrade *trade = new CExpertTrade;
   trade.SetTypeFilling(ORDER_FILLING_IOC);
   trade.SetAsyncMode(false);
   ExtExpert.InitTrade(Expert_MagicNumber, trade);
//-- ここまで

//--- Creating signal

FxProのMetaTrader 5はFillModeがちょっと違うようで、巷のMQL 5で書かれたExpertAdvisorがそのままでは動作しないようです。気を付けたほうがよいでしょう。