MT4 login/logout callback?

 
Всем привет! Есть скрипт, который работает в бэкграунде (while true), и при переключении аккаунтов в терминале продолжает работать... а мне необходимо его перезапускать!
Вопрос: как мне отловить действие logout либо login ? Либо насколько ресурсоёмка функция AccountNumber(), чтобы использовать её в while ? может есть предопределённая для неё переменная по аналогии _Digits_Point и т.д... ?
 
Попробуйте вынести запуcк скрипта в init()
 
Renat Akhtyamov:
Попробуйте вынести запуcк скрипта в init()
Дело в том, что если в скрипте используется бесконечный цикл, например: while(true), то из программы стандартными средствами вообще не выйти корректно... это можно скинуть на специфику MQL конечно, однако аварийный стоп типа Ctrl+\ известен всем. Поэтому дело до переинициализации попросу не доходит.. короче не вышло... может я не так понял?
 
Matvey Alekseev:
Дело в том, что если в скрипте используется бесконечный цикл, например: while(true), то из программы стандартными средствами вообще не выйти корректно... это можно скинуть на специфику MQL конечно, однако аварийный стоп типа Ctrl+\ известен всем. Поэтому дело до переинициализации попросу не доходит.. короче не вышло... может я не так понял?

Используйте более корректное зацикливание while(!IsStopped()) и будет вам счастье (не забудьте в цикле, отдать немного времени на нужды терминала - Sleep(50) хотя-бы)

Ну или на крайний случай - таймер высокого разрешения

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

Однако при использовании таймера, будьте готовы к итерациям длиной до 10 секунд, даже если поставите таймер на 1мс (привет копировщикам :)

AccountNumber - имеет минимальную ресурсоемкость, но имеет смысл ее вызывать только в OnInit

 
Aleksei Radchenko:

Используйте более корректное зацикливание while(!IsStopped()) и будет вам счастье (не забудьте в цикле, отдать немного времени на нужды терминала - Sleep(50) хотя-бы)

Ну или на крайний случай - таймер высокого разрешения

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

Однако при использовании таймера, будьте готовы к итерациям длиной до 10 секунд, даже если поставите таймер на 1мс (привет копировщикам :)

AccountNumber - имеет минимальную ресурсоемкость, но имеет смысл ее вызывать только в OnInit


Спасибо за комментарий! По-большому счёту остановился на AccountNumber() - работает железно! В моём случае выход из цикла = завершение работы скрипта, а по поводу, чтобы там терминалу надо какое то время давать - впервые слышу! С какой стати я вообще должен об этом думать?  Если не затруднит, скиньте ссылку =)

псы: привет от копировщиков =)

 
Matvey Alekseev:
Дело в том, что если в скрипте используется бесконечный цикл, например: while(true), то из программы стандартными средствами вообще не выйти корректно... это можно скинуть на специфику MQL конечно, однако аварийный стоп типа Ctrl+\ известен всем. Поэтому дело до переинициализации попросу не доходит.. короче не вышло... может я не так понял?

Нет, Вы все правильно поняли. Но я надеялся, что сработают эти чекбоксы


Но Ваш вариант с анализом номера счета лучше. Если терминал не падает, беспокоиться не надо по моему.

Если хотите не так часто спрашивать номер счета у терминала, и если позволяет алгоритм, то можно такое делать раз в ХХ секунд. Отразите эту команду в OnTimer()

 
Matvey Alekseev:
Всем привет! Есть скрипт, который работает в бэкграунде (while true), и при переключении аккаунтов в терминале продолжает работать... а мне необходимо его перезапускать!
Вопрос: как мне отловить действие logout либо login ? Либо насколько ресурсоёмка функция AccountNumber(), чтобы использовать её в while ? может есть предопределённая для неё переменная по аналогии _Digits_Point и т.д... ?

В чем необходимость, чтобы это был именно скрипт? Почему это не может быть неторгующий эксперт?

 
Stanislav Korotky:

В чем необходимость, чтобы это был именно скрипт? Почему это не может быть неторгующий эксперт?


Пока так удобней.. хотя принципиальной разницы нет.

 
Matvey Alekseev:

Пока так удобней.. хотя принципиальной разницы нет.

Если б был эксперт, проблема бы решилась. Разве не так удобней?

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