Просто, но есть ограничения.
MetaTrader Terminal 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
кодом и не включает ни одно из вышеперечисленных ограничений в производственную систему.
person
user3666197
schedule
02.05.2016
MQL4/MQL5
должна работать с внешним распределеннымJSON
коммуникатором/процессором, как указано в трейлере ответа на ваш предыдущий вопрос ››› stackoverflow.com/a/36863108/3666197 - person user3666197   schedule 02.05.2016