如何从 MQL5 中的网址读取 JSON ?
例如,这个简单的 JSON
来自:https://api.myjson.com/bins/56z28
{ "employees": [ { "firstName": "John",
"lastName": "Doe"
},
{ "firstName": "Anna",
"lastName": "Smith"
},
{ "firstName": "Peter",
"lastName": "Jones"
}
]
}
1 回答
很简单,但限制适用 .
MetaTrader Terminal 5是一个代码执行环境,可以通过端口
80/443
分别通过两个协议与外部URL目标(如果明确配置为允许的URL)进行通信 .如代码中所述,要使用
WebRequest()
函数,必须在"Options"窗口的"Expert Advisors"选项卡的允许URL
列表中添加所有必需的URL
(服务器)a-priori的地址 . 服务器端口根据指定的协议自动选择 -80
表示“http://
”,443
表示“https://
”(不是空闲选项...) .WebRequest()
函数是同步的,这意味着它中断/阻止(!)程序执行并等待来自请求的URL的响应 . 由于接收响应的延迟可能很大,因此该功能不适用于来自指示器的调用,因为指示符在一个符号上由所有指示符和图表共享的公共线程中运行 . 符号图表之一上的指标性能延迟可能会停止更新同一符号的所有图表(!!!!) .该函数只能从
Expert Advisors
和scripts
调用,因为它们在自己的执行线程中运行 . 如果您尝试从Custom Indicator
调用该函数,GetLastError()
将返回错误4060
-"Function is not allowed for call".
WebRequest()
无法在策略测试程序中执行 .坏消息?
如果所有这些对您的项目来说都是一个坏消息,请不要放弃 .
MQL
代码可以调用DLL函数,因此可以集成一个公平的,分布式的,非阻塞的通信器,它可以平滑地与MQL
代码协作,并且不包括 生产环境 系统中的任何上述限制 .