Ошибки, баги, вопросы - страница 2178

 
Nikolai Semko:

Нет, подгрузка здесь ни при чем.

Если брать не нулевой стартовый бар, а скажем 50 бар, тогда все ОК. Мгновенно.

Причем если беру по 30 бар включительно - зависает. А после нет.

СТОПУДОВЫЙ БАГ!

первый раз зашел в эту ветку, а тут такое !

как же вообще тогда работать ? 

как клиенту объяснить про 30 бар ?

счас сам проверю !
 
Nikolai Semko:

Нет, подгрузка здесь ни при чем.

Если брать не нулевой стартовый бар, а скажем 50 бар, тогда все ОК. Мгновенно.

Причем если беру по 30 бар включительно - зависает. А после нет.

СТОПУДОВЫЙ БАГ!

Я беру с "0" по "250" - результат написал.

 
Vitaly Muzichenko:

Я беру с "0" по "250" - результат написал.

MT5?

 
Nikolai Semko:

MT5?

проверил ! код от семко николая, вообще думал скрипт завершился, потом бац - вторая строка появилась

00:09:39.980 Test (EURUSD,M15) 1 2018.03.30 20:00 CurrentTime = 2018.03.30 23:59

00:09:57.313 Test (EURUSD,M15) 2 CurrentTime = 2018.03.30 23:59

 
Nikolai Semko:

MT5?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Vitaly Muzichenko, 2018.03.30 22:50

Да он с текущего грузит по времени долго. У меня 22 символа нужно подгрузить на глубину всего 250 баров, так терминал мт5 делает это так, как будто кто-то ушёл пешком в ДЦ за котировками. В мт4 эти-же действия происходят моментально.


 
Vitaly Muzichenko:

Я беру с "0" по "250" - результат написал.

Вообще, возможно, это плавающий баг. Потому как сначала я его наблюдал на другом сочетании таймфреймов, но потом на них он пропал. А нащупал в этом сочетании.

Не исключено, что еще зависит не только от ТФ, но и от часового пояса.

 
Nikolai Semko:

Нет, подгрузка здесь ни при чем.

Если брать не нулевой стартовый бар, а скажем 50 бар, тогда все ОК. Мгновенно.

Причем если беру по 30 бар включительно - зависает. А после нет.

СТОПУДОВЫЙ БАГ!

Попробуйте вот этот:

//+------------------------------------------------------------------+
//| Возвращает смещение бара по времени                              |
//| https://www.mql5.com/ru/code/1864                                |
//+------------------------------------------------------------------+
int iBarShift(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const datetime time,bool exact=false)
  {
   datetime last_bar;
   if(!SeriesInfoInteger(symbol_name,timeframe,SERIES_LASTBAR_DATE,last_bar))
     {
      datetime array[1];
      if(CopyTime(symbol_name,timeframe,0,1,array)==1)
         last_bar=array[0];
      else
         return WRONG_VALUE;
     }
   if(time>last_bar)
      return(0);
   int shift=Bars(symbol_name,timeframe,time,last_bar);
   datetime array[1];
   if(CopyTime(symbol_name,timeframe,time,1,array)==1)
      return(array[0]==time ? shift-1 : exact && time>array[0]+PeriodSeconds(timeframe) ? WRONG_VALUE : shift);
   return WRONG_VALUE;
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

Попробуйте вот этот:

Да причем тут iBarShift?

Сейчас речь о баге стандартной функции Bars 

 
Nikolai Semko:

Да причем тут iBarShift?

Сейчас речь о баге стандартной функции Bars 

В той функции тоже Bars() используется. У вас же всё началось как раз с аналога iBarShift()

 
Artyom Trishkin:

В той функции тоже Bars() используется. У вас же всё началось как раз с аналога iBarShift()

Да, конечно, юзание аналога iBarShift выявило эту проблему.

Если использовать приведенную Вами функцию iBarShift, этого бага не поймать, т.к. там используется только один ТФ,

А этот баг происходит при использовании разных ТФ в функциях CopyTime и Bars.

Но Bars должен нормально отрабатывать любое время. Но мой пример показывает, что существует частный случай, где iBar зависает на десятки секунд. И подгрузка истории здесь ни причем.