I can not do backtest with this EA, please help to fix the error.

 
//+------------------------------------------------------------------+
//|                                          RSI_MACD_Stochastic.mq4 |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int buytrade = 0, selltrade =0, ticket;//biến buytrade và selltrade để kiểm soát vào lệnh 1 lần khi có tín hiệu
extern int MagicNumber = 12;
extern double minLots = 0.01, maxLots = 0.2;
bool IsBuySignal()// Kiểm tra có phải tín hiệu mua hay không
{
    double macd_main = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
    double macd_signal = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1);
    double macd_main_1 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 2);
    double macd_signal_1 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 2);
    double rsi = iRSI(NULL, 0, 14, PRICE_CLOSE, 1);
    double stochastic_main = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);
    double stochastic_signal = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);

    if (macd_signal < 0 && macd_signal > macd_main && macd_signal_1 < macd_main_1 && rsi > 50 && stochastic_signal > stochastic_main)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool IsSellSignal()// Hàm kiểm tra tín hiệu bán hay không
{
    double macd_main = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
    double macd_signal = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1);
    double macd_main_1 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 2);
    double macd_signal_1 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 2);
    double rsi = iRSI(NULL, 0, 14, PRICE_CLOSE, 1);
    double stochastic_main = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);
    double stochastic_signal = iStochastic(NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);

    if (macd_signal > 0 && macd_signal < macd_main && macd_signal_1 > macd_main_1 && rsi < 50 && stochastic_signal < stochastic_main)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void Closeallprofitorder()//Đóng tất cả các lệnh có lợi nhuận
{
   // Tính tổng lợi nhuận của lệnh bán đang mở
   double totalSellProfit = 0;
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderType() == OP_SELL)
         {
            totalSellProfit += OrderProfit();
         }
      }
   }

   // Kiểm tra tổng lợi nhuận của lệnh bán và đóng lệnh nếu có lợi nhuận
   if(totalSellProfit > 0)
   {
      for(int i = 0; i < OrdersTotal(); i++)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderType() == OP_SELL)
            {
               OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 10);
            }
         }
      }
   }
   // Nếu tổng lợi nhuận của lệnh bán <0 thì kiểm tra từng lệnh và đóng lệnh nếu có lợi nhuận
   else if(totalSellProfit < 0)
   {
      for(int i = 0; i < OrdersTotal(); i++)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderType() == OP_SELL && OrderProfit() > 0)
            {
               OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 10);
            }
         }
      }
   }
// Tính tổng lợi nhuận của lệnh mua đang mở
   double totalBuyProfit = 0;
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderType() == OP_BUY)
         {
            totalBuyProfit += OrderProfit();
         }
      }
   }

   // Kiểm tra tổng lợi nhuận của lệnh mua và đóng lệnh nếu có lợi nhuận
   if(totalBuyProfit > 0)
   {
      for(int i = 0; i < OrdersTotal(); i++)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderType() == OP_BUY)
            {
               OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 10);
            }
         }
      }
   }
   // Nếu tổng lợi nhuận của lệnh mua <0 thì kiểm tra từng lệnh và đóng lệnh nếu có lợi nhuận
   else if(totalBuyProfit < 0)
   {
      for(int i = 0; i < OrdersTotal(); i++)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderType() == OP_BUY && OrderProfit() > 0)
            {
               OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 10);
            }
         }
      }
   }
   return;
}

double PendingBuyLots ()// Tính tổng số lots của các lệnh Buy đang mở
{  double BuyLots = 0;
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderType() == OP_BUY)
         {
            BuyLots += OrderLots();
         }
      }
   }
   return (BuyLots);
}

double PendingSellLots ()// Tính tổng số lots của các lệnh Sell đang mở
{  double SellLots = 0;
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderType() == OP_SELL)
         {
            SellLots += OrderLots();
         }
      }
   }
   return (SellLots);
}

double Lots_Buy ()//Tính số lots vào lệnh Buy
{
   double LottoBuy = 0;
   if(PendingSellLots() > (2 * PendingBuyLots()))
   {
      LottoBuy = PendingSellLots() - PendingBuyLots();
   }
   else
   {
      LottoBuy = PendingBuyLots();
   }

   if(LottoBuy > 0)
   {
      if(LottoBuy < minLots)
      {
         LottoBuy = minLots;
      }
      else if(LottoBuy > maxLots)
      {
         LottoBuy = maxLots;
      }
   }
   return (LottoBuy);
}

double Lots_Sell ()// Tính số lots vào lệnh Sell
{
   double LottoSell = 0;
   if(PendingBuyLots() > (2 * PendingSellLots()))
   {
      LottoSell = PendingBuyLots() - PendingSellLots();
   }
   else
   {
      LottoSell = PendingSellLots();
   }

   if(LottoSell > 0)
   {
      if(LottoSell < minLots)
      {
         LottoSell = minLots;
      }
      else if(LottoSell > maxLots)
      {
         LottoSell = maxLots;
      }
   }
   return (LottoSell);
}
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
if (IsBuySignal())// Vào lệnh khi có tín hiệu mua
{
   if(buytrade==0)
   {
      Closeallprofitorder();
      double solotbuy = Lots_Buy ();
      ticket = OrderSend(Symbol(),OP_BUY,solotbuy,Ask,10,0,0,NULL,0,0,clrRed);
      if(ticket>0) buytrade = 1; 
   }
}
else buytrade = 0;

if (IsSellSignal())// Vào lệnh khi có tín hiệu bán
{
   if(selltrade==0)
   {
      Closeallprofitorder();
      double solotsell = Lots_Sell ();
      ticket = OrderSend(Symbol(),OP_SELL,solotsell,Bid,10,0,0,NULL,0,0,clrGreen);
      if(ticket>0) selltrade = 1; 
   }
}
else selltrade = 0;   
  }
//+------------------------------------------------------------------+

Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
  • 2023.02.24
  • www.mql5.com
MQL5: linguagem de estratégias de negociação inseridas no Terminal do Cliente MetaTrader 5. A linguagem permite escrever seus próprios sistemas automáticos de negócios, indicadores técnicos, scripts e bibliotecas de funções
 

Please explain in more detail the nature of the issue. Also tell us what messages are displayed in the Strategy Tester Journal.