首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从MQL5中的URL中读取JSON?

如何从MQL5中的URL中读取JSON?
EN

Stack Overflow用户
提问于 2016-05-02 08:32:17
回答 1查看 4.5K关注 0票数 2

如何从JSON中的url读取MQL5

例如,这个简单的JSONhttps://api.myjson.com/bins/56z28

代码语言:javascript
复制
{ "employees": [ { "firstName": "John",
                   "lastName":  "Doe"
                   },
                 { "firstName": "Anna",
                   "lastName":  "Smith"
                   },
                 { "firstName": "Peter",
                   "lastName":  "Jones"
                   }
                 ]
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-02 14:37:12

很简单,但限制也适用。

MetaTrader终端5是一个代码执行环境,它可以通过端口80/443上的HTTP/HTTPS协议与外部URL目标(如果被显式配置为允许的URL)进行通信。

代码语言:javascript
复制
   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 Advisorsscripts调用,因为它们在自己的执行线程中运行。如果尝试从Custom Indicator调用函数,GetLastError()将返回错误4060 - "Function is not allowed for call".

不能在策略测试器中执行WebRequest()

坏消息?

如果这对你的项目来说是个坏消息,不要放弃。MQL代码可以调用DLL-函数,因此可以集成一个公平的、分布式的、非阻塞的通信器,它与MQL代码顺利地协作,并且在生产系统中不包含上述任何限制。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36978198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档