Esdras C. Prado

MQL4 Experts

Trabalho concluído

Tempo de execução 5 dias
Comentário do cliente
Muito prestativo e atencioso, e o trabalho dele pra mim foi muito bem elaborado atendendo ao que foi proposto. Obrigado João!

Termos de Referência

Olá! Gostaria de saber se alguém se habilita e quanto cobra para acrescentar um TrailingStop neste EA que posto logo abaixo e que já está pronto, só não possui o Trailing!

//+------------------------------------------------------------------+
//|                                        Exemplo médias móveis.mq4 |
//|                                                              XTB |
//|                                                                  |
//+------------------------------------------------------------------+

#define IdentificadorEA  101

#property copyright "XTB"
#property link      ""

//---- Input parameters - parâmetros do Expert Advisor que podem ser alterados quando se executa o dito.
extern double       Lotes=0.1;
extern int       MMlenta=50;
extern int       MMrapida=20;

//-------------------------------------------------------------------------------------------------

datetime LastTradeBarTime;

//-------------------------------------------------------------------------------------------------
// init, função executada quando o EA se inicia ou reinicia

int init()
  {
   // Necessário para controlar se estamos numa nova barra
   LastTradeBarTime = Time[1]; 
   return(0);
  }


//-------------------------------------------------------------------------------------------------
// start, função executada a cada tick recebido pelo EA 

int start()
  {

  // Variáveis temporárias, renovadas a cada chamada do EA

  double vMMrapida0;                 // MM rápida da última barra 
  double vMMrapida1;                 // MM rápida da penúltima barra 
  double vMMlenta0;                  // MM lenta da última barra
  double vMMlenta1;                  // MM lenta da penúltima barra
  int resposta;                      // Variável que obterá a resposta do terminal quando envia uma ordem

  // Verifica se estamos no início de uma barra e apenas processa as instruções se isso for verdade
  if (LastTradeBarTime == Time[0]) 
     return(0); // Não é o primeiro tick de uma nova barra, por isso sai
  else 
  {
     LastTradeBarTime = Time[0]; // continua

     // Valores das médias móveis na barra que acabou de terminar, e na imediatamente anterior
     vMMrapida0=iMA(Symbol(),0,MMrapida,0,MODE_SMA,PRICE_CLOSE,1); // Obtém o valor da MM rápida da barra que terminou
     vMMrapida1=iMA(Symbol(),0,MMrapida,0,MODE_SMA,PRICE_CLOSE,2); // Obtém o valor para a MM rápida da barra anterior
     vMMlenta0=iMA(Symbol(),0,MMlenta,0,MODE_SMA,PRICE_CLOSE,1);   // Obtém o valor da MM lenta da barra que terminou
     vMMlenta1=iMA(Symbol(),0,MMlenta,0,MODE_SMA,PRICE_CLOSE,2);   // Obtém o valor para a MM lenta da barra anterior

     // Verifica se existiu um cruzamento da MM rápida acima da MM lenta
     if (vMMrapida1<vMMlenta1 && vMMrapida0>vMMlenta0) 
     {
        // Se já existem trades abertos, tem de os fechar
        if (OrdersTotal() > 0) FecharTodosTrades();

        // Abre um trade longo
        resposta = OrderSend(Symbol(), OP_BUY, Lotes, NormalizeDouble(Ask,Digits), 3, 0, 0, "mm exemplo buy", IdentificadorEA, 0, Blue);
     }

     // Verifica se existiu um cruzamento da MM rápida abaixo da MM lenta
     if (vMMrapida1>vMMlenta1 && vMMrapida0<vMMlenta0) 
     {
        // Se já existem trades abertos, tem de os fechar
        if (OrdersTotal() > 0) FecharTodosTrades();

        // Abre um trade curto
        resposta = OrderSend(Symbol(), OP_SELL, Lotes, NormalizeDouble(Bid,Digits), 3, 0, 0, "mm exemplo sell", IdentificadorEA, 0, Red);
     }
  }
  return(0);
}


//-------------------------------------------------------------------------------------------------
// deinit, função executada quando o EA termina

int deinit()
  {
   // Se existem trades abertos, tem de os fechar
   if (OrdersTotal() > 0) FecharTodosTrades();
   return(0);
  }


//-------------------------------------------------------------------------------------------------
// Função que fecha todos os trades existentes

int FecharTodosTrades()
  {
   for(int i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false)        break;
      
      // A função vai fechar todas as ordens que sejam deste EA e sobre o símbolo corrente
      if(OrderMagicNumber() == IdentificadorEA && OrderSymbol() == Symbol()) 
      {
         if(OrderType()==OP_BUY)
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,White);
         if(OrderType()==OP_SELL)
            OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,White);
      }
   } 
   return(0);
  }


// FIM
//-------------------------------------------------------------------------------------------------


Respondido

1
Desenvolvedor 1
Classificação
(414)
Projetos
478
40%
Arbitragem
7
43% / 29%
Expirado
16
3%
Livre
2
Desenvolvedor 2
Classificação
(13)
Projetos
35
71%
Arbitragem
2
0% / 0%
Expirado
11
31%
Trabalhando
Publicou: 1 código
3
Desenvolvedor 3
Classificação
(89)
Projetos
139
24%
Arbitragem
34
32% / 44%
Expirado
59
42%
Trabalhando
4
Desenvolvedor 4
Classificação
(4)
Projetos
5
40%
Arbitragem
0
Expirado
3
60%
Livre
5
Desenvolvedor 5
Classificação
(1125)
Projetos
1813
61%
Arbitragem
14
64% / 7%
Expirado
84
5%
Livre

Informações sobre o projeto

Orçamento
20 - 30 USD