MetaTrader 5 Python User Group - como usar o Python no Metatrader - página 76

 
MrBrooklin:

Obrigado, Maxim!

Já estou a experimentá-lo. O ciclo já começou, mas o ficheiro ainda não está a abrir. Vou deixar o laço em funcionamento e esperar.

Cumprimentos, Vladimir.


P.S. Perdão! Não prestou atenção de imediato ao que está de pé à hora. Mudei-o para o ficheiro EUR_USD_QUOTE.csv no minuto em que foi aberto, mas recebi esta mensagem no separador Run do Pycharm:

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

Depois de mais ou menos um minuto, o ficheiro fechou e reabriu, mas em Exel apareceu uma aba no lado esquerdo da folha de cálculo pedindo-me para guardar o texto previamente aberto. Esperei um pouco mais para ver o que iria acontecer a seguir, mas depois o ciclo parou e uma mensagem como esta apareceu:

�ᯥ譮: ������ "EXCEL.EXE", � ������䨪���஬ 4208, � �������襭.
�ᯥ譮: ������ "EXCEL.EXE", � ������䨪��஬ 3168, ��� ������襭.
Traceback (última chamada):
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", linha 37, em <module>
get_data(save_file='EUR_USD_QUOTE.csv')
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", linha 23, em get_data
com open(save_file, 'w') como save:
PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv')

Este é o resultado até agora, mas eu já fiz progressos!

Atenciosamente, Vladimir.

Talvez o Excel não tivesse tempo para fechar e já estivesse a tentar aceder ao ficheiro, então

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)

Adicione aqui um atraso de 5-10 segundos, e o programa esperará que o Excel feche

Ainda não decidi o que fazer com a janela à esquerda )

 
MrBrooklin:

Quero aprender como fazer citações na Internet utilizando a linguagem Python para as ver não no terminal, mas em algum ficheiro, por exemplo, csv. Pensei que era a tarefa mais básica, mas afinal não era. Talvez eu esteja no caminho errado, mas aquele que não procura nada, não encontra nada.

Agora vou passar ao código que propôs. Após o lançamento do código, uma mensagem apareceu no ambiente de desenvolvimento do Pycharm :

Traceback (última chamada):
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", linha 25, em <módulo>
main()
Ficheiro "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10
.py", linha 13, no principal
eurusd_bid = soup.find('td', 'pid-1-bid').text.text.replace(',', '.')
AttributeError: O objecto 'NoneType' não tem atributo 'text'

Processo terminado com o código de saída 1

O que preciso de mudar para ver como funciona o código?

Com todo o respeito, Vladimir.

A razão pela qual não está a funcionar é porque este site o bloqueou de enviar pedidos. O facto de ter tido de falsificar um agente utilizador deve ter sido uma pista de que estava a fazer algo que eles não queriam que fizesse. A digitalização da Web está muito para além do âmbito deste tópico, por isso devemos parar de falar sobre isso e voltar ao assunto em questão. Tem alguma questão sobre a utilização do pacote MetaTrader5?

 
Maxim Dmitrievsky:

Pode não ter tempo para fechar o Excel e está a tentar aceder ao ficheiro, então

adicionar um atraso de 5-10 segundos, o programa esperará que o Excel feche

Ainda não decidi o que fazer com a janela da esquerda )

Maxim, muito obrigado pelo código, que me ajudou a melhorar. O painel esquerdo é de momento pouco preocupante. Acrescentarei o vosso novo código mais tarde, muito provavelmente no fim-de-semana, pois hoje estive completamente inundado no trabalho e preciso de um descanso. Avisar-vos-ei assim que obtiver novos resultados.

Cumprimentos, Vladimir.

 

Em que compensação é que a biblioteca MT5 devolve o tempo das encomendas abertas?

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'

Mas no terminal é um tempo diferente

Como sincronizar correctamente a hora no programa python com a hora das encomendas (posições)?

 
Maxim Dmitrievsky:

Em que compensação é que a biblioteca MT5 devolve o tempo das encomendas abertas?

mas no terminal é um tempo diferente

Como sincronizar correctamente a hora no programa python com a hora das encomendas (posições)?

Primeiro é preciso saber o fuso horário exacto do servidor comercial. Depois criar um objecto de fuso horário usando pytz. Finalmente, passar o objecto de fuso horário a um 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:

Primeiro é necessário saber o fuso horário exacto do servidor comercial. Depois criar um objecto de fuso horário usando pytz. Finalmente, passar o objecto de fuso horário para o método.

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

Obrigado, vou tentar desta forma

Gostaria de sincronizar a hora automaticamente, uma vez que o servidor de negociação pode mudar
 
Maxim Dmitrievsky:

obrigado, vou tentar isto

Gostaria de sincronizar a hora automaticamente, porque o servidor de comércio pode mudar

Os timestamps UNIX são agnósticos de fuso horário, pelo que é necessário conhecer o fuso horário do corretor para dar ao timestamp o contexto de timestamp o timezone consciente. A única forma de o fazer é conhecer a configuração do fuso horário do servidor comercial. Não creio que haja qualquer forma de obter essa informação de forma programática. O que pode fazer é criar um ficheiro de configuração para mapear os diferentes servidores de comércio que pode estar a utilizar para o fuso horário. Exemplo:


config.json

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

Os timestamps UNIX são agnósticos de fuso horário, pelo que é necessário conhecer o fuso horário do corretor para dar ao timestamp o contexto de timestamp o timezone consciente. A única forma de o fazer é conhecer a configuração do fuso horário do servidor comercial. Não creio que haja qualquer forma de obter essa informação de forma programática. O que pode fazer é criar um ficheiro de configuração para mapear os diferentes servidores de comércio que pode estar a utilizar para o fuso horário. Exemplo:


config.json

bem... sim

maneira mais fácil sem 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
Também podemos abrir uma encomenda pendente longe do preço, antes de iniciar a EA. E comparar a diferença em horas entre 'pt' e
datetime.utcnow()
para compensar automaticamente o tempo
 
Maxim Dmitrievsky :

bem ... sim

maneira mais fácil sem pytz:

Também podemos abrir uma encomenda pendente longe do preço, antes de iniciar a EA. E comparar a diferença em horas entre 'pt' e para compensar automaticamente o tempo

Pensei a mesma coisa, mas depois lembrei-me que o tempo da encomenda é armazenado num carimbo de tempo UNIX que não tem um fuso horário. Por outras palavras, não se pode extrapolar o fuso horário do corretor a partir do carimbo de hora da encomenda, porque os carimbos de hora são os mesmos, independentemente do fuso horário. Se quiser saber a compensação GMT tem de saber a hora actual do terminal (corretor) e não há actualmente forma de utilizar python para obter a hora actual do terminal ou a compensação GMT.

 
Maxim Dmitrievsky:

Pode não ter tempo para fechar o Excel e está a tentar aceder ao ficheiro, então

pode adicionar um atraso de 5-10 segundos, o programa esperará que o Excel feche

Ainda não decidi o que fazer com a janela à esquerda )

Olá Maxim!

Prometi-lhe mais cedo que no fim-de-semana verificaria a variante com adição de código de atraso. Verifiquei-o, mas o atraso não afectou nada. Não tenho problemas com a aba esquerda, porque simplesmente não presto atenção a ela.

Mais uma vez, muito obrigado pela vossa assistência. Não farei mais perguntas neste tópico.

Cumprimentos, Vladimir.