Простой, но ограничения.
Терминал MetaTrader 5 представляет собой среду выполнения кода, которая может связываться с внешней целевой URL (если явно сконфигурирована как разрешенный URL) через протоколы HTTP/HTTPS
через порт 80/443
соответственно.
string aCookieHOLDER = NULL,
aHttpHEADERs;
char postBYTEs[],
replBYTEs[];
int aRetCODE;
string aTargetURL = "https://api.myjson.com/bins/56z28";
/* to enable access to the URL-> pointed server,
you should append "https://api.myjson.com/bins/56z28"
to the list of allowed URLs in
(Main Menu -> Tools -> Options, tab "Expert Advisors"):
*/
ResetLastError(); // Reset the last error code
int aTIMEOUT = 5000; // less than 1 sec. is NOT
// enough for slow Internet connection
aRetCODE = WebRequest("GET",
aTargetURL,
aCookieHOLDER,
NULL,
aTIMEOUT,
postBYTEs,
0,
replBYTEs,
aHttpHEADERs
);
if (aRetCODE == EMPTY) // Check errors
{ Print("Error in WebRequest(). Error code = ", GetLastError());
}
else
{ // Load was successfull, PROCESS THE STRING ... assumed to be a JSON
}
Как отмечалось в коде, использовать функцию WebRequest()
, необходимо добавить адреса всех необходимых URL
с (серверы) априори в списке разрешенных URL
с в «экспертах» в окне «Параметры». Порт сервера автоматически выбирается на основе указанного протокола - 80
для «http://
» и 443
для «https://
» (а не бесплатный вариант ...).
WebRequest()
функция является синхронным, что означает его брейки/блоков (!) Выполнение программы и ожидает ответа от запрашиваемого URL. Поскольку задержки при получении ответа могут быть большими, функция недоступна для вызовов от индикаторов, поскольку индикаторы работают в общем потоке, совместно используемом всеми индикаторами и диаграммами на одном символе. Задержка выполнения индикатора на одной из диаграмм символа может остановить обновление всех диаграмм одного и того же символа (!!!!).
Функция может быть вызвана только от Expert Advisors
и scripts
, так как они запускаются в собственных потоках выполнения. Если вы пытаетесь вызвать функцию из Custom Indicator
, GetLastError()
возвратит ошибку 4060
- "Function is not allowed for call".
WebRequest()
не может быть выполнена в тестере.
Плохая новость?
Если все это звучит как плохая новость для вашего Проекта, не сдавайтесь. MQL
код может вызывать DLL-функции, поэтому можно интегрировать справедливый, распределенный, неблокирующий коммуникатор, который плавно взаимодействует с кодом MQL
и не включает какие-либо из перечисленных ограничений в производственной системе.
Из-за ограничений, перечисленных ниже, любая система класса MQL4/MQL5' должна работать с внешним распределенным коммуникатором/процессором JSON, как указано в разделе трейлера в ответ на ваш предыдущий вопрос >>> stackoverflow .com/a/36863108/3666197 – user3666197