Это можно проверить, просто запустите проверку в бесконечном цикле. как запустить этот цикл при запуске терминала во время обрыва связи - это совершенно отдельная проблема. Как только вы запустили цикл, он будет делать то, что ожидается.
Ваша проблема не имеет никакого отношения к функции IsConnected(). С тем же аргументом вы могли бы пожаловаться на Print() или Alert() или любую другую функцию, которую вы не можете вызвать, потому что не смогли запустить весь код с самого начала по какой-то совершенно другой причине.
Хорошо, позвольте мне объяснить кое-что Потому что я использую много Terminlas Все время мое использование процессора увеличивается до 100 процентов, поэтому мне нужно отключить несколько терминалов
И когда я включаю их (конечно, автоматически), я видел несколько раз, что они не подключены, и советник, работающий на них, не сообщал, что нет соединения,
Вот почему я начал эту тему и пока единственный способ, который я нашел, это, как я сказал выше, использовать внешнюю программу.
Возможно, это связано с "особенностью", которая была впервые представлена в Windows XP SP2, которая отказывается иметь более чем несколько полуоткрытых соединений в любое время, в основном, чтобы раздражать людей, которые хотят использовать приложения с интенсивным использованием сети. AFAIK существуют методы исправления этой раздражающей "особенности" и восстановления нормальной работоспособности: http://blog.davidkaspar.com/archives/2005/04/windows-xp-sp2-and-event-id-4226.php.
7bit: Это единственный правильный способ принудительного запуска start() из init() в советнике. Вы не можете сделать это в индикаторе, поскольку там start() будет выполняться в потоке GUI.
Это хорошо, но не всегда работает, поскольку тик может исчезнуть еще до возврата init(), и в этом случае тик отбрасывается. Чтобы подчеркнуть это, если вы добавите паузу в 5 мс после
PostMessageA(hwnd, msg, 2, 1); // enqueue a fake tick and let init() return
то start() не будет выполнен.
Есть ли лучшее решение, чтобы start() выполнялся при загрузке советника, не требуя реального тика от брокера?
Я немного стар, ноищурешение тойже проблемы, которуюя получил вэтойтеме.
На самом деле, утверждение qjol о том, что "единственный способ сделать это - это запустить скрипт; проблема в том, что нет способа открыть терминал с загруженным скриптом", частично верно. Со скриптом ок, но есть способ запустить скрипт с клиентским терминалом. Это описано в справке metatrader (F1, Tools, Configuration at Startup). Возможно, на момент создания этой темы это было не так.
Поэтому я разработал небольшой скрипт для выполнения этой работы. Используйте его со стартовым скриптом, например:
; open chart and run expert and/or script
Symbol=EURUSD
Period=H4
Template=popular.tpl
Expert=
ExpertParameters=
Script=CheckConnection
ScriptParameters=
На случай, если кто-то еще ищет информацию о функции IsConnected().
Итак, да, функция не будет работать в функции start() или OnTick(), потому что если нет соединения, то не будет нового тика, и функция не сработает в любом случае.....
Так что же нам делать?
Использовать функцию OnTimer(), чтобы регулярно проверять наличие соединения, независимо от входящих тиков.
int timer = 60; //60 seconds, for exampleintOnInit()
{
//--- create timerEventSetTimer(timer); //could use EventSetMillisecondTimer(timer) for millisecond resolution//---return(INIT_SUCCEEDED);
}
// Metatrader self-triggered function, will be called regularlyvoidOnTimer()
{
if(!IsConnected())
Alert("Problem, not connection to the server!");
}
voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
Так что да, функция не будет работать в функции start() или OnTick(), потому что если нет соединения, то новый тик не появится, и функция не сработает в любом случае.....
Так что же нам делать?
Используйте функцию OnTimer(), чтобы регулярно проверять наличие соединения, независимо от входящих тиков.
Вы не должны ничего делать, потому что вы ничего не можете сделать. Пройдет 30+ секунд, прежде чем сеть отключится и функция изменит значение. Что вы собираетесь делать, когда ничего не изменилось и у вас нет соединения?
Это полезно, только если вы никогда не возвращаетесь из start/OnTick (проверяйте ее перед отправкой ордера) или после OrderSend для повторных попыток в пределах одного тика.
Вместо этого, если OrderSend не сработает, запишите это в журнал, вернитесь и проверьте/повторите попытку на следующем тике. Готово.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Это можно проверить, просто запустите проверку в бесконечном цикле. как запустить этот цикл при запуске терминала во время обрыва связи - это совершенно отдельная проблема. Как только вы запустили цикл, он будет делать то, что ожидается.
Ваша проблема не имеет никакого отношения к функции IsConnected(). С тем же аргументом вы могли бы пожаловаться на Print() или Alert() или любую другую функцию, которую вы не можете вызвать, потому что не смогли запустить весь код с самого начала по какой-то совершенно другой причине.
Хорошо, позвольте мне объяснить кое-что Потому что я использую много Terminlas Все время мое использование процессора увеличивается до 100 процентов, поэтому мне нужно отключить несколько терминалов
И когда я включаю их (конечно, автоматически), я видел несколько раз, что они не подключены, и советник, работающий на них, не сообщал, что нет соединения,
Вот почему я начал эту тему и пока единственный способ, который я нашел, это, как я сказал выше, использовать внешнюю программу.
Возможно, это связано с "особенностью", которая была впервые представлена в Windows XP SP2, которая отказывается иметь более чем несколько полуоткрытых соединений в любое время, в основном, чтобы раздражать людей, которые хотят использовать приложения с интенсивным использованием сети. AFAIK существуют методы исправления этой раздражающей "особенности" и восстановления нормальной работоспособности: http://blog.davidkaspar.com/archives/2005/04/windows-xp-sp2-and-event-id-4226.php.
Ищите событие 4226 в журнале событий windows.
Это единственный правильный способ принудительного запуска start() из init() в советнике. Вы не можете сделать это в индикаторе, поскольку там start() будет выполняться в потоке GUI.
Это хорошо, но не всегда работает, поскольку тик может исчезнуть еще до возврата init(), и в этом случае тик отбрасывается. Чтобы подчеркнуть это, если вы добавите паузу в 5 мс после
то start() не будет выполнен.
Есть ли лучшее решение, чтобы start() выполнялся при загрузке советника, не требуя реального тика от брокера?
Я немного стар, ноищу решение той же проблемы, которую я получил в этой теме.
На самом деле, утверждение qjol о том, что "единственный способ сделать это - это запустить скрипт; проблема в том, что нет способа открыть терминал с загруженным скриптом", частично верно. Со скриптом ок, но есть способ запустить скрипт с клиентским терминалом. Это описано в справке metatrader (F1, Tools, Configuration at Startup). Возможно, на момент создания этой темы это было не так.
Поэтому я разработал небольшой скрипт для выполнения этой работы. Используйте его со стартовым скриптом, например:
И терминал запускается с чем-то вроде :
"...\Metatrader 4\terminal.exe" config\start.iniПривет ребята,
Кто-нибудь из васзнает, почему не работает скрипт fake ticks - https://www.mql5.com/en/forum/128803/page2#373539(страница 2) этой темы для билда 600++?
Моя ОС - Vista. Спасибо.
Привет ребята,
Кто-нибудь из васзнает, почему не работает скрипт fake ticks - https://www.mql5.com/en/forum/128803/page2#373539(страница 2) этой темы для билда 600++?
Моя ОС - Vista. Спасибо.
Поскольку билд > 600, вам нужно заменить "A" для ansi на "W" для unicode.
почему в параметре используется 2 и 1
почему в параметре используется 2 и 1
Это выходит за рамки MQL, проверьте функцию здесь:
На случай, если кто-то еще ищет информацию о функции IsConnected().
Итак, да, функция не будет работать в функции start() или OnTick(), потому что если нет соединения, то не будет нового тика, и функция не сработает в любом случае.....
Так что же нам делать?
Использовать функцию OnTimer(), чтобы регулярно проверять наличие соединения, независимо от входящих тиков.
fridayda13:
Так что да, функция не будет работать в функции start() или OnTick(), потому что если нет соединения, то новый тик не появится, и функция не сработает в любом случае.....
Так что же нам делать?
Используйте функцию OnTimer(), чтобы регулярно проверять наличие соединения, независимо от входящих тиков.
Вы не должны ничего делать, потому что вы ничего не можете сделать. Пройдет 30+ секунд, прежде чем сеть отключится и функция изменит значение. Что вы собираетесь делать, когда ничего не изменилось и у вас нет соединения?
Это полезно, только если вы никогда не возвращаетесь из start/OnTick (проверяйте ее перед отправкой ордера) или после OrderSend для повторных попыток в пределах одного тика.
Вместо этого, если OrderSend не сработает, запишите это в журнал, вернитесь и проверьте/повторите попытку на следующем тике. Готово.