Início Negociação Sistemática Postagem

Camel CCI e MACD: Um Sistema de Trading para MetaTrader 5

Anexo
17841.zip (4.12 KB, Baixar 0 vezes)

Autor da ideiaJohn Smith, autor do código MQL5barabashkakvn.

Este EA (Expert Advisor) está configurado para operar o par USDJPY no timeframe H1.

O sistema utiliza duas Médias Móveis, um MACD e um CCI. Para receber o tempo de abertura das posições, é utilizado o evento OnTradeTransaction.

Todos os valores dos indicadores são obtidos a partir da barra com índice 1.

//--- Configuração dos Indicadores 
   CAMELHIGHP1=iMAGet(handle_iMA_PRICE_HIGH,1);
   CAMELLOWP1=iMAGet(handle_iMA_PRICE_LOW,1);
//
   MACDSP1=iMACDGet(SIGNAL_LINE,1);
   MACDSP2=iMACDGet(SIGNAL_LINE,2);
//
   MACDHP1=iMACDGet(MAIN_LINE,1);
   MACDHP2=iMACDGet(MAIN_LINE,2);
//
   CCIP1=iCCIGet(1);

O controle adequado é realizado para verificar se uma posição já foi aberta na barra atual, evitando assim a necessidade de checar todas as posições (pois outros EAs podem estar rodando na mesma conta de trading).

O tempo de abertura das posições é controlado na função OnTradeTransaction. Caso a posição tenha sido fechada, o tempo de abertura será redefinido:

//+------------------------------------------------------------------+
//| Função TradeTransaction                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- obter o tipo de transação como valor de enumeração 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- se a transação for resultado da adição da transação na história
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      long     deal_time         =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_time=HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
        }
      else
         return;
      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
        {
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            m_last_close_time=(datetime)deal_time;
           }
         else if(deal_entry!=DEAL_ENTRY_OUT)
           {
            m_last_close_time=0;
           }
        }
     }
  }

Publicações relacionadas

Comentário (0)