Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы же говорили что все должно работать как в MQL4 .
Но этот скрипт можно запустить на MQL5 тоже
При exact=True и будущем времени возвращать нужно -1
И еще мой скрипт нашел у вас странную ошибку:
Эта ошибка подтверждается этой проверкой:
Значит я все же был прав про с уществование нештатных ситуаций в вашем алгоритме .Приятно, что вы наконец нашли ошибку
Я проверю, спасибо.
Всем добрый вечер. Возможно я чего-то недопонимаю, и все же - не совсем понятно, чем не устраивает стандартная функция, которая уже предлагалась в начале Bars(). Все время ею пользуюсь и никаких проблем. Единственное, можно столкнуться в последующем с "array out of range" или отрицательным значением в случае использования TimeCurrent(), но тогда нужно сделать проверку соответствующую. Примеры:
Всем добрый вечер. Возможно я чего-то недопонимаю, и все же - не совсем понятно, чем не устраивает стандартная функция, которая уже предлагалась в начале Bars(). Все время ею пользуюсь и никаких проблем. Единственное, можно столкнуться в последующем с "array out of range" или отрицательным значением в случае использования TimeCurrent(), но тогда нужно сделать проверку соответствующую. Примеры:
Судя по цифре 32000000000 это тоже моё творение. UINT_MAX просто короче и солиднее выглядит. ))
Дело в том, что такой вариант правильнее, как выяснилось:
а не
внешней разницы почти нет. Но зато верхний вариант очень точно повторяет штатную функцию iBarShift из MQL4
Судя по цифре 32000000000 это тоже моё творение. UINT_MAX просто короче и солиднее выглядит. ))
Дело в том, что такой вариант правильнее, как выяснилось:
а не
внешней разницы почти нет. Но зато верхний вариант очень точно повторяет штатную функцию iBarShift из MQL4
Так на чём остановились, что самое лёгкое, и правильное?
Так на чём остановились, что самое лёгкое, и правильное?
Пока этот вариант, но я сейчас хочу его дополнить, чтобы он обходил этот баг подвисания функции Bars, по поводу которого я уже отписался в сервисдеск.
Суть этого бага в том, что если в функции Bars оба времени start_time и stop_time находятся внутри одного бара или находятся в будущем (правее нулевого бара), то эта функция подвисает на более чем 10 секунд.
Возможно я чуть позже все же сделаю правильный более быстрый вариант, но более громоздкий.
Я решил пойти по другому пути.
Я не буду переделывать iBarShift, а переделаю глючную функцию Bars.
Причем новая функция iBars будет не только обходить баг подвисания, но и будет работать быстрее оригинала Bars.
Этой функцией смогут пользоваться другие и уже имеющиеся алгоритмы будут работать быстрее.
Мне нужно только время. Смогу этим заняться не раньше чем через день.
Я решил пойти по другому пути.
Я не буду переделывать iBarShift, а переделаю глючную функцию Bars.
Причем новая функция iBars будет не только обходить баг подвисания, но и будет работать быстрее оригинала Bars.
Этой функцией смогут пользоваться другие и уже имеющиеся алгоритмы будут работать быстрее.
Мне нужно только время. Смогу этим заняться не раньше чем через день.
Очень хорошо! Жду с нетерпением!
Из всего анализа, который я сделал, напрашивается вывод, что вот этот полный аналог функции iBarShift:
на сегодняшний день является самым корректным, и при этом самый быстрым и с самым простым и коротким алгоритмом.
красиво, но что-то смущает...
надо будет протестить )
функция iBars хоть и получилась весьма громоздкой, но всё равно я рекомендую её использовать вместо штатного Bars, пока MQ не исправят в нем баг с зависанием.
Зависает iBar, когда по логике он должен возвращать 0. Возвращает он его как правило более 10 секунд. В MQL4 этого бага нет.
В большинстве задач iBars будет работать быстрее чем штатный Bars, потому как она не только обходит баг, но и старается не использовать по возможности функции Bars и SeriesInfoInteger благодаря алгоритму сохранения предыдущих значений.
Тестировал эту функцию и вдоль и поперек. Вроде бы полностью повторяет Bars.
Возможно можно сделать более изящно. У кого есть желание - милости просим. Найдете ошибки - будем исправлять.
Итак...
Тогда полный аналог функции iBarsShift будет иметь вид:
А вариант без последнего параметра exact, что используется в подавляющем большинстве случаев будет иметь такой вид:
Индикатор, демонстрирующий быстродействия функции iBars в сравнении с встроенной Bars и функцией iBarShift от @Alain Verleyen
Время выполнения функции в микросекундах.