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

[Eliminado]  
MrBrooklin:

¡Hola, Maxim!

Estoy un poco avanzado en mis conocimientos de Python, pero no encuentro información detallada sobre el acceso conjunto al archivo csv desde Python y un programa de terceros, por ejemplo, el mismo Expert Advisor escrito en MQL5. En pocas palabras, el código Python escribe periódicamente información en el archivo csv, y el Asesor Experto MQL5 lee la información de él y ejecuta los comandos que necesito. ¿Es posible este acceso conjunto desde ambos lados?

Saludos, Vladimir.

No, pero ambos programas pueden intentar abrir el archivo si no está ocupado por otro programa. Y deben cerrarlo después de leer/escribir.

 
Maxim Dmitrievsky:

No, pero ambos programas pueden intentar abrir un archivo si no está ocupado por otro programa. Y deben cerrarlo después de leer/escribir.

Gracias, Maxim, por la explicación, especialmente sobre el cierre del archivo después de leer/escribir. Este es el punto que necesitaba entender.

Saludos, Vladimir.

 
Maxim Dmitrievsky:

No, pero ambos programas pueden intentar abrir un archivo si no está ocupado por otro programa. Y deben cerrarlo después de leer/escribir.

Hola Maxim, he tenido en cuenta este punto. Por favor, ayúdame a entender un punto más, a saber, la codificación del texto de un archivo csv creado con Python y la posterior lectura de este texto por un Asesor Experto creado en MQL5. He revisado mucha información en la página web de MQL5 y en otros recursos de Internet, pero no he encontrado una explicación clara. En general, el código del programa creado utilizando el lenguaje Python abre un nuevo archivo csv y escribe en él la información que necesito. Para simplificar el ajuste se escribe mientras que una palabra en ruso, que en realidad se sparsen del sitio. La palabra en el archivo csv abierto leo sin problemas, pero el Asesor Experto no entiende la codificación de esta palabra. Eso es seguro, porque al escribir el EA (¡por cierto, me las arreglé para escribir el primer código independiente!) Utilicé un archivo csv con el mismo nombre y escribí la misma palabra en la celda A1, pero sólo desde el teclado. Traté de cambiar todo en ambos códigos (me refiero en Python y MQL5), pero nada funciona todavía.

¿Puedes decirme qué codificación (encoding=?) Para utilizar el código de Python:

with open(save_file, 'w') as save:

y qué codificación (encoding=?) usar para el código MQL5:

filehandle=FileOpen("EUR_USD.csv",FILE_READ|FILE_SHARE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON)

¿para hacerlos "amigos"? Llevo varios días cambiando estas codificaciones y no se me ocurre qué hacer a continuación. Y sólo hay un punto que impide el trabajo normal.

Tal vez todavía no he encontrado todas las codificaciones para Python, pero lo más interesante es que cuando el código MQL5 tiene la codificación FILE_ANSI, que se da en la línea de arriba, y cuando escribo la palabra, por ejemplo, "comprar" en el teclado en un archivo csv, después de guardar este archivo, el Asesor Experto lee y funciona perfectamente.

A veces pienso: ¡quizás no sea la codificación! ¿Qué es entonces?

Por favor, ayúdenme a entender cuál es la razón.

Saludos, Vladimir.


P.D. Finalmente encontré al menos una explicación razonable: "En Python 3, la codificación por defecto es UTF-8".

[Eliminado]  
MrBrooklin:

Bueno, para evitar problemas, es mejor escribir en un archivo binario y convertir la salida de nuevo a caracteres. En este artículo, en mi opinión, esto es lo que se hace en el ejemplo con sockets. Es decir, la bandera FILE_BIN

 
Maxim Dmitrievsky:

Bueno, para evitar problemas, es mejor escribir en un archivo binario y convertir la salida de nuevo a caracteres. En este artículo, en mi opinión, esto es lo que se hace en el ejemplo con sockets. Es decir, la bandera FILE_BIN

