How to speed up retrieving data on MovingAverage?

 

Hi,


I have to search signals on an open group of symbols and when I try to retrieve MovingAverage value by iMA and subsequent call to CopyBuffer I have to wait a lot of time and sometimes happen an abnormal termination.

Isthere an efficient way to retrieve moving average value of generic symbol?

I have written two routines, the first calls the second one. The last routine has two parameters:


//+------------------------------------------------------------------+
void SignalFinder()
{

   int iSymbols = SymbolsTotal(true);

   for(int i = 0; i<iSymbols; i++)
     {
      string sSymbol = SymbolName(i,true);

         if(TF_M15 == true)SearchSignal(sSymbol,PERIOD_M15);
         if(TF_M30 == true)SearchSignal(sSymbol,PERIOD_M30);
         if(TF_H1 == true)SearchSignal(sSymbol,PERIOD_H1);
         if(TF_H4 == true)SearchSignal(sSymbol,PERIOD_H4);
         if(TF_Daily == true)SearchSignal(sSymbol,PERIOD_D1);
      
     }
   return;

}

//---------------------------------------------------------+



void SearchSignal(string Sym, ENUM_TIMEFRAMES TimeFrame)


{



...

   double  dOpen1 = iOpen(Sym,TimeFrame,1);

   double dClose1 = iClose(Sym,TimeFrame,1);

   double   dLow1 = iLow(Sym,TimeFrame,1);

   double  dHigh1 = iHigh(Sym,TimeFrame,1);


   int Average = iMA(Sym, TimeFrame, AveragePeriods, 0, AverageType, PRICE_CLOSE);

   if(Average==INVALID_HANDLE)return;

   

   double  aAvg[];



   ArraySetAsSeries(aAvg, true);

   if(CopyBuffer(Average, 0, 0, BarsTrendRange+1, aAvg)==-1)return;

   int iCount = 0;
   for(int i = 1; i<=BarsTrendRange; i++)
   {
   	if(aAvg[i]>aAvg[i+1])iCount++;
      	if(aAvg[i]<aAvg[i+1])iCount--;
   }

	....
}

The code is very fast till CopyToBuffer istruction.


Thanks to who will help me.


 
void SearchSignal(string Sym, ENUM_TIMEFRAMES TimeFrame){
⋮
   int Average = iMA(Sym, TimeFrame, AveragePeriods, 0, AverageType, PRICE_CLOSE);

Perhaps you should read the manual, especially the examples.
   How To Ask Questions The Smart Way. 2004
      How To Interpret Answers.
         RTFM and STFW: How To Tell You've Seriously Screwed Up.

They all (including iCustom) return a handle (an int). You get that in OnInit. In OnTick (after the indicator has updated its buffers), you use the handle, shift and count to get the data.
          Technical Indicators - Reference on algorithmic/automated trading language for MetaTrader 5
          Timeseries and Indicators Access / CopyBuffer - Reference on algorithmic/automated trading language for MetaTrader 5
          How to start with MQL5 - General - MQL5 programming forum - Page 3 #22 2020.03.08
          How to start with MQL5 - MetaTrader 5 - General - MQL5 programming forum - Page 7 #61 2020.07.05
          How to call indicators in MQL5 - MQL5 Articles 12 March 2010

Reason: