MQL5: CiADXWilder with long Refresh() delay, resulting in buffer data errors

 

Hi, I'm just running this simple service code using MetaQuotes server and CiADXWilder class (https://www.mql5.com/en/docs/standardlibrary/technicalindicators/trendindicators/ciadxwilder), but it is not working properly:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2020, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property service
#include <Indicators\Indicators.mqh>
void OnStart()
  {
   Print("MQL5 build    : ",__MQL5BUILD__);
   Print("Terminal build: ",TerminalInfoInteger(TERMINAL_BUILD));
   CiADXWilder ciADXWilder;
   if(!ciADXWilder.Create("EURUSD",PERIOD_W1,32))
     {
      Print("Error creating CiADXWilder");
      return;
     }
   Print(TimeCurrent());
   ciADXWilder.Refresh(OBJ_PERIOD_W1);

   Print("Total number of bars: ",SeriesInfoInteger("EURUSD",PERIOD_W1,SERIES_BARS_COUNT));
   Print("First date          : ",(datetime)SeriesInfoInteger("EURUSD",PERIOD_W1,SERIES_FIRSTDATE));
   Print("Last date           : ",(datetime)SeriesInfoInteger("EURUSD",PERIOD_W1,SERIES_LASTBAR_DATE));
   Print("First date in server: ",(datetime)SeriesInfoInteger("EURUSD",PERIOD_W1,SERIES_SERVER_FIRSTDATE));
   Print("First date in client: ",(datetime)SeriesInfoInteger("EURUSD",PERIOD_W1,SERIES_TERMINAL_FIRSTDATE));
   Print("Symbol synchronized : ",(bool)SeriesInfoInteger("EURUSD",PERIOD_W1,SERIES_SYNCHRONIZED));

   Print(TimeCurrent());
   Print("Main : ",dCheckBufferData("Main",ciADXWilder.Main(1)));
   Print("Plus : ",dCheckBufferData("Plus",ciADXWilder.Plus(1)));
   Print("Minus: ",dCheckBufferData("Minus",ciADXWilder.Minus(1)));
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
inline double dCheckBufferData(const string strVarName,const double dData)
  {
   if(dData <= 0.0 || dData == EMPTY_VALUE || dData >= DBL_MAX || dData <= -DBL_MAX)
     {
      Print(strVarName," data error: ",dData);
      return 0.0;
     }
   Print(strVarName," data OK   : ",dData);
   return dData;
  }
//+------------------------------------------------------------------+

Here are the results:

2024.08.29 13:08:40.937 IndicatorTest   MQL5 build    : 4482
2024.08.29 13:08:40.937 IndicatorTest   Terminal build: 4482
2024.08.29 13:08:40.938 IndicatorTest   2024.08.29 19:08:39
2024.08.29 13:11:01.200 IndicatorTest   Total number of bars: 6
2024.08.29 13:11:01.200 IndicatorTest   First date          : 2024.07.21 00:00:00
2024.08.29 13:11:01.200 IndicatorTest   Last date           : 2024.08.25 00:00:00
2024.08.29 13:11:01.200 IndicatorTest   First date in server: 1970.01.01 00:00:00
2024.08.29 13:11:01.200 IndicatorTest   First date in client: 2024.07.19 00:00:00
2024.08.29 13:11:01.200 IndicatorTest   Symbol synchronized : true
2024.08.29 13:11:01.200 IndicatorTest   2024.08.29 19:11:00
2024.08.29 13:11:01.200 IndicatorTest   Main data error: 1.7976931348623157e+308
2024.08.29 13:11:01.200 IndicatorTest   Main : 0.0
2024.08.29 13:11:01.200 IndicatorTest   Plus data error: 1.7976931348623157e+308
2024.08.29 13:11:01.200 IndicatorTest   Plus : 0.0
2024.08.29 13:11:01.200 IndicatorTest   Minus data error: 1.7976931348623157e+308
2024.08.29 13:11:01.200 IndicatorTest   Minus: 0.0

It takes almost 3 minutes and return data errors.

I could trace its delay to line #86 from .\MQL5\Include\Indicators\Indicator.mqh: (if(CopyBuffer(handle,num,-m_offset,1,array)>0 && m_data_total>0))


Any thoughts?

Thank you.

Felipe