Trading Opposto: Come Utilizzare l'Expert Advisor su MetaTrader 5

Mike 2017.11.03 21:25 10 0 0
Allegato

Quando chiudi una posizione, puoi aprirne subito un'altra opposta con lo stesso volume. Questo metodo è valido per qualsiasi simbolo e numero magico.

Facciamo un esempio: hai aperto una posizione BUY su AUDUSD con volume 0.01. Una volta chiusa questa posizione (ad esempio, chiudendola manualmente), l'Expert Advisor per il trading opposto aprirà automaticamente una nuova posizione SELL su AUDUSD.

Tutto il codice necessario si trova all'interno della funzione OnTradeTransaction:

//+------------------------------------------------------------------+
//| Funzione TradeTransaction                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- otteniamo il tipo di transazione come valore enumerato
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- se la transazione è il risultato dell'aggiunta di una transazione nella cronologia
   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;
           }
        }
     }
  }

In questa funzione, aspettiamo che si chiuda la posizione (DEAL_ENTRY_OUT). Una volta che questa transazione è registrata, controlliamo il tipo di operazione (se abbiamo chiuso un BUY, questa sarà una SELL, e viceversa) e apriamo una nuova posizione.

Elenco
Commento 0