皆さん、こんにちは!今日はMetaTrader 5で使える「逆ポジション」を自動的に開くエキスパートアドバイザー(EA)についてお話しします。これを使えば、ポジションを閉じた際に自動で逆の取引が行われるのでとても便利です。
例えば、AUDUSDで0.01ロットの買いポジションを持っているとします。このポジションを手動で閉じると、逆ポジションのEAがすぐに新たなAUDUSDの売りポジションを開いてくれます。
コードの概要
このEAの全てのコードは、OnTradeTransaction関数の中に収められています。
//+------------------------------------------------------------------+ //| TradeTransaction 関数 | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- 取引タイプを取得 ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- 取引が履歴に追加された結果である場合 if(type==TRADE_TRANSACTION_DEAL_ADD) { long deal_type =-1; long deal_entry =-1; double deal_volume =0.0; string deal_symbol =""; if(HistoryDealSelect(trans.deal)) { deal_type =HistoryDealGetInteger(trans.deal,DEAL_TYPE); deal_entry =HistoryDealGetInteger(trans.deal,DEAL_ENTRY); deal_volume =HistoryDealGetDouble(trans.deal,DEAL_VOLUME); deal_symbol =HistoryDealGetString(trans.deal,DEAL_SYMBOL); } else return; if(deal_entry==DEAL_ENTRY_OUT) { switch((int)deal_type) { case DEAL_TYPE_BUY: m_trade.Buy(deal_volume,deal_symbol); break; case DEAL_TYPE_SELL: m_trade.Sell(deal_volume,deal_symbol); break; default: break; } } } }
このコードでは、ポジションが閉じる取引(DEAL_ENTRY_OUT)を待ちます。取引が確認できたら、取引のタイプをチェックし(例えば、BUYを閉じた場合はSELLの取引が行われます)、新たにポジションを開きます。