我有这两个代码,但 Metatrader 5 给我错误 4014。我使用的是 Mac M1,这可能是什么?为什么我没有权限?
网络防火墙已关闭;我不知道这是否与在Windows上模拟Metatrader 5有什么关系。 我需要用套接字连接两者以接收股票数据,因为 Metatrader 5 Python 库仅适用于 Windows
import socket
def main():
host = '127.0.0.1' # Endereço IP do servidor
port = 12345 # Porta que o servidor está ouvindo
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(1)
print("Servidor ouvindo em {}:{}".format(host, port))
conn, addr = server_socket.accept()
print("Conexão de: " + str(addr))
while True:
data = conn.recv(1024).decode('utf-8')
if not data:
break
print("Do MT5: " + data)
conn.send(data.encode('utf-8')) # Ecoando os dados recebidos
conn.close()
if __name__ == '__main__':
main()
MT5
//+------------------------------------------------------------------+
//| MT5Client.mq5 |
//| Copyright (c) MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property script_show_inputs
input string server_ip = "127.0.0.1"; // Endereço IP do servidor
input int server_port = 12345; // Porta do servidor
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
int socket = SocketCreate();
if(socket == INVALID_HANDLE)
{
Print("Erro ao criar o socket: ", GetLastError());
return;
}
if(!SocketConnect(socket, server_ip, server_port, 10000)) // Timeout em 10 segundos
{
Print("Erro ao conectar ao servidor: ", GetLastError());
SocketClose(socket);
return;
}
string message = "Olá, servidor!";
uchar send_data[];
StringToCharArray(message, send_data);
if(!SocketSend(socket, send_data, ArraySize(send_data)))
{
Print("Erro ao enviar dados: ", GetLastError());
SocketClose(socket);
return;
}
uchar receive_data[1024];
int received = SocketRead(socket, receive_data, 0, ArraySize(receive_data));
if(received > 0)
{
string received_message = CharArrayToString(receive_data, 0, received);
Print("Do servidor: ", received_message);
}
else if(received < 0)
{
Print("Erro ao ler dados: ", GetLastError());
}
SocketClose(socket);
}
//+------------------------------------------------------------------+
根据https://www.mql5.com/en/docs/network/socketconnect
连接地址应添加到允许的地址列表中 客户端(工具\选项\EA 交易)。
如果连接失败,则错误 5272 (ERR_NETSOCKET_CANNOT_CONNECT) 写入_LastError。
该函数只能从 EA 交易和脚本中调用,如下所示 它们在自己的执行线程中运行。如果从指示器调用, GetLastError() 返回
错误 4014 – “不允许调用该函数”。
因此您应该将127.0.0.1添加到“工具\选项\EA交易”