如何从MetaTrader Terminal 5 MQL 5发送请求到我的nodejs服务器,该服务器在我的MT5主机上本地运行?

时间:2017-02-07 20:01:00

标签: node.js mql4 metatrader4 mql5

我试图在我的nodejs服务器中获取外汇汇率,socke.io将它们发送到客户端,同时运行MetaTrader Terminal 5或4。

所以我想我必须使用MQL4 / 5。我知道如何处理我的nodejs服务器中的请求。我不知道的是在哪里编写MQL4代码,在MetaTrader终端中配置什么。

假设我想每次更改时都将EUR / USD出价率发送到我的nodejs服务器。我如何使用MT4 / 5和MQL4 / 5实现这一目标?

我的nodejs代码:

app.post('/fxroute', (req, res) => {
   console.log(req);
   let fxRates = req.body // dont know if the payload will be in body
   socket.emit('fxRates', fxRates);
});

MQL5脚本:

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(){
     string  headers;
     char    data[],
             result[];
     string             str = "data=value";        // POST-data, variables to send    
     StringToCharArray( str,                data );
     string          b = CharArrayToString( data );
     Print( "Test:", b ); // just a test of data, if good ... OK, data was setup correctly.

     WebRequest( "POST",
                 "http://localhost:3000/fxroute",
                 NULL,
                 NULL,
                 3000,
                 data,
                 ArraySize( data ),
                 result,
                 headers
                 );
     Print( CharArrayToString( result ) );   // see the results
                                             // it returns
                                             // "Results:" No posted data.
  }

当我编译并运行时,我发现它是在MT Experts选项卡中执行的,但是在我的nodejs服务器上,控制台没有记录任何内容。

2 个答案:

答案 0 :(得分:3)

工作计划:

  1. 启用 MT4 / 5将 0.5+(1/2) 传输等级用于所选目标

  2. 创建 MT4 / 5代码以执行某种基于{http:|https:}的服务

  3. 实施端到端逻辑被包装+隐藏在愚蠢的http协议交换中

  4. 1)终端权限:

    使用终端 - >工具 - >选项启用 [x] " 允许WebRequest网址"使用您选择的{http:|https:} localhost网址,与列表中的nodejs-server设置相匹配 enter image description here

    2)事件循环

    中的 {http:|https:} 代码

    根据您的意图,使用内置IDE F4 或使用外部编辑器创建 WebRequest() 脚本您选择并将生成的 MQL4 脚本文件保存在 .mq4 目录

    事件循环主要是你的设计工作:

    ~an_MT4_Terminal_Home_Directory/MQL4/Scripts

    For further details, may like to check my other posts on WebRequest() use-cases and warnings about it's principal limitations.

    3)端到端逻辑

    这是你设计的奶油 - 奶油。

    还有其他办法吗?

    是的,有。 That would be the one of my choice - using ZeroMQ or nanomsg on both sides(MT4 / 5终端和NodeJS),因此能够完全enjoy the freedom of a full-scale distributed systems design ( check the principal aMiniRESPONDER()-prototype example structure for [SIG,MSG] jobs in fully distributed systems )

答案 1 :(得分:0)

您还可以尝试使用此云服务,该服务提供对MetaTrader 4和MetaTrader 5帐户的REST API和websocket API访问,称为MetaApi https://metaapi.cloud

官方API文档:https://metaapi.cloud/docs/client

SDK:https://metaapi.cloud/sdks(可使用node.js SDK)

它支持读取帐户信息,头寸,订单,交易历史记录,接收报价和访问市场数据。