Grupo de usuarios de MetaTrader 5 Python - cómo utilizar Python en Metatrader - página 76

 
MrBrooklin:

¡Gracias, Maxim!

Ya lo estoy probando. El ciclo se ha iniciado, pero el archivo no se abre todavía. Dejaré el bucle en funcionamiento y esperaré.

Saludos, Vladimir.


P.D. ¡Perdón! No prestó atención a la vez a lo que está de pie hora. Lo cambié al minuto en que se abrió el archivo EUR_USD_QUOTE.csv pero obtuve este mensaje en la pestaña Ejecutar de Pycharm:

�訡��: �� 㤠���� ���� ����� "excel.exe".

Luego, después de otro minuto más o menos, el archivo se cerró y se volvió a abrir, pero en Exel apareció una pestaña en la parte izquierda de la hoja de cálculo que me pedía que guardara el texto abierto anteriormente. Esperé un poco más para ver qué pasaba después, pero entonces el ciclo se detuvo y apareció un mensaje como éste:

�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 4208, � �����襭.
�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 3168, �� �����襭.
Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 37, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 23, in get_data
with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv'

Este es el resultado hasta ahora, ¡pero ya he avanzado!

Sinceramente, Vladimir.

Tal vez Excel no tuvo tiempo de cerrar y estaba tratando de acceder al archivo ya, entonces

while True:
    t = datetime.now().hour
    if(t2 != t):
        os.system("TASKKILL /F /IM excel.exe") 
	time.sleep(10)
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep(10)

Añade un retraso de 5-10 segundos aquí, y el programa esperará a que Excel se cierre

No he decidido qué hacer con la ventana de la izquierda )

 
MrBrooklin:

Quiero aprender a tomar citas en Internet usando el lenguaje Python para verlas no en la terminal, sino en algún archivo, por ejemplo, csv. Pensé que era la tarea más básica, pero resultó que no lo era. Quizá me equivoque de camino, pero el que no busca nada, no encuentra nada.

Ahora pasaré al código que has propuesto. Después de lanzar el código, apareció un mensaje en el entorno de desarrollo de Pycharm :

Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", line 25, in <module>
main()
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", línea 13, en main
eurusd_bid = soup.find('td', 'pid-1-bid').text.replace(',', '.')
AttributeError: 'NoneType' object has no attribute 'text'

El proceso ha finalizado con el código de salida 1

¿Qué tengo que cambiar para ver cómo funciona el código?

Respetuosamente, Vladimir.

La razón por la que no funciona es porque este sitio ha bloqueado el envío de solicitudes. El hecho de que tuvieras que fingir un agente de usuario debió ser una pista de que estabas haciendo algo que no querían que hicieras. El escaneo de la web va mucho más allá del alcance de este tema, así que deberíamos dejar de hablar de ello y volver al tema que nos ocupa. ¿Tiene alguna pregunta sobre el uso del paquete MetaTrader5?

 
Maxim Dmitrievsky:

Puede que no tenga tiempo de cerrar Excel y esté intentando acceder al archivo, entonces

añadir un retraso de 5-10 segundos, el programa esperará a que Excel se cierre

Todavía no he decidido qué hacer con la ventana izquierda )

Maxim, muchas gracias por el código, que me has ayudado a mejorar. El panel de la izquierda es poco preocupante por el momento. Añadiré tu nuevo código más tarde, probablemente el fin de semana, ya que hoy he estado completamente agobiado en el trabajo y necesito un descanso. Le informaré en cuanto tenga nuevos resultados.

Saludos, Vladimir.

 

¿En qué momento la biblioteca de MT5 devuelve la hora de las órdenes abiertas?

def checkPositions(self):
        return mt5.positions_get(symbol=self.symbol)

pos = trade.checkPositions()
pos[0].time

>>> pos[0].time
1598035196

datetime.datetime.fromtimestamp(pos[0].time).strftime("%A, %B %d, %Y %I:%M:%S")

>>> datetime.datetime.fromtimestamp(pos[0].time).strftime("%A, %B %d, %Y %I:%M:%S")
'Saturday, August 22, 2020 01:39:56'

Pero en la terminal es un momento diferente

¿Cómo puedo sincronizar correctamente la hora en el programa python con la hora de las órdenes (posiciones)?

 
Maxim Dmitrievsky:

¿En qué momento la biblioteca de MT5 devuelve la hora de las órdenes abiertas?

pero en la terminal es un tiempo diferente

¿Cómo puedo sincronizar correctamente la hora en el programa python con la hora de las órdenes (posiciones)?

