代码之家  ›  专栏  ›  技术社区  ›  fadi

如何从MQL5中的URL读取JSON?

  •  2
  • fadi  · 技术社区  · 9 年前

    我如何阅读 JSON 从中的url MQL5 ?

    例如这个简单的 杰森 来自: https://api.myjson.com/bins/56z28

    { "employees": [ { "firstName": "John",
                       "lastName":  "Doe"
                       },
                     { "firstName": "Anna",
                       "lastName":  "Smith"
                       },
                     { "firstName": "Peter",
                       "lastName":  "Jones"
                       }
                     ]
      }
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   halfer    2 年前

    简单,但有限制。

    MetaTrader Terminal 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 s(服务器)优先出现在允许的列表中 统一资源定位地址 位于“选项”窗口的“专家顾问”选项卡中。根据指定的协议自动选择服务器端口- 80 用于“ http:// “和443用于” https:// “(不是免费选项……)。

    这个 Web请求() 作用 是同步的 ,这意味着它的断点/块(!)程序执行并等待来自请求URL的响应。由于接收响应的延迟可能很大,因此该函数不可用于从指示符调用,因为指示符在一个符号上由所有指示符和图表共享的公共线程中运行。符号某个图表上的指示器性能延迟可能会停止更新相同符号(!!!!)的所有图表。

    只能从调用函数 Expert Advisors scripts ,因为它们在自己的执行线程中运行。如果尝试从 Custom Indicator , GetLastError() 将返回错误 4060 "Function is not allowed for call".

    Web请求() 不能 在Strategy Tester中执行。


    坏消息?

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