Discussão do artigo "Integração da MetaTrader 5 e Python: recebendo e enviando dados"

 

Novo artigo Integração da MetaTrader 5 e Python: recebendo e enviando dados foi publicado:

O vasto processamento de dados requer ferramentas extensas e muitas vezes está além do ambiente seguro de um único aplicativo. Linguagens de programação especializadas são usadas para processar e analisar dados, estatísticas e aprendizado de máquina. Uma das principais linguagens de programação para processamento de dados é o Python. O artigo fornece uma descrição de como conectar a MetaTrader 5 e o Python usando sockets, além de como receber cotações por meio da API do terminal.

Nós vamos escrever um programa simples que irá criar um servidor socket e receber as informações necessárias do cliente (o programa em MQL5), manipulá-lo e enviar o resultado de volta. Esse parece ser o método de interação mais eficiente. Suponha que nós precisamos usar uma biblioteca de aprendizado de máquina, como por exemplo scikit learn, que calculará a regressão linear usando preços e retornar as coordenadas, com base nos quais uma linha pode ser desenhada no terminal MetaTrader 5. Este é um exemplo simples. No entanto, essa interação também pode ser usada para treinar uma rede neural, para enviar à ela dados do terminal (cotações), aprender e retornar o resultado para o terminal.

Agora nós podemos continuar a criação de uma classe responsável pela manipulação do socket:
class socketserver:
    def __init__(self, address = '', port = 9090):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.address = address
        self.port = port
        self.sock.bind((self.address, self.port))
        self.cummdata = ''
        
    def recvmsg(self):
        self.sock.listen(1)
        self.conn, self.addr = self.sock.accept()
        print('connected to', self.addr)
        self.cummdata = ''

        while True:
            data = self.conn.recv(10000)
            self.cummdata+=data.decode("utf-8")
            if not data:
                break    
            self.conn.send(bytes(calcregr(self.cummdata), "utf-8"))
            return self.cummdata
            
    def __del__(self):
        self.sock.close()

Autor: Maxim Dmitrievsky

 
Obrigado. Pena que não há elenco.
[Excluído]  
fxsaber:
Obrigado. É uma pena que não haja fundição.

Como farei - com certeza carregarei um exemplo aqui, mas é que não tinha essa tarefa antes.

Além disso, se os soquetes forem desenvolvidos no testador, isso será muito relevante.

 
Útil. Acabei de começar a usar python)
 

Para o histórico, há uma grande biblioteca de matemática padrão em MQL5 nos códigos-fonte, diretamente no terminal:

 

Sempre leio os artigos de @Maxim Dmitrievsky com prazer, gosto de sua abordagem para escrever artigos - a implementação da ideia em si é descrita de forma concisa, não gosto de "carretéis quilométricos" de código ultimamente e de mastigar cada linha para "e agora nomearemos a variável XY, onde armazenaremos...".

Obrigado!

 
Igor Makanu:

É com prazer que sempre leio os artigos de @Maxim Dmitrievsky, pois gosto de sua abordagem para escrever artigos - a implementação da ideia é descrita de forma concisa, não gosto de "trechos quilométricos" de código ultimamente e de mastigar cada linha para "e agora nomearemos a variável XY, onde armazenaremos...".

Obrigado!

Portanto, há diferentes leitores, tanto sofisticados quanto iniciantes.
 
Alexander Fedosov:
Portanto, há diferentes tipos de leitores, tanto experientes quanto novatos.

A atenção humana é um recurso muito limitado, e até mesmo um leitor experiente, para compreender a essência do artigo, precisa ler "na diagonal", caso contrário, ao final do artigo, simplesmente não conseguirá digerir o material.

Se não me engano, uma pessoa pode digerir um novo material somente nos primeiros 15 minutos, depois a atenção diminui e o efeito do novo conhecimento será nulo - como dizem "menos é melhor".

É possível, é claro, esticar a leitura de um artigo grande, como ler uma revista ou um livro por vários dias, mas essa não é minha opção

 

socketclientEA (Si-6.19,M15) Conexão localhost:9090 erro 4014

https://www.mql5.com/pt/docs/network/socketconnect

Quando chamado a partir do indicador,GetLastError() retornará o erro 4014 - "Função do sistema que não pode ser chamada".

Solução:

O endereço para conexão deve ser adicionado à lista de endereços permitidos no lado do terminal do cliente (seção Tools \ Settings \ Expert Advisors).

Permitir Webrequest para a seguinte url:

http://localhost

 
MetaQuotes Software Corp.:

Foi publicado o novo artigo Integração entre MetaTrader 5 e Python: recebendo e enviando dados:

Autor: Maxim Dmitrievsky

Obrigado finalmente... :)

Por favor, publique mais... Muito mais... Eu adoro isso...
 
O MT5 finalmente faz interface com o python!