Backtest stoping to generate randomly

 
//+------------------------------------------------------------------+
//|                                                   Investtest.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include<Trade\Trade.mqh>
CTrade trade;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

static int TotalOrders;
string MyType = "";

void OnTick()
  {


double myMovingAverage1Array[];
double myMovingAverage2Array[];
int movingAverage1Definition = iMA(_Symbol, PERIOD_CURRENT, 10, 0, MODE_EMA, PRICE_CLOSE);
int movingAverage2Definition = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_SMA, PRICE_CLOSE);


ArraySetAsSeries(myMovingAverage1Array, true);
ArraySetAsSeries(myMovingAverage2Array, true);

CopyBuffer(movingAverage1Definition, 0, 0, 3, myMovingAverage1Array);
CopyBuffer(movingAverage2Definition, 0, 0, 3, myMovingAverage2Array);
    
double myMovingAverage1Value = NormalizeDouble(myMovingAverage1Array[0], _Digits);
double myMovingAverage2Value = NormalizeDouble(myMovingAverage2Array[0], _Digits);

Print( "myMovingAverage1Value", myMovingAverage1Value);
Print( "myMovingAverage2Value", myMovingAverage2Value);
  
static datetime Old_Time;
datetime New_Time[1];
bool IsNewBar = false;

int copied = CopyTime(_Symbol, PERIOD_CURRENT, 0, 1, New_Time);
if(copied>0)
   {
      if(Old_Time != New_Time[0])
      {
         IsNewBar = true;
         Old_Time = New_Time[0];
         
      }
   }

double ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
Print("ask", ask);

double bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
Print("bid", bid);


 if (IsNewBar==true && TotalOrders == 0) // Check if it's a new bar and no orders are open
    {
        if (myMovingAverage1Value < myMovingAverage2Value)
        {
            trade.Buy(0.01, NULL, ask, 0, 0, "order succeeded");
            TotalOrders=1;
        }
        else if (myMovingAverage1Value > myMovingAverage2Value)
        {
            trade.Sell(0.01, NULL, bid, 0, 0, "order succeeded");
            TotalOrders=1;
        }
     }
   ClosePositions(myMovingAverage1Value, myMovingAverage2Value);
  }
 void ClosePositions(double myMovingAverage1Value, double myMovingAverage2Value)
{
    for (int i = PositionsTotal() - 1; i >= 0; i--)
    {
        int ticket = PositionGetTicket(i);
        if (PositionSelectByTicket(ticket))
        {
            double entryPrice = PositionGetDouble(POSITION_PRICE_OPEN);
            int PositionType = PositionGetInteger(POSITION_TYPE);
            if (PositionType == POSITION_TYPE_BUY && myMovingAverage1Value > myMovingAverage2Value)
            {
                trade.PositionClose(ticket);
                TotalOrders = 0;
            }
            else if (PositionType == POSITION_TYPE_SELL && myMovingAverage1Value < myMovingAverage2Value)
            {
                trade.PositionClose(ticket);
                TotalOrders = 0;
            }
        }
    }
}
Hello, this EA works for a few days in the backtest and then data doesn't continue, orders don't open and finally backtest stops, any help? Here as you can see, i asked the backtest until march 18 and it stops at march 4
 

I had a quick glance and I see these issues:

1. Do not initiate indicator handles in OnTick. Initiate them once in OnInit

2. Do check the CopyBuffer result before proceeding... It might not read the indicator values for several reasons.