IsConnected() - страница 3

 

Извините, но почему это не должно работать:

int start()

{

    while ( !IsStopped() )
    {
        IsConnectedBefore = IsConnectedNow;
        IsConnectedNow = IsConnected();
      ....

     }

}   

Мой советник всегда находится в цикле while-loop и ему не нужен никакой тик.

 

Вся эта история с PostMessageA() была опубликована только как ответ на предложение "call start() from init()" ранее в этой теме. Я не мог оставить это без комментариев. "Вызывать start() из init()" просто неправильно на многих уровнях, и поэтому я должен был прокомментировать это, а также предоставить правильное решение для достижения того же самого, а именно принудительный вызов start() из init() даже в выходные дни.


Для проблемы запуска MT4 в отключенном состоянии он не предлагает решения. Хотя я также не понимаю, для чего это может понадобиться, поскольку именно соединение приходит и уходит, в то время как сам metatrader должен легко работать 24/7 без перерывов. И даже когда он перезапускается в выходные, с PostMessageA() в init() он немедленно возобновит цикл в start(), как только соединение вернется после перезапуска, даже без тика, а затем он снова будет работать вечно до следующего (случайного) перезапуска.

 
sunshineh:

Извините, но почему это не должно работать:

Мой советник всегда находится в цикле while-loop и ему не нужен никакой тик.


Ага, Потому что вы не перезапустили терминал, пока у вас нет подключения к интернету, но если вы перезапустите терминал, пока у вас нет подключения к интернету, советник не приходит в цикл без одного тика, независимо от того, что вы делаете, даже если вы используете PostMessageA() или вызываете Start () из init(), единственный способ сделать это - скрипт, потому что скрипты выполняются независимо от того, тик или нет.
 

В любом случае спасибо всем за попытку помочь. Я решил немного испачкать руки и запустить внешнюю программу для выполнения скрипта, и точка.
Независимо от этого, функция IsConnected() все еще заставляет меня смеяться, если такая простая вещь не охватывает

 
7bit:

Вся эта история с PostMessageA() была опубликована только как ответ на предложение "call start() from init()" ранее в этой теме. Я не мог оставить это без комментариев. "Вызывать start() из init()" просто неправильно на многих уровнях, и поэтому я должен был прокомментировать это, а также предоставить правильное решение для достижения того же самого, а именно принудительный вызов start() из init() даже в выходные дни.


Для проблемы запуска MT4 в отключенном состоянии он не предлагает решения. Хотя я также не понимаю, для чего это может понадобиться, поскольку именно соединение приходит и уходит, в то время как сам метатрейдер должен легко работать 24/7 без перерывов. И даже когда он перезапускается в выходные, с PostMessageA() в init() он немедленно возобновит цикл в start(), как только соединение вернется после перезапуска, даже без тика, а затем он снова будет работать вечно до следующего (случайного) перезапуска.


Спасибо за ваше замечание, 7Bit, полезно знать лучшие методы, я успешно запускал советника, как я описал выше, в попытке решить проблему, которая вызывала у меня значительные проблемы. Терминал регулярно терял соединение, но по неизвестной причине не восстанавливал его. Мне приходилось вручную пересканировать серверы в терминале, прежде чем он восстанавливал соединение. Сначала я думал, что это просто ошибка времени, но слишком часто, чтобы быть ошибкой, я мог ждать час, не восстанавливая соединение, а затем, когда я нажимал кнопку rescan, он снова подключался. Моим решением было постоянное тестирование состояния соединения... если он терял соединение, дайте ему 5 минут на восстановление соединения, кричите с крыш в сообщениях, электронных письмах и журналах, что это происходит, а затем закрывайте терминал и перезагружайтесь. Это срабатывало в большинстве случаев. Время от времени возникала законная проблема с подключением, и поскольку советник не инициализируется без подключения, я оказывался в яме. Я просмотрел методы решения этой проблемы, все они находятся за пределами MT4 и, следовательно, за пределами моих текущих ИТ-возможностей. К счастью, я сменил брокера и не имел никаких проблем с моим нынешним поставщиком... так что работа над этим вопросом находится на низком уровне в списке приоритетов.

Но может случиться так, что соединение будет потеряно, а MT4 не сможет подключиться снова, когда соединение действительно доступно. Перезапуск терминала не влияет на работу моих советников, а вот часовое отсутствие соединения - да!

V

 
Viffer:

К счастью, я сменил брокера и не имел никаких проблем с моим нынешним провайдером... поэтому работа над этим вопросом не входит в список приоритетов.

Я еще не видел этого у своего брокера, так что это действительно может происходить только с некоторыми брокерами. Соединение теряется иногда на несколько секунд один или два раза в день, но всегда сразу же восстанавливается.


Для быстрого создания внешнего приложения, которое может контролировать и удаленно управлять другим приложением windows (нажимать кнопки, вызывать меню и т.д.), я рекомендую AutoIT. Это простой в освоении язык сценариев BASIC, который очень хорошо подходит именно для таких задач.

 
7bit:

Я еще не видел этого у своего брокера, так что это действительно может происходить только с некоторыми брокерами. Соединение теряется иногда на несколько секунд один или два раза в день, но всегда сразу же восстанавливается.


Для быстрого создания внешнего приложения, которое может контролировать и удаленно управлять другим приложением windows (нажимать кнопки, вызывать меню и т.д.), я рекомендую AutoIT. Это простой в изучении язык сценариев BASIC, который очень хорошо подходит именно для таких задач.

Спасибо за это, я поищу его.

V

 
qjol:

функция IsConnected() все еще заставляет меня смеяться, если такую простую вещь он не освещает.

Я думал, что проблема в том, что MT4 задерживает init() после перезапуска до полного подключения?


Какое отношение это вдруг имеет к IsConnected()? IsConnected(), похоже, работает так, как и предполагалось. Она возвращает true при подключении и false при отключении. Я не понимаю, что в этом смешного.

 
7bit:

Я думал, что проблема в том, что MT4 задерживает init() после перезапуска до полного подключения?


Какое отношение это вдруг имеет к IsConnected()? IsConnected(), похоже, работает так, как и предполагалось. Она возвращает true при подключении и false при отключении. Я не понимаю, что в этом смешного.


потому что

if (!IsConnected()) должно возвращать false & Пока не наступает новый тик IsConnected() не может быть проверена Из-за этого, вот почему это вызывает у меня смех

 
qjol:

Пока не наступает новый тик IsConnected() не может быть проверена Из-за этого, вот почему это вызывает у меня смех.

Его можно проверить, просто запустите проверку в бесконечном цикле. Как запустить этот цикл при запуске терминала во время обрыва соединения - это совершенно отдельная проблема. Как только вы запустили цикл, он будет делать то, что ожидается.

Ваша проблема не имеет никакого отношения к функции IsConnected(). С тем же аргументом вы могли бы пожаловаться на Print() или Alert() или любую другую функцию, которую вы не можете вызвать, потому что не смогли запустить весь код в первую очередь по какой-то совершенно другой причине.

Причина обращения: