Início Negociação Sistemática Postagem

Como Criar um EA Simples Usando o Indicador DeMarker no MetaTrader 4

Anexo
32418.zip (1.46 KB, Baixar 2 vezes)

Olá, trader! Hoje quero compartilhar uma experiência que tive quando comecei a explorar o uso de Expert Advisors (EAs) no meu trading. Este é um dos EAs mais simples que já utilizei, e espero que você possa aproveitar essa dica. Após ler, não esqueça de deixar sua avaliação!

Este EA é projetado para operar em um único par de moedas. As configurações completas, como período, lotes, stop loss e take profit, estão disponíveis no menu de propriedades.


extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT;// Selecionar o Período
extern int period = 8;// Período DeMarker
extern double lt = 0.01;// Lotes
extern int sl = 100;// Stop Loss
extern int tp = 100;// Take Profit
extern double OB = 0.7;// Sobrevendido
extern double OS = 0.3;// Sobrecomprado
extern bool OPENBAR = false;// Operar no preço de abertura de nova barra

Aqui está o segredo: eu divido as variáveis em três partes:

  • Dados | Período
  • Ordens
  • Pares
//+------------------------------------------------------------------+

//-- período | indicador
double dmrk[5];
int signal = -1;//-- 0.compra 1.venda
int hold = 0;

//-- ordens
int ticket = 0;
double lot = 0.0;
int typ = -1;

//-- pares
datetime t1 = 0;
bool newbar = false;
bool entry = false;

//+------------------------------------------------------------------+

Na função OnInit(), inicializo o array do indicador DeMarker e verifico o tamanho mínimo de lotes que o corretor exige para operar.

//+------------------------------------------------------------------+
//|                                                                      |
//+------------------------------------------------------------------+
void OnInit()
  {
    ArrayInitialize(dmrk,0.0);
    //---
      const double test_lot = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
      if(lt < test_lot) lt = test_lot;
  }

Na função OnTick(), realizamos o cálculo do indicador e determinamos os sinais de compra e venda.

//---------------------------------------------------------------------------
   signal = -1;
//---------------------------------------------------------------------------

//---cálculo
   for(int i = 0; i < ArraySize(dmrk); i++)
     {
       dmrk[i] = iDeMarker(Symbol(), TF, period, i);
     }
//---

   if(dmrk[1] > OB)
     {
       hold = 1;//definir
     }
   else
      if(dmrk[1] < OS)
        {
         hold = -1;//definir
        }
      else
        {
         hold = 0;//resetar
        }

   if(hold == 1)
     {
      if(dmrk[0] < OB && dmrk[1] > OB)
        {
         signal = OP_SELL;
        }
     }
   if(hold == -1)
     {
      if(dmrk[0] > OS && dmrk[1] < OS)
        {
         signal = OP_BUY;
        }
     }

Para abrir um sinal de compra ou venda...

//---------------------------------------------------------------------------
   if(signal != -1)
      if(newbar == true)
        if(entry == false)//portão aberto
           {
            //---
             entry = true;//definir
            //---

            if(signal == OP_BUY)
              {
               ticket = OrderSend(Symbol(), OP_BUY, lt, Ask, (int)((Ask-Bid)/Point),
                                   sl > 0?Bid-sl*Point:0.0,
                                   tp > 0?Bid+tp*Point:0.0,
                                   EAName+":sinal= "+IntegerToString(signal)+":hold= "+IntegerToString(hold),
                                   EANumber,
                                  0,
                                   clrBlue);
               signal = -1;
               //hold =0;
              }//resetar
            else
               if(signal == OP_SELL)
                 {
                   ticket = OrderSend(Symbol(), OP_SELL, lt, Bid, (int)((Ask-Bid)/Point),
                                     sl > 0?Ask+sl*Point:0.0,
                                     tp > 0?Ask-tp*Point:0.0,
                                     EAName+":sinal= "+IntegerToString(signal)+":hold= "+IntegerToString(hold),
                                   EANumber,
                                     0,
                                     clrRed);
                   signal = -1;
                     //hold =0;
                 }//resetar sinal

           }

Agora, para o fechamento...

   if(entry == true) // fechamento
     {

      if(OrderSelect(ticket, SELECT_BY_TICKET))
        {
         if(OrderCloseTime() == 0)//-- ordem ativa
           {
            /*  todo condição para fechar  */
             //entry = false;
           }
         //else
            if(OrderCloseTime() != 0)//--  fechar por 1. manual 2. sl/tp 3. ea
              {
               entry = false;//resetar entrada
              }
        }
     }



Se você está começando a explorar o mundo dos EAs, essa é uma ótima oportunidade para entender como os indicadores podem ser usados para automatizar suas operações. Espero que tenha gostado da dica e que ela possa te ajudar em suas negociações!

Publicações relacionadas

Comentário (0)