Аналог iBarShift - страница 13

 
Nikolai Semko:

Индикатор, демонстрирующий быстродействия функции iBars в сравнении с встроенной Bars и функцией iBarShift от @Alain Verleyen
Время выполнения функции в микросекундах.


Не сюда нужно - в кодобазу. И iBars(), и iBarShift()

 
Nikolai Semko:

функция iBars хоть и получилась весьма громоздкой, но всё равно я рекомендую её использовать вместо штатного Bars, пока MQ не исправят в нем баг с зависанием. 

Можно еще ускорить, сделав так

start_time -= start_time % PeriodSeconds(timeframe);
TimeCur -= TimeCur % PeriodSeconds(timeframe);

Зависает iBar, когда по логике он должен возвращать 0. Возвращает он его как правило более 10 секунд. В MQL4 этого бага нет.

Вот этот вызов

SeriesInfoInteger(symbol_name,timeframe,SERIES_LASTBAR_DATE)

работает некорректно - вызывает подкачку истории, когда ее не должно быть. Отсюда и тормоза (можете посмотреть появление hcc-файлов).

 
Nikolai Semko:

Индикатор, демонстрирующий быстродействия функции iBars в сравнении с встроенной Bars и функцией iBarShift от @Alain Verleyen
Время выполнения функции в микросекундах.

Повторюсь, быстродействие нужно замерять там, где оно востребовано - Оптимизатор.

 
Artyom Trishkin:

Не сюда нужно - в кодобазу. И iBars(), и iBarShift()

Да, планирую. Потестируем пока.

 
fxsaber:

Можно еще ускорить, сделав так

С start_time там уже реализовано самого начала, а вот с TimeCur да - можно чуть ускорить. Сделаю. Спасибо.

Кстати это годиться только от M1 до D1. W1 нужно сдвигать на три дня т.к. 01.01.1970 г. это четверг. А с MN1 нужно вообще с бубнами, ибо месяц бывает 28,29,30,31 день

Вот этот вызов

работает некорректно - вызывает подкачку истории, когда ее не должно быть. Отсюда и тормоза (можете посмотреть появление hcc-файлов).

Странно, не наблюдал такого поведения.

fxsaber:

Повторюсь, быстродействие нужно замерять там, где оно востребовано - Оптимизатор.

Что Вы имеете ввиду под оптимизатором? 

 
Nikolai Semko:

С start_time там уже реализовано самого начала

Реализована с ошибкой. Например, M1 starttime == D'12:00:05'. Также и stoptime нужно делать.

Что Вы имеете ввиду под оптимизатором? 

Режим оптимизации в Тестере.

 
fxsaber:

Реализована с ошибкой. Например, M1 starttime == D'12:00:05'. Также и stoptime нужно делать.

Поясните, что за ошибка? И почему только время, а где дата?

Bars и iBars выдают 0 при таком формате.

 
Nikolai Semko:

Поясните, что за ошибка? И почему только время, а где дата?

Дату лень было писать.

t=start_time-(start_time-1)%PerSec;

В эту строку подставьте start_time с ненулевым количество секунд в минуте.

 
fxsaber:

Дату лень было писать.

В эту строку подставьте start_time с ненулевым количество секунд в минуте.

Да все нормально. Не ошибка это. Так и должно быть.

Попробуйте запустить такой код:

   Print(Bars(_Symbol,PERIOD_M1,D'2018.04.04 18:00:00',UINT_MAX));
   Print(Bars(_Symbol,PERIOD_M1,D'2018.04.04 18:00:01',UINT_MAX)); //результат на единицу меньше
 
Nikolai Semko:

Да все нормально. Не ошибка это. Так и должно быть.

Попробуйте запустить такой код:

Тогда не понимаю, почему Bars считает, что 18:00:01 принадлежит M1-бару 18:01, а не 18:00.


Кстати, TimeCurrent нужно заменить на SYMBOL_TIME.

Причина обращения: