My EA close positions earlier than expected

 

Hi,


I created a EA using Expert Advisor (generate), when i use backtest everything works fine, tp and sl works perfectly, but when i use the EA in the real market everything stops working. The EA opens a position and adds tp and sl but before the  trade ends it starts another one but this time it does not add tp and sl, it keeps opening new positions but without respecting the sl and tp or adding them.

Is there someway to fix this? I would like the EA to do only one trade at a time, add and respect tp and sl, and again, it does everything it is supposed to do using backtest, but in real market everything is a mess.


I did not wrote the code, just used the Expert Advisor(generate).

//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalMA.mqh>
#include <Expert\Signal\SignalMACD.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title            ="EA";     // Document name
ulong                    Expert_MagicNumber      =31589;       // 
bool                     Expert_EveryTick        =false;       // 
//--- inputs for main signal
input int                Signal_ThresholdOpen    =10;          // Signal threshold value to open [0...100]
input int                Signal_ThresholdClose   =10;          // Signal threshold value to close [0...100]
input double             Signal_PriceLevel       =0.0;         // Price level to execute a deal
input double             Signal_StopLevel        =50.0;        // Stop Loss level (in points)
input double             Signal_TakeLevel        =50.0;        // Take Profit level (in points)
input int                Signal_Expiration       =4;           // Expiration of pending orders (in bars)
input int                Signal_MA_PeriodMA      =9;           // Moving Average(9,0,MODE_SMA,...) Period of averaging
input int                Signal_MA_Shift         =0;           // Moving Average(9,0,MODE_SMA,...) Time shift
input ENUM_MA_METHOD     Signal_MA_Method        =MODE_SMA;    // Moving Average(9,0,MODE_SMA,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_MA_Applied       =PRICE_CLOSE; // Moving Average(9,0,MODE_SMA,...) Prices series
input double             Signal_MA_Weight        =1.0;         // Moving Average(9,0,MODE_SMA,...) Weight [0...1.0]
input int                Signal_MACD_PeriodFast  =12;          // MACD(12,24,9,PRICE_CLOSE) Period of fast EMA
input int                Signal_MACD_PeriodSlow  =24;          // MACD(12,24,9,PRICE_CLOSE) Period of slow EMA
input int                Signal_MACD_PeriodSignal=9;           // MACD(12,24,9,PRICE_CLOSE) Period of averaging of difference
input ENUM_APPLIED_PRICE Signal_MACD_Applied     =PRICE_CLOSE; // MACD(12,24,9,PRICE_CLOSE) Prices series
input double             Signal_MACD_Weight      =1.0;         // MACD(12,24,9,PRICE_CLOSE) Weight [0...1.0]
//--- inputs for money
input double             Money_FixLot_Percent    =10.0;        // Percent
input double             Money_FixLot_Lots       =5.0;         // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalMA
   CSignalMA *filter0=new CSignalMA;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodMA(Signal_MA_PeriodMA);
   filter0.Shift(Signal_MA_Shift);
   filter0.Method(Signal_MA_Method);
   filter0.Applied(Signal_MA_Applied);
   filter0.Weight(Signal_MA_Weight);
//--- Creating filter CSignalMACD
   CSignalMACD *filter1=new CSignalMACD;
   if(filter1==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter1");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter1);
//--- Set filter parameters
   filter1.PeriodFast(Signal_MACD_PeriodFast);
   filter1.PeriodSlow(Signal_MACD_PeriodSlow);
   filter1.PeriodSignal(Signal_MACD_PeriodSignal);
   filter1.Applied(Signal_MACD_Applied);
   filter1.Weight(Signal_MACD_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedLot *money=new CMoneyFixedLot;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set money parameters
   money.Percent(Money_FixLot_Percent);
   money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- ok
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
   
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+

Using backtest, this is how it looks.

This is how it looks using backtest

This is real market

rela

 
Leonardo Fernandez:

I created a EA using Expert Advisor (generate), when i use backtest everything works fine, tp and sl works perfectly, but when i use the EA in the real market everything stops working. The EA opens a position and adds tp and sl but before the  trade ends it starts another one but this time it does not add tp and sl, it keeps opening new positions but without respecting the sl and tp or adding them.

Is there someway to fix this? I would like the EA to do only one trade at a time, add and respect tp and sl, and again, it does everything it is supposed to do using backtest, but in real market everything is a mess.

I did not wrote the code, just used the Expert Advisor(generate).

Using backtest, this is how it looks.

This is real market

Without going deeper, a "patch" that might work, if you just want to prevent it from starting another trade while one is ongoing, is to add the highlighted line below:

void OnTick()
  {
   if (PositionsTotal()==0)
      ExtExpert.OnTick();
  }
 
Seng Joo Thio:

Without going deeper, a "patch" that might work, if you just want to prevent it from starting another trade while one is ongoing, is to add the highlighted line below:

You are a saint, thank you so much, it works perfectly now :D
 
How can I customized EA to enter and exit trade using my preferred Indicator.