Trading Opposé : L'EA Indispensable pour MetaTrader 5

Mike 2017.11.03 21:25 30 0 0
Pièce jointe

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).

Liste
Commentaire 0