En primer lugar, debe conocer la zona horaria exacta del servidor de comercio. A continuación, cree un objeto de zona horaria utilizando pytz. Por último, pasa el objeto de zona horaria a un método.

import datetime as dt

import pytz
import pymt5adapter as mta


def main():
    broker_timezone = pytz.timezone('Etc/UTC')
    for position in mta.positions_get():
        time = dt.datetime.fromtimestamp(position.time, tz=broker_timezone)
        print(time)


if __name__ == '__main__':
    with mta.connected():
        main()
https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones
Is there a list of Pytz Timezones?
Is there a list of Pytz Timezones?
  • 2012.12.13
  • ipegasus
  • stackoverflow.com
I would like to know what are all the possible values for the timezone argument in the Python library pytz. How to do it?
 
nicholish en:

En primer lugar, debe conocer la zona horaria exacta del servidor de comercio. A continuación, cree un objeto de zona horaria utilizando pytz. Por último, pase el objeto de zona horaria al método.

https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones

Gracias, lo intentaré así

Me gustaría sincronizar la hora automáticamente ya que el servidor de comercio puede cambiar
 
Maxim Dmitrievsky:

Gracias, voy a probar esto

Me gustaría sincronizar la hora automáticamente, porque el servidor de comercio puede cambiar

Las marcas de tiempo de UNIX son agnósticas en cuanto a la zona horaria, por lo que es necesario conocer la zona horaria del corredor para dar a la marca de tiempo un contexto consciente de la zona horaria. La única manera de hacerlo es conocer la configuración de la zona horaria del servidor de comercio. No creo que haya ninguna forma de obtener esa información de forma programada. Lo que puedes hacer es crear un archivo de configuración para asignar los diferentes servidores de comercio que puedas estar utilizando a la zona horaria. Ejemplo:


config.json

{
    "servers": {
        "MetaQuotes-Demo": {
            "timezone": "Europe/Moscow"
        },
        "AMPGlobalUSA-Demo": {
            "timezone": "Etc/UTC"
        }
    }
}
 
nicholish en:

Las marcas de tiempo de UNIX son agnósticas en cuanto a la zona horaria, por lo que es necesario conocer la zona horaria del corredor para dar a la marca de tiempo un contexto consciente de la zona horaria. La única manera de hacerlo es conocer la configuración de la zona horaria del servidor de comercio. No creo que haya ninguna forma de obtener esa información de forma programada. Lo que puedes hacer es crear un archivo de configuración para asignar los diferentes servidores de comercio que puedas estar utilizando a la zona horaria. Ejemplo:


config.json

bueno... sí

manera más fácil sin pytz:

pt = datetime.datetime.utcfromtimestamp(pos[0].time) // position open time by mt5 time
tt = datetime.datetime.utcnow() + datetime.timedelta(hours=3)   // current server time (from mt5 clock)

delta = tt-pt
>>> delta
datetime.timedelta(seconds=2139, microseconds=506786) // position lifetime
También podemos abrir una orden pendiente lejos del precio, antes de iniciar el EA. Y comparar la diferencia de horas entre 'pt' y
datetime.utcnow()
para compensar automáticamente el tiempo
 
Maxim Dmitrievsky :

Bueno... sí

manera más fácil sin pytz:

También podemos abrir una orden pendiente lejos del precio, antes de iniciar el EA. Y comparar la diferencia de horas entre 'pt' y para compensar automáticamente el tiempo

Yo pensé lo mismo pero luego recordé que la hora de la orden se almacena en una marca de tiempo UNIX que no tiene zona horaria. En otras palabras, no se puede extrapolar la zona horaria del corredor a partir de la marca de tiempo de la orden porque las marcas de tiempo son las mismas sin importar la zona horaria. Si quieres saber el offset GMT tienes que saber la hora actual de la terminal (broker) y actualmente no hay manera de usar python para obtener la hora actual de la terminal o el offset GMT.

 
Maxim Dmitrievsky:

Puede que no tenga tiempo de cerrar Excel y esté intentando acceder al archivo, entonces

añadir un retraso de 5-10 segundos, el programa esperará a que Excel se cierre

No he decidido qué hacer con la ventana de la izquierda )

¡Hola Maxim!

Te prometí antes que el fin de semana comprobaría la variante con adición de código de retardo. Lo he comprobado, pero el retraso no ha afectado a nada. No tengo problemas con la pestaña izquierda, porque simplemente no le presto atención.

Una vez más, muchas gracias por su ayuda. No haré más preguntas en este hilo.

Saludos, Vladimir.