Тестируем 'CopyTicks' - страница 42

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
fxsaber
11036
fxsaber  
1702 - найденные косяки CopyTicks исправили!
fxsaber
11036
fxsaber  

После удачного вызова CopyTicks в оффлайне GetLastError возвращает 4403.

fxsaber
11036
fxsaber  
Желание получить все тики кастомного символа таким образом вызывает Out of memory
CopyTicks(Symb, Ticks, COPY_TICKS_ALL, 0, UINT_MAX); // out of memory


Сделаю через CopyTicksRange, но поведение CopyTicks видится правильным изменить.

fxsaber
11036
fxsaber  
Иногда CopyTicksRange вызывает закачку БАРОВ с бородатого года: 2003.hcc и т.д.
fxsaber
11036
fxsaber  
CopyTicksRange на кастомном символе возвращает ноль. CopyTicks - норм.
MrFirst
7
MrFirst  

CopyTicks (build 1881) возвращает более старые данные, чем были запрошены, если запрашивать не свежие тики. Т.е. возвращает данные старее, чем параметр from. Баг плавающий - проявляется в разное время, поэтому написал небольшой код, который воспроизводит. Запускал в тестере на EURUSD H1, 2017.08.01 - 2018.08.01.

void OnTick()
{
   static datetime lastActivityTime = D'2017.08.01';   
   static MqlTick ticks[2000];
   static const uint requestedCount = 2000;
   datetime dt[1];
   CopyTime(NULL, PERIOD_CURRENT, 0, 1, dt);
   if (lastActivityTime >= dt[0]) {
      return;
   }
   lastActivityTime = TimeCurrent();
   
   int zero = 0;
   int idx = 0;
   do {
      ++idx;
      CopyTime(NULL, PERIOD_CURRENT, idx, 1, dt);
      if (dt[0] <= D'2017.08.01') break;
      Print("dt[0]=", dt[0]);
      ulong from = 1000 * dt[0];
      int cnt = CopyTicks(Symbol(), ticks, COPY_TICKS_INFO, from, requestedCount);
      if (cnt < 1) {
         Print("Error in CopyTicks");
         return;
      }
      Print("cnt=", cnt);
      for (int i = 0; i < cnt; ++i) {
         if (ticks[i].time_msc < from) {
            Print("ERROR: i=", i, ", ticks[i].time_msc=", ticks[i].time_msc, " (", ticks[i].time, ")");
            i = i / zero;
         }
      }
      Print("done");
   } while(true);
}

Вот выхлоп:

2018.10.17 21:31:26.221 2017.08.01 12:00:00   dt[0]=2017.08.01 03:00:00

2018.10.17 21:31:26.221 2017.08.01 12:00:00   cnt=2000

2018.10.17 21:31:26.221 2017.08.01 12:00:00   ERROR: i=0, ticks[i].time_msc=1501552175606 (2017.08.01 01:49:35)

Т.е. запросили мы с 03 часов, а получили с 01:49. В реальных условиях разница была больше месяца.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий