Como adicionar Takeprofit sem alterar as funcionalidades pré existentes do meu EA?

Para adicionar comentários, por favor Faça o login ou registrar
marcos4325
14
marcos4325  

Eu tenho umm código de um EA porém ele não o takeprofit implementado 

Gostaria de coloca-lo da maneira mais fácil de forma que não altere as outras funcionalidades

Vinicius de Oliveira
2516
Vinicius de Oliveira  
marcos4325:


//+------------------------------------------------------------------+
//|                                                        MM EA.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#define IdentificadorEA  101

//--- Input parameters - parâmetros do Expert Advisor que podem ser alterados quando se executa o dito.
extern double Lotes      = 0.1;
extern int    MMlenta    = 40;
extern int    MMrapida   = 5;
extern int    StopLoss   = 300;
extern int    TakeProfit = 30;
extern bool   MMfechar   = false;   // Fechar no cruzamento das MMs (true / false)

//---
datetime LastTradeBarTime;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- Necessário para controlar se estamos numa nova barra
   LastTradeBarTime = Time[1]; 
   
   //---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   //--- Se existem trades abertos, tem de os fechar
   if(OrdersTotal() > 0) {FecharTodosTrades();}
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //--- 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;} // 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) 
        {
         //--- Verifica se existem posições abertas e se devem ser fechadas
         if(OrdersTotal() > 0 && MMfechar) {FecharTodosTrades();}

         //--- Abre um trade longo
         resposta = OrderSend(Symbol(), OP_BUY, Lotes, Ask, 3, Ask - StopLoss * Point, Ask + TakeProfit * Point, "mm exemplo buy", IdentificadorEA, 0, clrBlue);
        }

      //--- Verifica se existiu um cruzamento da MM rápida abaixo da MM lenta
      if(vMMrapida1 > vMMlenta1 && vMMrapida0 < vMMlenta0)
        {
         //--- Verifica se existem posições abertas e se devem ser fechadas
         if(OrdersTotal() > 0 && MMfechar) {FecharTodosTrades();}

         //--- Abre um trade curto
         resposta = OrderSend(Symbol(), OP_SELL, Lotes, Bid, 3, Bid + StopLoss * Point, Bid - TakeProfit * Point, "mm exemplo sell", IdentificadorEA, 0, clrRed);
        }
     }
  }
//+------------------------------------------------------------------+
//| Função que fecha todos os trades existentes                      |
//+------------------------------------------------------------------+
void FecharTodosTrades()
  {
   bool rec;

   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)
           {rec = OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrWhite);}
         else if(OrderType() == OP_SELL)
           {rec = OrderClose(OrderTicket(), OrderLots(), Ask, 3, clrWhite);}
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert End                                                       |
//+------------------------------------------------------------------+
Para adicionar comentários, por favor Faça o login ou registrar