- Получение общего списка свойств терминала и программы
- Номер сборки терминала
- Тип и лицензия программы
- Режимы работы терминала и программы
- Разрешения
- Проверка сетевых подключений
- Вычислительные ресурсы: память, диск, процессор
- Характеристики экрана
- Строковые свойства терминала и программы
- Настраиваемые свойства: лимит баров и язык интерфейса
- Привязка программы к свойствам среды исполнения
- Проверка состояния клавиатуры
- Проверка статуса и причины остановки MQL-программы
- Программное закрытие терминала и код возврата
- Обработка ошибок времени исполнения программы
- Пользовательские ошибки
- Управление отладкой
- Предопределенные переменные
- Предопределенные константы языка MQL5
Проверка сетевых подключений
Как известно, платформа MetaTrader 5 является распределенной системой, включающей несколько звеньев. Помимо клиентского терминала и сервера брокера, в неё входит сообщество MQL5, Маркет, облачные сервисы и многое другое. По сути распределенной является и клиентская часть, состоящая из терминала и агентов тестирования, которые могут быть развернуты на множестве компьютеров локальной сети. При этом связь между любыми звеньями может, потенциально, нарушаться по тем или иным причинам. И хотя инфраструктура MetaTrader 5 пытается автоматически восстановить свою работоспособность, не всегда это удается сделать быстро.
Поэтому в MQL-программах следует учитывать возможность отсутствия связи. MQL5 API позволяет контролировать наиболее важные связи: с торговым сервером и сообществом MQL5. Следующие свойства доступны в TerminalInfoInteger.
Идентификатор |
Описание |
---|---|
TERMINAL_CONNECTED |
наличие подключения к торговому серверу |
TERMINAL_PING_LAST |
последнее известное значение скорости связи с торговым сервером в микросекундах |
TERMINAL_COMMUNITY_ACCOUNT |
наличие авторизационных данных MQL5.community в терминале |
TERMINAL_COMMUNITY_CONNECTION |
наличие подключения к MQL5.community |
TERMINAL_MQID |
наличие MetaQuotes ID для отправки push-уведомлений |
Все свойства кроме TERMINAL_PING_LAST являются булевыми флагами. TERMINAL_PING_LAST содержит значение типа int.
Помимо самого соединения, MQL-программа часто должна убедиться в актуальности имеющихся данных. В частности, взведенный флаг TERMINAL_CONNECTED еще не означает, что интересующие вас котировки синхронизированы с сервером. Для этого нужно дополнительно делать проверки с помощью SymbolIsSynchronized или SeriesInfoInteger(..., SERIES_SYNCHRONIZED) — об этих функциях мы поговорим в главе о таймсериях.
Кроме того функция TerminalInfoDouble поддерживает еще одно интересное свойство: TERMINAL_RETRANSMISSION. Это процент повторно отправляемых сетевых пакетов в TCP/IP протоколе для всех запущенных приложений и служб на данном компьютере. Даже в самой быстрой и правильно настроенной сети иногда происходят потери пакетов и, как следствие, отсутствие подтверждений о доставке пакетов между получателем и отправителем. В таких случаях производится повторная отправка "потерянного" пакета. Сам терминал не считает показатель TERMINAL_RETRANSMISSION, а запрашивает его раз в минуту в операционной системе.
Высокое значение данного показателя может говорить о проблемах внешнего, по отношению к MetaTrader 5, характера (на магистральном канале в Интернет, у вашего провайдера, в локальной сети или на компьютере), что способно ухудшить качество подключения терминала.
Если есть подтвержденное соединение с сообществом (TERMINAL_COMMUNITY_CONNECTION), MQL-программа может запросить текущий баланс пользователя, вызвав TerminalInfoDouble(TERMINAL_COMMUNITY_BALANCE). Это позволяет пользоваться автоматизированной подпиской на платные торговые сигналы (документация API доступна на сайте mql5.com).
Проверим перечисленные свойства с помощью скрипта EnvConnection.mq5.
void OnStart()
|
Вот пример лога (значения будут соответствовать вашим настройкам).
TerminalInfoInteger(TERMINAL_CONNECTED)=1 / ok
|