如何从JSON中的url读取MQL5
例如,这个简单的JSON:https://api.myjson.com/bins/56z28
{ "employees": [ { "firstName": "John",
"lastName": "Doe"
},
{ "firstName": "Anna",
"lastName": "Smith"
},
{ "firstName": "Peter",
"lastName": "Jones"
}
]
}发布于 2016-05-02 14:37:12
很简单,但限制也适用。
MetaTrader终端5是一个代码执行环境,它可以通过端口80/443上的HTTP/HTTPS协议与外部URL目标(如果被显式配置为允许的URL)进行通信。
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 successful, PROCESS THE STRING ... assumed to be a JSON
}正如代码中所指出的,要使用WebRequest()函数,必须在“选项”窗口的“专家顾问”选项卡中的允许的URL列表中先验地添加所有所需的URLs (服务器)的地址。服务器端口是根据指定的协议自动选择的-- 80用于"http://“,443用于"https://”(不是一个自由选项.)。
WebRequest()函数是同步的,这意味着它的中断/块(!)程序执行,并等待来自请求URL的响应。由于接收响应的延迟可能很大,因此该函数无法用于从指示器发出的调用,因为指示符运行在一个符号上的所有指示符和图表共享的公共线程中。符号的一个图表上的指示性能延迟可能会停止更新同一符号的所有图表(!)。
函数只能从Expert Advisors和scripts调用,因为它们在自己的执行线程中运行。如果尝试从Custom Indicator调用函数,GetLastError()将返回错误4060 - "Function is not allowed for call".。
不能在策略测试器中执行WebRequest()。
坏消息?
如果这对你的项目来说是个坏消息,不要放弃。MQL代码可以调用DLL-函数,因此可以集成一个公平的、分布式的、非阻塞的通信器,它与MQL代码顺利地协作,并且在生产系统中不包含上述任何限制。
https://stackoverflow.com/questions/36978198
复制相似问题