如何从MetaTraderterminal5发布MQL 5请求到我的MT5主机本地运行的nodejs服务器?
我试图在我的nodejs服务器上获得外汇汇率,并在运行MetaTraderterminal5或4时将socke.io发送给客户端。
所以我想我必须使用MQL4 / 5。 我知道如何处理我的nodejs服务器中的请求。 我不知道在哪里写MQL4代码,在我的MetaTraderterminal中configuration什么。
比方说,我想发送欧元/美元出价率到我的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服务器上,控制台什么也没有logging。
工作计划:
-
启用 MT4 / 5使用
{http:|https:}
transport-classselect目标 -
创build MT4 / 5代码来执行某种基于
{http:|https:}
的服务 -
实现端到端的逻辑,将其隐藏在哑HTTP协议交换中
1)terminal权限:
使用Terminal-> Tools-> Options enable [x] “ 允许WebRequest URL ”使用您select的localhost
{http:|https:}
URL,与列表中的nodejs-server设置匹配
2)事件循环内的WebRequest()
代码
根据您的意图,使用内置IDE F4或使用您select的外部编辑器创buildMQL4
脚本,并将生成的.mq4
脚本文件保存在~an_MT4_Terminal_Home_Directory/MQL4/Scripts
目录中
事件循环主要是您的devise工作:
int start(){ while !isStopped(){ // ACK LOOP if RefreshRates(): // NEW QUOTE has arrived ... // JOB PROCESS Bid int aHttpRetCODE = WebRequest(...); // SIG-> NodeJS Server ... // JOB PROCESS Response ( if a bi-directional service ) else: Sleep(...); // NOP on NACK, Terminal has nothing to do } }
有关更多详细信息 ,可能希望检查我的WebRequest()
用例和其他主要限制的警告。
3)端到端的逻辑
这里是您的devise的奶油奶油。
有没有其他的方法?
就在这里。 这将是我的select之一 – 在两侧使用ZeroMQ
或nanomsg
(MT4 / 5 Terminal&NodeJS),从而能够充分享受全面分布式系统devise的自由(检查主要的aMiniRESPONDER()
原型完整分布式系统中[SIG,MSG]
作业的示例结构) 。