Это время на часах, а не дельта. Дельта=5*3600 задаётся в секундах.
И не забывайте переинициализировать StartTime новым временем, когда условие будет выполнено.
Что за ChangeChart()?
Вам выше самое простое решение посоветовали, смену периода графика, которая автоматически запускает полную инициализацию всех программ на графике, почему бы не попробовать это, прежде чем выдумывать себе новые "непреодолимые" задачи?
Достаточно просто задать период, потом обратно поменять на прежний. Или не менять, если в советнике привязка к периоду жестко задана. Но чаще всего период везде в коде пишут как PERIOD_CURRENT, а значит, надо обратно менять.
Vitalie Postolache: Достаточно просто задать период, потом обратно поменять на прежний. Или не менять, если в советнике привязка к периоду жестко задана. Но чаще всего период везде в коде пишут как PERIOD_CURRENT, а значит, надо обратно менять.
Там мультитаймфреймовый/мультивалютный советник, поэтому не требуется этого делать. Однако хотелось бы понимать, в каком месте конкретно вставлять эту функцию и как ее отработать. Т.к. если сразу же после ошибки изменять период, то успевает еще несколько итераций пройти, прежде чем сменится период/инструмент
Вставьте распринтовку в самом начале OnInit, получите по итогу только один раз нулевой test.
Вызов OnInit - это не перезапуск советника. До OnInit при запуске советника идет присвоение глобальных переменных/объектов. Например, в Вашем примере ДО OnInit выполняется конструктор объекта newbar.
Советникам совершенно не нужны OnInit и OnDeinit (скриптам - OnStart). Перекочевали из старого MQL4.
эт кому видимо как повезет
у меня в МТ4 и в МТ5 всё гудд
ну вставьте в самом низу OnInit() еще и OnTick() или OnStart() тогда, и будет Вам полный перезапуск советника, какие проблемы?
Насчет необходимости в OnInit() я бы сильно поспорил, т.к.. к примеру, у меня инициализация в 20 раз больше OnStart()........... и что? //не буду же я пересчитывать одни и те же параметры на каждом тике, а можно только при сбое...
Мало написать АТС, гораздо сложнее добиться надежной работы советника без вмешательства человека...
ну вставьте в самом низу OnInit() еще и OnTick() или OnStart() тогда, и будет Вам полный перезапуск советника, какие проблемы?
Насчет необходимости в OnInit() я бы сильно поспорил, т.к.. к примеру, у меня инициализация в 20 раз больше OnStart()........... и что? //не буду же я пересчитывать одни и те же параметры на каждом тике, а можно только при сбое...
Мало написать АТС, гораздо сложнее добиться надежной работы советника без вмешательства человека...
Вызывая DeInit и затем OnInit - вы фактически перезапускаете советник. не обязательно это делать каждый тик. Запустите по таймеру эти две функции. Второй вариант Сохраните текущее время и сравинвайте с настоящим , через нужное время вызовите DeInit() и затем OnInit().
Это при условии что в DeInit записаны все необходимые функции. Типа обнулить и убрать все глобальные переменные, удалить все объекты на чартах ну прочее.
Это при условии что в DeInit записаны все необходимые функции. Типа обнулить и убрать все глобальные переменные, удалить все объекты на чартах ну прочее.
Если есть объекта класса, определенный на глобальном уровне, то никакая функция не сможет его уничтожить. Тоже самое касается всех static-объектов и некоторых static-переменных. В общем, нужно выгружать полностью советник и запускать его с нуля.
Это время на часах, а не дельта. Дельта=5*3600 задаётся в секундах.
И не забывайте переинициализировать StartTime новым временем, когда условие будет выполнено.
Что за ChangeChart()?
Вам выше самое простое решение посоветовали, смену периода графика, которая автоматически запускает полную инициализацию всех программ на графике, почему бы не попробовать это, прежде чем выдумывать себе новые "непреодолимые" задачи?
Достаточно просто задать период, потом обратно поменять на прежний. Или не менять, если в советнике привязка к периоду жестко задана. Но чаще всего период везде в коде пишут как PERIOD_CURRENT, а значит, надо обратно менять.
Там мультитаймфреймовый/мультивалютный советник, поэтому не требуется этого делать. Однако хотелось бы понимать, в каком месте конкретно вставлять эту функцию и как ее отработать. Т.к. если сразу же после ошибки изменять период, то успевает еще несколько итераций пройти, прежде чем сменится период/инструмент
Вставьте распринтовку в самом начале OnInit, получите по итогу только один раз нулевой test.
Вызов OnInit - это не перезапуск советника. До OnInit при запуске советника идет присвоение глобальных переменных/объектов. Например, в Вашем примере ДО OnInit выполняется конструктор объекта newbar.
Советникам совершенно не нужны OnInit и OnDeinit (скриптам - OnStart). Перекочевали из старого MQL4.
эт кому видимо как повезет
у меня в МТ4 и в МТ5 всё гудд
ну вставьте в самом низу OnInit() еще и OnTick() или OnStart() тогда, и будет Вам полный перезапуск советника, какие проблемы?
Насчет необходимости в OnInit() я бы сильно поспорил, т.к.. к примеру, у меня инициализация в 20 раз больше OnStart()........... и что? //не буду же я пересчитывать одни и те же параметры на каждом тике, а можно только при сбое...
Мало написать АТС, гораздо сложнее добиться надежной работы советника без вмешательства человека...
какие проблемы?
эт кому видимо как повезет
у меня в МТ4 и в МТ5 всё гудд
ну вставьте в самом низу OnInit() еще и OnTick() или OnStart() тогда, и будет Вам полный перезапуск советника, какие проблемы?
Насчет необходимости в OnInit() я бы сильно поспорил, т.к.. к примеру, у меня инициализация в 20 раз больше OnStart()........... и что? //не буду же я пересчитывать одни и те же параметры на каждом тике, а можно только при сбое...
Мало написать АТС, гораздо сложнее добиться надежной работы советника без вмешательства человека...
Вызывая DeInit и затем OnInit - вы фактически перезапускаете советник.
Это при условии что в DeInit записаны все необходимые функции. Типа обнулить и убрать все глобальные переменные, удалить все объекты на чартах ну прочее.
Это при условии что в DeInit записаны все необходимые функции. Типа обнулить и убрать все глобальные переменные, удалить все объекты на чартах ну прочее.
Если есть объекта класса, определенный на глобальном уровне, то никакая функция не сможет его уничтожить. Тоже самое касается всех static-объектов и некоторых static-переменных. В общем, нужно выгружать полностью советник и запускать его с нуля.