Início Negociação Sistemática Postagem

Como Funciona o Trade Oposto no MetaTrader 5: Guia Prático

Anexo
18904.zip (1.11 KB, Baixar 0 vezes)

Fala, galera! Hoje vamos falar sobre uma estratégia bem interessante no trading: o Trade Oposto. A ideia básica é abrir uma posição oposta à que foi fechada, mantendo o mesmo volume. Essa abordagem pode ser aplicada em qualquer símbolo e com qualquer número mágico.

Por exemplo, digamos que você tenha uma posição aberta de compra (BUY) em AUDUSD com volume de 0.01. Assim que você fechar essa posição (seja manualmente ou por outro motivo), o Expert Advisor de Trade Oposto vai abrir automaticamente uma nova posição em AUDUSD, mas agora como venda (SELL).

Todo o código necessário para isso está na função OnTradeTransaction:

//+------------------------------------------------------------------+
//| Função TradeTransaction                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- obtém o tipo de transação como valor enumerado 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- se a transação é resultado da adição da transação no histórico
   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;
           }
        }
     }
  }

Nessa parte do código, estamos aguardando o fechamento da posição (DEAL_ENTRY_OUT). Assim que essa transação aparece, verificamos se foi uma compra ou uma venda e abrimos a nova posição de acordo. É uma estratégia simples, mas que pode ser muito eficaz se utilizada corretamente!

Publicações relacionadas

Comentário (0)