Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Просто вызовите start() из init() ...и вы будете в start() даже без тика!
спасибо вам 2
Расширяя мою ссылку выше... Я запускаю отдельный советник для мониторинга состояния соединения. В нем весь код для моего теста закодирован внутри start с sleep в конце. Start - это, по сути, большой цикл, когда он завершается, он возвращается в начало. Но вместо того, чтобы ждать тика для запуска, я вызываю start() внутри init(). Таким образом, start() продолжает цикл с sleep, а init() никогда не завершается, поэтому код выполняется на основе временных интервалов от sleep, а не в ожидании тика... ссылка выше показывает принцип...
hth
V
Просто вызовите start() из init() ...и вы окажетесь в start() даже без прихода тика!
Это не решит проблему, потому что init() также не запускается, если нет соединения.
Единственный способ сделать это - использовать скрипт; проблема в том, что нет способа открыть терминал со скриптом Loaded
ни один из этих способов не решает проблему, потому что init() также не запускается, если нет соединения
единственным способом сделать это является скрипт; проблема в том, что нет способа открыть терминал со скриптом Loaded
Давайте посмотрим на инструменты MT4i.com. Я использую их для мониторинга соединения и отправки оповещений по почте или смс.
http://www.mt4i.com/mtdashboard.aspx
Просто вызовите start() из init() ...и вы будете в start() даже без наступления тика!
НЕТ! Это недопустимо. Ожидается, что init() вернется через 2 секунды. Init не разрешается блокировать! Всевозможные проблемы могут (и будут) возникать из-за этого.
Просто сделайте цикл в start и ожидайте, что start будет вызван автоматически на следующем доступном тике после загрузки советника. Были тики до разрыва соединения, поэтому ваш цикл уже будет запущен, когда произойдет это событие.
Если вам действительно нужно вызвать start() из init(), потому что вам нужно, чтобы он выполнялся в выходные, то единственный правильный способ - это использовать трюк PostMessage() для принудительного запуска тика. Вы публикуете сообщение, а затем позволяете init вернуться! После этого MT4 вызовет start() обычным способом, и init() не будет блокироваться.
Пример смотрите в следующем сообщении.
Это то же самое, что и сценарий выше, но реализованный как советник, демонстрирующий обе концепции в одном советнике.
В init() он регистрирует самый первый тик, чтобы вызвать первый start(), а затем в start() он будет производить больше тиков в бесконечном цикле. Эти тики затем будут подхвачены всеми индикаторами на одном и том же графике.
Это единственный правильный способ принудительного запуска start() из init() в советнике. Вы не можете сделать это в индикаторе, так как там start() будет выполняться в потоке GUI.
попробуйте поставить этот советник на график, закройте терминал, затем отключите подключение к интернету и включите терминал (пока подключение к интернету отключено) и вы увидите, что он не работает.
попробуйте поставить эту еа на график, закройте терминал, затем отключите подключение к интернету и включите терминал (пока подключение к интернету отключено) и вы увидите, что она не работает
Но она должна продолжать работать после запуска в нормальных условиях (что должно быть обычным случаем использования). Попробуйте отключиться после запуска.
И это служит примером того, как избежать блокировки init() и запустить его как советник, а не как скрипт.
Но он должен продолжать работать после запуска в нормальных условиях (что должно быть нормальным вариантом использования). Попробуйте отключиться после его запуска.
И это служит примером того, как избежать блокировки init() и запустить его как советник вместо скрипта.
Вы правы, но я не ищу решение для ситуации, которую вы описываете, я ищу решение для ситуации, которую я описываю, и прямо сейчас единственное решение, которое я нашел, это, внешнее программное обеспечение, будет запускать сценарий