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

 
Gracias. Lástima, no hay casting.
 
fxsaber:
Gracias. Lástima, sin casting.

Como voy a hacer - voy a subir un ejemplo aquí con seguridad, es sólo que yo no tenía esa tarea antes.

Además, si sockets obtendrá su desarrollo en el probador, entonces será muy relevante.

 
Útil. Acabo de empezar con python)
 

Para la historia, hay una gran biblioteca de matemáticas estándar en MQL5 en las fuentes a la derecha en el terminal:

 

Siempre leo con placer los artículos de @Maxim Dmitrievsky, me gusta su enfoque a la hora de escribir artículos - la implementación de la idea en sí se describe de forma concisa, no me gusta últimamente "carretes kilométricos" de código y masticar cada línea a "y ahora nombraremos la variable XY, donde almacenaremos ...".

Gracias.

 
Igor Makanu:

Siempre leo con placer los artículos de @Maxim Dmitrievsky, me gusta su enfoque a la hora de escribir artículos - la implementación de la idea se describe de forma concisa, no me gustan últimamente "tramos kilométricos" de código y masticar cada línea a "y ahora nombraremos la variable XY, donde almacenaremos ...".

Gracias.

Así que hay diferentes lectores, tanto sofisticados como principiantes.
 
Alexander Fedosov:
Así que hay diferentes tipos de lectores, tanto experimentados y novatos.

Bueno, como si tienes razón, y no muy - la atención humana es un recurso muy limitado, e incluso un lector experimentado para entrar en la esencia del artículo tiene que leer "en diagonal" de lo contrario al final del artículo simplemente no digerir el material.

Si no me equivoco, una persona puede digerir material nuevo sólo durante los primeros 15 minutos, después la atención disminuye y el efecto de los nuevos conocimientos será nulo - como se suele decir "menos es mejor".

Es posible, por supuesto, para estirar la lectura de un artículo grande, como la lectura de una revista o un libro durante varios días, pero esta no es mi opción

 

socketclientEA (Si-6.19,M15) Conexión localhost:9090 error 4014

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

Cuando se llama desde el indicador,GetLastError() devolverá el error 4014 - "Función del sistema no permitida para ser llamada".

Solución:

La dirección de conexión debe añadirse a la lista de direcciones permitidas en el terminal cliente (sección Herramientas \ Configuración \ Asesores Expertos).

Permitir Webrequest para la siguiente url:

http://localhost

 
MetaQuotes Software Corp.:

Nuevo artículo MetaTrader 5 y la integración de Python: recepción y envío de datos ha sido publicado:

Autor: Maxim Dmitrievsky

Gracias finalmente .. :)

Por favor, publique más .. Mucho más .. Me encanta ..
 
¡MT5 por fin interactúa con python!