Discusión sobre el artículo "Integración de MetaTrader 5 y Python: recibiendo y enviando datos"

 

Artículo publicado Integración de MetaTrader 5 y Python: recibiendo y enviando datos:

En nuestra época, el procesamiento de datos requiere un extenso instrumental y muchas veces no se limita al entorno protegido (sandbox) de alguna determinada aplicación. Existen los lenguajes de programación especializados y universalmente reconocidos para procesar y analizar los datos, para la estadística y el aprendizaje automático. Python es el líder en este campo. En este artículo, se describe un ejemplo de la integración de MetaTrader 5 y Python a través de los sockets, así como, la obtención de las cotizaciones por medio de la API del terminal.

Escribiremos un programa simple que va a crear un servidor socket y recibir la información necesario de parte del cliente (programa MQL), procesarla, y luego devolver el resultado obtenido. Esta interacción parece la más exigida. Supongamos que necesitamos usar alguna biblioteca del aprendizaje automático, por ejemplo, scikit learn, que va a calcular la regresión lineal usando los precios, y devolver posteriormente las coordenadas de la línea que servirán para visualizarla en el terminal MetaTrader 5. Este será nuestro ejemplo base. No obstante, esta interacción también puede ser usada para entrenar una red neuronal, para enviarle los datos desde el terminal (cotizaciones), aprender y devolver el resultado al terminal.

Ahora, podemos proceder a crear la clase responsable de la manipulación de los sockets:

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 = ''

        whileTrue:
            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

Razón de la queja: