Dans le monde du trading, il arrive parfois qu'il faille prendre des décisions rapides après avoir clôturé une position. C'est là qu'intervient l'Expert Advisor de trading opposé. En gros, cet outil permet d'ouvrir une position inverse dès qu'une autre est fermée, tout en gardant le même volume.
Par exemple, imaginons que vous ayez une position AUDUSD en achat (BUY) de 0,01 lot. Une fois que vous fermez cette position (que ce soit manuellement ou automatiquement), l'EA de trading opposé s'active et ouvre immédiatement une nouvelle position AUDUSD, mais cette fois-ci en vente (SELL).
Le code complet de cet EA se trouve dans la fonction OnTradeTransaction :
//+------------------------------------------------------------------+ //| Fonction OnTradeTransaction | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- récupérer le type de transaction ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- si la transaction est le résultat d'une entrée dans l'historique 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; } } } }
Dans ce code, nous attendons la clôture de la position (DEAL_ENTRY_OUT). Une fois que cette opération est enregistrée, nous vérifions le type de la transaction (si nous avons fermé une position d'achat, alors il faudra ouvrir une position de vente, et vice versa).
Commentaire 0