Hola Maxim, gracias a tus pistas he encontrado esta información en Internet: "Los archivos binarios, a diferencia de los archivos de texto, almacenan la información como un conjunto de bytes. Para trabajar con ellos en Python necesitas el módulo pickle incorporado ".

En otras palabras, si escribimos cualquier palabra en el código del programa Pyhon como un conjunto de bytes utilizando el módulo pickle instalado , cambiando 'w' por 'wb' .

import pickle 
.
.
.
with open(save_file, 'wb') as save:

y luego en un Asesor Experto escrito en MQL5 establecemos la bandera FILE_BIN en lugar dela bandera FILE_ANSI , ¿todo debería funcionar? Probablemente no debería escribir en un archivo csv, sino en un archivo dat.

Muchas gracias, Maxim, por la pista, ¡lo intentaré esta noche!

Saludos, Vladimir.


[Eliminado]  
MrBrooklin:

Hola Maxim, gracias a tu ayuda he encontrado esta información en Internet: "A diferencia de los archivos de texto, los archivos binarios almacenan la información como un conjunto de bytes. Para trabajar con ellos en Python, necesitas el módulo incorporado pickle".

En otras palabras, si escribimos cualquier palabra en el código del programa Pyhon como un conjunto de bytes utilizando el módulo pickle instalado , cambiando 'w' por 'wb' .

y luego en un Asesor Experto escrito en MQL5 establecemos la bandera FILE_BIN en lugar dela bandera FILE_ANSI , ¿todo debería funcionar? Probablemente no debería escribir en un archivo csv, sino en un archivo dat.

Muchas gracias, Maxim, por la pista, ¡lo intentaré esta noche!

Saludos, Vladimir.


no necesariamente, sólo puede seleccionar la codificación

st = b 'hola mundo'

o

holamundo '.encode('ascii')

y escribirlo en un archivo. A continuación, intente leerlo en mt5

 
Maxim Dmitrievsky:

No es necesario, basta con seleccionar la codificación

st = b 'hola mundo

o

holamundo '.encode('ascii')

y escribirlo en un archivo. A continuación, intente leerlo en mt5

¡Una vez más te digo y no me cansaré de decirte un ENORME GRACIAS, Maxim, y que Dios te conceda muchos años de vida!

Lo más importante para mí es que me dijiste cuál es la esencia del problema, y encontré la solución aún más fácil. Dejé todo en el Asesor Experto como estaba al probar el archivo csv con la palabra en la celda A1 introducida desde el teclado del ordenador. Pero para el código del programa escrito en Python, encontré esta pista en Internet:

with open(save_file, 'w',  encoding='cp1251',  errors='replace', newline='') as save:

¡He resaltado en rojo lo que faltaba! ¡Espero que esta línea también sea útil para alguien cuando escriba código en Python!

Saludos, Vladimir.

 

Buenas tardes.

Tengo un problema a resolver en python en matplotlib/plotly:

1. Hay un OHLC para renderizar en la ventana principal

2. Hay datos para dibujar en la subventana

¿Cómo codificar para tener un dibujo simple? dame un código python simple

ejemplo

[Eliminado]  

Tengo problemas con este código:

from MetaTrader5 import *
from datetime import date
import pandas as pd 
import matplotlib.pyplot as plt 

# Initializing MT5 connection 
MT5Initialize()
MT5WaitForTerminal()

print(MT5TerminalInfo())
print(MT5Version())

Dice

Traceback (most recent call last):
  File "C:/Programs/PycharmProjects/nc/main.py", line 8, in <module>
    MT5Initialize()
NameError: name 'MT5Initialize' is not defined

Process finished with exit code 1

Todavía soy nuevo en python. ¿Puedes decirme qué está mal?

[Eliminado]  
Сергей Таболин:

Y tengo un problema con este código:

dice

Todavía soy nuevo en python. ¿Puedes decirme qué está mal?

Mira el ejemplo de mi último artículo. Aquí se utilizó una versión antigua del paquete. Y necesita ser instalado primero a través de pip install, por supuesto