Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Извините, но почему это не должно работать:
Мой советник всегда находится в цикле while-loop и ему не нужен никакой тик.
Вся эта история с PostMessageA() была опубликована только как ответ на предложение "call start() from init()" ранее в этой теме. Я не мог оставить это без комментариев. "Вызывать start() из init()" просто неправильно на многих уровнях, и поэтому я должен был прокомментировать это, а также предоставить правильное решение для достижения того же самого, а именно принудительный вызов start() из init() даже в выходные дни.
Для проблемы запуска MT4 в отключенном состоянии он не предлагает решения. Хотя я также не понимаю, для чего это может понадобиться, поскольку именно соединение приходит и уходит, в то время как сам metatrader должен легко работать 24/7 без перерывов. И даже когда он перезапускается в выходные, с PostMessageA() в init() он немедленно возобновит цикл в start(), как только соединение вернется после перезапуска, даже без тика, а затем он снова будет работать вечно до следующего (случайного) перезапуска.
Извините, но почему это не должно работать:
Мой советник всегда находится в цикле while-loop и ему не нужен никакой тик.
Ага, Потому что вы не перезапустили терминал, пока у вас нет подключения к интернету, но если вы перезапустите терминал, пока у вас нет подключения к интернету, советник не приходит в цикл без одного тика, независимо от того, что вы делаете, даже если вы используете PostMessageA() или вызываете Start () из init(), единственный способ сделать это - скрипт, потому что скрипты выполняются независимо от того, тик или нет.
В любом случае спасибо всем за попытку помочь. Я решил немного испачкать руки и запустить внешнюю программу для выполнения скрипта, и точка.
Независимо от этого, функция IsConnected() все еще заставляет меня смеяться, если такая простая вещь не охватывает
Вся эта история с PostMessageA() была опубликована только как ответ на предложение "call start() from init()" ранее в этой теме. Я не мог оставить это без комментариев. "Вызывать start() из init()" просто неправильно на многих уровнях, и поэтому я должен был прокомментировать это, а также предоставить правильное решение для достижения того же самого, а именно принудительный вызов start() из init() даже в выходные дни.
Для проблемы запуска MT4 в отключенном состоянии он не предлагает решения. Хотя я также не понимаю, для чего это может понадобиться, поскольку именно соединение приходит и уходит, в то время как сам метатрейдер должен легко работать 24/7 без перерывов. И даже когда он перезапускается в выходные, с PostMessageA() в init() он немедленно возобновит цикл в start(), как только соединение вернется после перезапуска, даже без тика, а затем он снова будет работать вечно до следующего (случайного) перезапуска.
Спасибо за ваше замечание, 7Bit, полезно знать лучшие методы, я успешно запускал советника, как я описал выше, в попытке решить проблему, которая вызывала у меня значительные проблемы. Терминал регулярно терял соединение, но по неизвестной причине не восстанавливал его. Мне приходилось вручную пересканировать серверы в терминале, прежде чем он восстанавливал соединение. Сначала я думал, что это просто ошибка времени, но слишком часто, чтобы быть ошибкой, я мог ждать час, не восстанавливая соединение, а затем, когда я нажимал кнопку rescan, он снова подключался. Моим решением было постоянное тестирование состояния соединения... если он терял соединение, дайте ему 5 минут на восстановление соединения, кричите с крыш в сообщениях, электронных письмах и журналах, что это происходит, а затем закрывайте терминал и перезагружайтесь. Это срабатывало в большинстве случаев. Время от времени возникала законная проблема с подключением, и поскольку советник не инициализируется без подключения, я оказывался в яме. Я просмотрел методы решения этой проблемы, все они находятся за пределами MT4 и, следовательно, за пределами моих текущих ИТ-возможностей. К счастью, я сменил брокера и не имел никаких проблем с моим нынешним поставщиком... так что работа над этим вопросом находится на низком уровне в списке приоритетов.
Но может случиться так, что соединение будет потеряно, а MT4 не сможет подключиться снова, когда соединение действительно доступно. Перезапуск терминала не влияет на работу моих советников, а вот часовое отсутствие соединения - да!
V
К счастью, я сменил брокера и не имел никаких проблем с моим нынешним провайдером... поэтому работа над этим вопросом не входит в список приоритетов.
Я еще не видел этого у своего брокера, так что это действительно может происходить только с некоторыми брокерами. Соединение теряется иногда на несколько секунд один или два раза в день, но всегда сразу же восстанавливается.
Для быстрого создания внешнего приложения, которое может контролировать и удаленно управлять другим приложением windows (нажимать кнопки, вызывать меню и т.д.), я рекомендую AutoIT. Это простой в освоении язык сценариев BASIC, который очень хорошо подходит именно для таких задач.
Я еще не видел этого у своего брокера, так что это действительно может происходить только с некоторыми брокерами. Соединение теряется иногда на несколько секунд один или два раза в день, но всегда сразу же восстанавливается.
Для быстрого создания внешнего приложения, которое может контролировать и удаленно управлять другим приложением windows (нажимать кнопки, вызывать меню и т.д.), я рекомендую AutoIT. Это простой в изучении язык сценариев BASIC, который очень хорошо подходит именно для таких задач.
Спасибо за это, я поищу его.
V
функция IsConnected() все еще заставляет меня смеяться, если такую простую вещь он не освещает.
Я думал, что проблема в том, что MT4 задерживает init() после перезапуска до полного подключения?
Какое отношение это вдруг имеет к IsConnected()? IsConnected(), похоже, работает так, как и предполагалось. Она возвращает true при подключении и false при отключении. Я не понимаю, что в этом смешного.
Я думал, что проблема в том, что MT4 задерживает init() после перезапуска до полного подключения?
Какое отношение это вдруг имеет к IsConnected()? IsConnected(), похоже, работает так, как и предполагалось. Она возвращает true при подключении и false при отключении. Я не понимаю, что в этом смешного.
потому что
if (!IsConnected()) должно возвращать false & Пока не наступает новый тик IsConnected() не может быть проверена Из-за этого, вот почему это вызывает у меня смех
Пока не наступает новый тик IsConnected() не может быть проверена Из-за этого, вот почему это вызывает у меня смех.
Его можно проверить, просто запустите проверку в бесконечном цикле. Как запустить этот цикл при запуске терминала во время обрыва соединения - это совершенно отдельная проблема. Как только вы запустили цикл, он будет делать то, что ожидается.
Ваша проблема не имеет никакого отношения к функции IsConnected(). С тем же аргументом вы могли бы пожаловаться на Print() или Alert() или любую другую функцию, которую вы не можете вызвать, потому что не смогли запустить весь код в первую очередь по какой-то совершенно другой причине.