Отличная работа.
Однако ваше сравнение с производительностью iBarshift немного не корректно, цель цикла в 100,000 итераций - получить усредненное и пригодное для использования значение времени (в мс). Ваша функция iBarShift() требует инициализации объекта, и эта инициализация учитывается не в цикле, а за его пределами. В любом случае, хранить все значения в памяти быстрее, чем вычислять их каждый раз.
BTW, iBarShiftFast, упомянутый в эталонных бенчмарках, может быть улучшен до простого:
(Bars(symbol, timeframe, time, D'2100.01.01') - 1)
Улучшение заключается в полном отказе от SeriesInfoInteger и использовании постоянной даты в далеком будущем.
Отличная работа.
Однако ваше сравнение с производительностью iBarshift немного не корректно, цель цикла в 100,000 итераций - получить усредненное и пригодное для использования значение времени (в мс). Ваша iBarShift() требует инициализации объекта, и эта инициализация учитывается не в цикле, а за его пределами. В любом случае, хранить все значения в памяти быстрее, чем вычислять их каждый раз.
Спасибо! :)
Это замечательный момент, и да, демонстрация "режима производительности" инициализирует вне цикла, однако прямой вызов iBarShift во втором бенчмарке инстанцирует объект, поэтому ему требуется больше времени для завершения 100 000 циклов... потому что он должен инстанцировать и инициализировать статический глобальный объект перед обращением к нему за данными - поэтому второй тест является справедливым сравнением. "Режим производительности" также является справедливым сравнением, если рассматривать его как доступ к данным только в рамках операции "горячего пути".
BTW, я только что провел несколько тестов и хочу еще раз уточнить для всех, кто это читает: Этот метод быстрее только в том случае, если вы планируете разделить обновление данных и вызов данных на отдельные пути ИЛИ вы вызываете любую комбинацию вызовов функций временного ряда более 300 раз за бар. Другими словами, отметка ~300 итераций является точкой безубыточности. Если вы не вызываете функции более 300 раз за бар и не используете "горячий путь", то вам, вероятно, лучше использовать другие методы.
iBarShift benchmark based on 100000 runs. ======================================================= iBarShift(Alain Verleyen) for 2017.04.11 19:56:37 is 45723 in 338.868 milliseconds. ------------------------------------------------------------- iBarShift3 for 2017.04.11 19:56:37 is 45723 in 0.492 milliseconds. ------------------------------------------------------------- iBarShift(direct function call) for 2017.04.11 19:56:37 is 45723 in 38.712 milliseconds. ------------------------------------------------------------- iBar.Shift(performance mode) for 2017.04.11 19:56:37 is 45723 in 3.403 milliseconds. -------------------------------------------------------------
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Высокопроизводительная библиотека iTimeSeries
fxsaber, 2017.05.25 13:23
iBarShift benchmark based on 100000 runs. ======================================================= iBarShift(Alain Verleyen) for 2017.04.11 19:56:37 is 45723 in 338.868 milliseconds. ------------------------------------------------------------- iBarShift3 for 2017.04.11 19:56:37 is 45723 in 0.492 milliseconds. ------------------------------------------------------------- iBarShift(direct function call) for 2017.04.11 19:56:37 is 45723 in 38.712 milliseconds. ------------------------------------------------------------- iBar.Shift(performance mode) for 2017.04.11 19:56:37 is 45723 in 3.403 milliseconds. -------------------------------------------------------------
Seriously ? It's just a trick.
Такой тест производительности написал сам автор библиотеки.
Пример с небольшой долей юмора показывает, что тест должен быть несколько иным. + другая реализация проверочной функции.
This performance test written by the author of the library.
Example with a little bit of humor shows that the test should be somewhat different. + Other implementation verification functions.
You're right. The test was designed to reflect the benchmark Alain. Here is an example with a time shift to more accurately simulate the use in the real world for this algorithm.
You're right. The test was designed to reflect the benchmark Alain. Here is an example with a time shift to more accurately simulate the use in the real world for this algorithm.
Высокая производительность нужна для тестера/оптимизатора (только).
Покажите, пожалуйста, результат сравнительный результат Вашей библиотеки в тестере/оптимизаторе.
Высокая производительность нужна для тестера/оптимизатора (только).
Покажите, пожалуйста, результат сравнительный результат Вашей библиотеки в тестере/оптимизаторе.
...также нужна для сложных построений - из многих объектов
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Высокопроизводительная библиотека iTimeSeries:
Эта библиотека предоставляет молниеносный доступ к таймсериям для реализации привычных методов MQL4 (например, iBarShift) в чувствительных к задержкам приложениях на MQL5.
Автор: nicholishen