如何从 MetaTrader 终端 5 MQL 5 post 向我的 nodejs 服务器发出请求,该服务器在我的 MT5 主机上本地 运行?
How to post from MetaTrader Terminal 5 MQL 5 a request to my nodejs server, which is running locally on my MT5 host?
我正在尝试在我的 nodejs 服务器中获取外汇汇率,然后 socke.io 将它们发送给客户端,同时 运行 正在使用 MetaTrader 终端 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 服务器上,控制台没有任何记录。
工作计划:
启用MT4/5使用{http:|https:}
transport-class选择目标
创建 MT4/5 代码以执行某种基于 {http:|https:}
的服务
实现end-to-end逻辑被包裹+隐藏在哑巴http-protocol交换
1) 终端权限:
使用终端->工具->选项启用[x] "允许WebRequestURL" 以使用您选择的 localhost
{http:|https:}
URL,匹配 nodejs-server 设置,在列表中
2) WebRequest()
里面的代码 event-loop
根据您的意图,创建一个 MQL4
脚本,使用 built-in IDE F4 或使用您选择的外部编辑器并将生成的 .mq4
脚本文件保存在 ~an_MT4_Terminal_Home_Directory/MQL4/Scripts
目录
event-loop 主要是你的设计工作:
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
}
}
}
3) end-to-end 逻辑
你的设计 creme-ala-creme 来了。
还有其他方法吗?
是的,有。 That would be the one of my choice - using ZeroMQ
or nanomsg
on both sides ( MT4/5 Terminal & NodeJS ), thus being able to fully .
您也可以尝试 MetaApi https://metaapi.cloud 云服务,它提供 REST API 和 WebSocket API 访问 MetaTrader 4 和 MetaTrader 5 账户。
官方 REST API 文档:https://metaapi.cloud/docs/client
SDK:https://metaapi.cloud/sdks(javascript、python 和 Java SDK 于 2021 年 4 月提供)
支持读取账户信息、持仓、订单、交易历史、接收报价、访问市场数据。
该服务还提供跟单交易API https://metaapi.cloud/docs/copyfactory and API to calculate forex trading metrics on a MetaTrader account https://metaapi.cloud/docs/metastats.
我正在尝试在我的 nodejs 服务器中获取外汇汇率,然后 socke.io 将它们发送给客户端,同时 运行 正在使用 MetaTrader 终端 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 服务器上,控制台没有任何记录。
工作计划:
启用MT4/5使用
{http:|https:}
transport-class选择目标创建 MT4/5 代码以执行某种基于
{http:|https:}
的服务实现end-to-end逻辑被包裹+隐藏在哑巴http-protocol交换
1) 终端权限:
使用终端->工具->选项启用[x] "允许WebRequestURL" 以使用您选择的 localhost
{http:|https:}
URL,匹配 nodejs-server 设置,在列表中
2) WebRequest()
里面的代码 event-loop
根据您的意图,创建一个 MQL4
脚本,使用 built-in IDE F4 或使用您选择的外部编辑器并将生成的 .mq4
脚本文件保存在 ~an_MT4_Terminal_Home_Directory/MQL4/Scripts
目录
event-loop 主要是你的设计工作:
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
}
}
}
3) end-to-end 逻辑
你的设计 creme-ala-creme 来了。
还有其他方法吗?
是的,有。 That would be the one of my choice - using ZeroMQ
or nanomsg
on both sides ( MT4/5 Terminal & NodeJS ), thus being able to fully
您也可以尝试 MetaApi https://metaapi.cloud 云服务,它提供 REST API 和 WebSocket API 访问 MetaTrader 4 和 MetaTrader 5 账户。
官方 REST API 文档:https://metaapi.cloud/docs/client
SDK:https://metaapi.cloud/sdks(javascript、python 和 Java SDK 于 2021 年 4 月提供)
支持读取账户信息、持仓、订单、交易历史、接收报价、访问市场数据。
该服务还提供跟单交易API https://metaapi.cloud/docs/copyfactory and API to calculate forex trading metrics on a MetaTrader account https://metaapi.cloud/docs/metastats.