EA lançando ordens encima de outras encerrando a anterior

 

Bom dia / Boa Tarde 


Alguem poderia me ajudar? 


Estou com um EA Simples de MACD porém observei que na conta real o mesmo quando abre ordem, encerra a mesma ordem reabrindo outra gerando uma quantidade sucessiva de negociação encima da mesma barra do Candle.  

É como se o EA tivesse observando a oportunidade pelo sinal emitisse novamente a requisição sem levar em consideração que já ha uma aberta.  


Aba*ixo indico o código fonte do EA e adianto que sou ainda leigo no assunto. A minha ideia é colocar um limitador de ordens nele ou corrigir essa falha que não aconteceu na conta demo. *************

//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
#include <Expert\Signal\SignalMACD.mqh>
#include <Expert\Trailing\TrailingNone.mqh>
#include <Expert\Money\MoneyNone.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Inp_Expert_Title            ="ExpertMACD";
int          Expert_MagicNumber          =10981;
bool         Expert_EveryTick            =false;
//--- inputs for signal
input int    Inp_Signal_MACD_PeriodFast  =12;
input int    Inp_Signal_MACD_PeriodSlow  =24;
input int    Inp_Signal_MACD_PeriodSignal=9;
input int    Inp_Signal_MACD_TakeProfit  =50;
input int    Inp_Signal_MACD_StopLoss    =20;
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(-1);
     }
//--- Creation of signal object
   CSignalMACD *signal=new CSignalMACD;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(-2);
     }
//--- Add signal to expert (will be deleted automatically))
   if(!ExtExpert.InitSignal(signal))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing signal");
      ExtExpert.Deinit();
      return(-3);
     }
//--- Set signal parameters
   signal.PeriodFast(Inp_Signal_MACD_PeriodFast);
   signal.PeriodSlow(Inp_Signal_MACD_PeriodSlow);
   signal.PeriodSignal(Inp_Signal_MACD_PeriodSignal);
   signal.TakeLevel(Inp_Signal_MACD_TakeProfit);
   signal.StopLevel(Inp_Signal_MACD_StopLoss);
//--- Check signal parameters
   if(!signal.ValidationSettings())
     {
      //--- failed
      printf(__FUNCTION__+": error signal parameters");
      ExtExpert.Deinit();
      return(-4);
     }
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(-5);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(-6);
     }
//--- Set trailing parameters
//--- Check trailing parameters
   if(!trailing.ValidationSettings())
     {
      //--- failed
      printf(__FUNCTION__+": error trailing parameters");
      ExtExpert.Deinit();
      return(-7);
     }
//--- Creation of money object
   CMoneyNone *money=new CMoneyNone;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(-8);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(-9);
     }
//--- Set money parameters
//--- Check money parameters
   if(!money.ValidationSettings())
     {
      //--- failed
      printf(__FUNCTION__+": error money parameters");
      ExtExpert.Deinit();
      return(-10);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(-11);
     }
//--- succeed
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| Function-event handler "tick"                                    |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| Function-event handler "trade"                                   |
//+------------------------------------------------------------------+
void OnTrade(void)
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| Function-event handler "timer"                                   |
//+------------------------------------------------------------------+
void OnTimer(void)
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+
 
Gilli_freitas:

Bom dia / Boa Tarde 


Alguem poderia me ajudar? 


Estou com um EA Simples de MACD porém observei que na conta real o mesmo quando abre ordem, encerra a mesma ordem reabrindo outra gerando uma quantidade sucessiva de negociação encima da mesma barra do Candle.  

É como se o EA tivesse observando a oportunidade pelo sinal emitisse novamente a requisição sem levar em consideração que já ha uma aberta.  


Aba*ixo indico o código fonte do EA e adianto que sou ainda leigo no assunto. A minha ideia é colocar um limitador de ordens nele ou corrigir essa falha que não aconteceu na conta demo. *************

Seu EA não é simples. É de Código de terceiros. Sugiro contatar o desenvolvedor ou abrir um Job para os Freelancers.

https://www.mql5.com/pt/job

Aplicativos de negociação para o MetaTrader 5 por encomenda
Aplicativos de negociação para o MetaTrader 5 por encomenda
  • www.mql5.com
Preciso de EA, para MT5 baseado em script de indicador Open Close Cross Strategy do Tradingview, para operar no mt5, com mini-indice, dolar e Acoes B3 (mercado brasileiro). Tenho o script em anexo. Onde teria que ter tempo gráfico / Tipo operação (compra e/ou venda) - Stop loss / gain - Stop move (trailing stop) - Horário incio e encerramento...
 
Gilli_freitas:

Bom dia / Boa Tarde 


Alguem poderia me ajudar? 


Estou com um EA Simples de MACD porém observei que na conta real o mesmo quando abre ordem, encerra a mesma ordem reabrindo outra gerando uma quantidade sucessiva de negociação encima da mesma barra do Candle.  

É como se o EA tivesse observando a oportunidade pelo sinal emitisse novamente a requisição sem levar em consideração que já ha uma aberta.  


Aba*ixo indico o código fonte do EA e adianto que sou ainda leigo no assunto. A minha ideia é colocar um limitador de ordens nele ou corrigir essa falha que não aconteceu na conta demo. *************

deve ser coisa besta pra resolver, mas so olhando o codigo mesmo, o que pode ta ocorrendo é encerrando a op (antes da hora) e ai ele entra na op novamente e isso vira um loop

Razão: