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がそのままでは動作しないようです。気を付けたほうがよいでしょう。