Cómo utilizar el sistema de comercio opuesto en MetaTrader 5

Mike 2017.11.03 21:25 10 0 0
Archivos adjuntos

Hoy vamos a hablar sobre una estrategia muy interesante: abrir una posición opuesta a la que cerramos, utilizando un sistema de trading. Esto funciona para cualquier símbolo y número mágico que utilices.

Imagina que tienes una posición abierta de AUDUSD en compra (BUY) de 0.01. Una vez que cierras esta posición (ya sea manualmente o de alguna otra forma), el Sistema de Comercio Opuesto se encargará de abrir automáticamente una nueva posición en AUDUSD, pero esta vez será de venta (SELL).

Todo el código necesario para implementar esta función se encuentra dentro de la función OnTradeTransaction:

//+------------------------------------------------------------------+
//| Función TradeTransaction                                         |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- obtener el tipo de transacción como valor de enumeración 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- si la transacción es resultado de la adición a la historia
  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;
           }
        }
     }
  }

En este código, estamos esperando a que se cierre la operación (DEAL_ENTRY_OUT). Una vez que aparece este trato, revisamos el tipo de operación (si cerramos una compra, esta será una venta y viceversa) y automáticamente abrimos una nueva posición.

Lista
Comentarios 0