Discusión sobre el artículo "Integración de MetaTrader 5 y Python: recibiendo y enviando datos" - página 11

 
Gracias hermano. Este artículo es greate. Usted me ayuda mucho. :*
 

Gracias por este artículo.

Me pregunto por qué tenemos que seguir llamando a socket=SocketCreate() y SocketClose() en OnTick().

Parece un poco ineficiente hacer esto repetidamente.
¿No mantiene el socket abierto/vivo? ¿O más bien es posible mantener el socket abierto/vivo?

 
Ernesto Che datos para dibujar fibs y canales. En tu ejemplo python devuelve dos valores, pero yo tengo que devolver datos de hasta 12 estructuras diferentes con tres puntos de coordenadas cada una.
Al principio me atasqué con el hecho de que mt5 no devolvía una cadena larga describiendo todas las estructuras a la vez. Hice el cambio mediante varias consultas más cortas. Todo parece funcionar, pero de vez en cuando.
Algo me dice que se trata de la configuración de tiempo de espera. ¿Podría por favor sugerir una dirección para encontrar una solución?
Gracias de antemano

Hola! yo también estaba planteando un socket. Tengo un problema - escribo un indicador en python. Toma datos de mt5 mucho y tanto como quieras, pero para devolver datos a mt5 no es tan fácil. En el socket es posible transmitir sólo una cadena de hasta 100 cadenas pequeñas, pero necesito más. ¿Qué soluciones hay además de socket? y además de web/internet solicitudes de intercambio de datos entre Python->MT5? No quiero levantar MySQL DB para esto. Estamos hablando de transferir de python a MT5 unos 40 pares de divisas con un histórico de 1000 lecturas recalculadas y posterior construcción de líneas de indicadores en MT5... Quiero huir de los cálculos en MT5 ya que python lo hace mucho más rápido. Así que me gustaría ver todas las líneas del indicador y no sólo la última barra transmitida por una cadena una vez por segundo.
¿Puede alguien aconsejarme algo útil?

TCP/IP Socket - MT5 recibirá una cadena de todos modos y no caben 30 000 datos.... Las limitaciones de una variable de cadena incluso en formato jason es de hasta 100 cadenas. ¿Cuál es el uso de este Socket?
Resulta que para big data una salida es Python-->MySQL-->MT5

También se me ocurrió esta idea:

Usando multiprocessing.shared_memory en Python y WinAPI en MQL5 te permite leer datos directamente de la memoria.
 
Alex Renko #:
¿excepto para solicitantes web/internet de intercambio de datos entre Python->MT5? no quiero traer a colación MySQL DB.

"traer a colación SQLite" - MT5 lo tiene incorporado, python obviamente también....

Puedes usar el socket para reportar lo que necesites puntualmente (señales, alertas, etc), y meter big data en SQLite. Es decir, en python metes todo lo que necesites en la base de datos y soplas el socket de "actualización de datos". Y en MQL puedes releer la base de datos en el silbato.

La base de datos en sí se puede almacenar en un disco marco

 
Maxim Kuznetsov #:

"traer SQLite" - MT5 lo tiene incorporado, python obviamente también lo tiene.

Usas el socket para reportar lo que necesites puntualmente (señales, alertas, etc.), y pones big data en SQLite. Es decir, en python pones todo lo que necesitas en la base de datos y soplas el socket de "actualización de datos". Y en MQL puedes releer la base de datos en el silbato

La base de datos en sí se puede almacenar en un disco marco

Veo su punto, gracias por la respuesta ... Eso pensé
MetaTrader 5 utiliza su propio lenguaje de programación MQL5, que se ejecuta en un proceso aislado. Esto no permite la interacción directa con la memoria compartida del sistema operativo, como pueden hacer otras aplicaciones que utilizan APIs de bajo nivel.

Shell dentro de un shell.... Hace 20 años que no pueden hacer una versión nativa para mac...

 
Alex Renko #:

Veo su punto, gracias por la respuesta.... así lo pensé
MetaTrader 5 utiliza su propio lenguaje de programación MQL5, que se ejecuta en un proceso aislado. Esto no permite la interacción directa con la memoria compartida del sistema operativo, como pueden hacer otras aplicaciones que utilizan APIs de bajo nivel.

Shell dentro de un shell.... Hace 20 años que no pueden hacer una versión nativa para mac...

nadie prohibe usar DLL - y ahi puedes hacer lo que quieras.

Puedes buscar en memoria directamente (probablemente no más rápido :-) ).

O soluciones intermedias eficientes, a la in-memory key-value db.

Sólo que en la mayoría de los casos, los frenos y el cuello de botella están del lado de Python

 
para mi no funciona ejemplo alguien sabe por que ? lo puse en la opcion 127.0.0.1:9090 ejecute python socketserver.py e ejecute EA socketclientEA.ex5 ( despues de arreglar char a uchar )lo ejecute , pero me vuelve a ejecutar este error
2025.10.09 10:41:44.665 socketclientEA (#GDAXIm,H1) Conexión localhost:9090 error 4014