Сетевые функции

MQL-программы могут обмениваться данными с другими компьютерами в распределенной сети или серверами Интернет, используя различные протоколы. В частности, поддерживаются: веб-сайты и сервисы (HTTP/HTTPS), передача файлов (FTP), отправка электронных писем (SMTP) и push-уведомления.

Все функции данной направленности можно условно поделить на 3 группы:

  • SendFTP, SendMail и SendNotification — это наиболее простые функции для отправки файлов, электронной почты и мобильных уведомлений;
  • Функция WebRequest предназначена для работы с веб-ресурсами и позволяет легко отправлять HTTP-запросы (в том числе, GET и POST);
  • Набор Socket-функций позволяет создать TCP-соединение (в том числе защищенное соединение TLS) с удаленным хостом через системные сокеты.

Последовательность, в которой перечислены группы, соответствует переходу от высокоуровневых функций, предлагающих уже готовые механизмы взаимодействия клиента и сервера, до низкоуровневых, позволяющих реализовать произвольный прикладной протокол по требованиям того или иного публичного сервиса (например, криптовалютной биржи или сервиса торговых сигналов). Разумеется, такая реализация предполагает большие усилия.

Для безопасности конечного пользователя MetaTrader 5 требует, чтобы список разрешенных web-адресов, с которыми может соединяться MQL-программа при помощи Socket-функций и WebRequest, был явно указан в диалоге настроек на закладке Советники. Здесь можно указывать домены, полный путь к web-страницам (не только сайт, но и остальные фрагменты URL, например, папки или номер порта) или IP-адреса. Ниже представлен скриншот с настройками для некоторых доменов из примеров этой главы.

Разрешения на доступ к сетевым ресурсам в настройках терминала

Разрешения на доступ к сетевым ресурсам в настройках терминала

Программно редактировать этот список нельзя. При попытке обратиться к сетевому ресурсу, который отсутствует в данном списке, MQL-программа получит ошибку, и запрос будет отклонен.

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