Problema com EA - No memory in OnTick function

Paulo Ricardo  

Prezados,
Meu EA está com problemas nas otimizações. Trava o computador e também pelo Google Coud. Achava que era o próprio MT5, porém percebi que só ocorre com meu EA.

Após pesquisar, percebi que o erro de falta de memória é devido a armazenamento em array.

Alguém poderia explicar ou me ajudar?
Abaixo código da função OnInit

int OnInit()
  {
   Comment("");
   if(!LicenseValidation())
      return(INIT_FAILED);
   sy.Name(Symbol());
   sy.Refresh();
   string pref=(MQLInfoInteger(MQL_TESTER)) ? "test" : "";
   expname=pref+" "+MQLInfoString(MQL_PROGRAM_NAME);
   compos=expname+" ["+IntegerToString(Magic)+"]";
   rulang=(StringFind(term.Language(),"Russian",0)>-1) ? true : false;
   isinit=true;
   test=(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_OPTIMIZATION));
   ch.Attach();
   EventSetTimer(1);

   trd.SetDeviationInPoints(Slipage);
   trd.SetExpertMagicNumber(Magic);
   trd.SetMarginMode();
   if(IsFillingTypeAllowed(SYMBOL_FILLING_FOK,sy.TradeFillFlags()))
      trd.SetTypeFilling(ORDER_FILLING_FOK);
   else if(IsFillingTypeAllowed(SYMBOL_FILLING_IOC,sy.TradeFillFlags()))
      trd.SetTypeFilling(ORDER_FILLING_IOC);
   else
      trd.SetTypeFilling(ORDER_FILLING_RETURN);

   nameB.Shutdown();
   for(int i=0; i<2; i++)
      nameB.Add(NULL);
   sig.Shutdown();
   for(int i=0; i<2; i++)
      sig.Add(false);
   nbar.SetSymbolPeriod(sy.Name(),WorkTF);
   if(ShowInd && PeriodSeconds(PERIOD_CURRENT)!=PeriodSeconds(WorkTF))
      ch.SetSymbolPeriod(sy.Name(),WorkTF);

   MqlParam    par[];
   int   c=0;  ArrayResize(par,c+1);   par[c].type=TYPE_STRING;   par[c].string_value="::Indicators\\IndicatorSignal.ex5";
   c++;        ArrayResize(par,c+1);   par[c].type=TYPE_INT;      par[c].integer_value=STSssp;
   c++;        ArrayResize(par,c+1);   par[c].type=TYPE_INT;      par[c].integer_value=STSrisk;
   c++;        ArrayResize(par,c+1);   par[c].type=TYPE_INT;      par[c].integer_value=STSbar;
   c++;        ArrayResize(par,c+1);   par[c].type=TYPE_COLOR;    par[c].integer_value=STScolorB;
   c++;        ArrayResize(par,c+1);   par[c].type=TYPE_COLOR;    par[c].integer_value=STScolorS;
   c++;        ArrayResize(par,c+1);   par[c].type=TYPE_INT;      par[c].integer_value=STSwidth;
   cus.NumBuffers(3);
   cus.Create(Symbol(),PERIOD_CURRENT,IND_CUSTOM,c+1,par);
   cus.Refresh();
   if(ShowInd)
      cus.AddToChart(0,0);
   TesterHideIndicators(false);

   SBE   sbe[5];
   sbe[0].start=BEstart1;   sbe[0].distance=BEdistance1;
   sbe[1].start=BEstart2;   sbe[1].distance=BEdistance2;
   sbe[2].start=BEstart3;   sbe[2].distance=BEdistance3;
   sbe[3].start=BEstart4;   sbe[3].distance=BEdistance4;
   sbe[4].start=BEstart5;   sbe[4].distance=BEdistance5;
   c=-1;
   for(int i=0; i<ArrayRange(sbe,0); i++)
     {
      if(sbe[i].start==NULL)
         continue;
      c++;
      ArrayResize(be,c+1);
      be[c].start=sbe[i].start;
      be[c].distance=sbe[i].distance;
     }

   Info();
   return(INIT_SUCCEEDED);
  }

Caso necessário adicionar todo o código, adicionarei, mas pelo que notei as funções de array estão aí. Existe algo que pode ser melhorado para não travar? Ouvi falar em zerar memória.

Lucas Tavares  

Obrigado!

Experimenta re compilar ele, dá F4 no mt5 e dá F7 no código aberto.

Razão: