Discussão do artigo "Integração da MetaTrader 5 e Python: recebendo e enviando dados" - página 9

[Excluído]  
MrBrooklin:

Olá, Maxim!

Estou um pouco avançado em meu conhecimento de Python, mas não consigo encontrar informações detalhadas sobre o acesso conjunto ao arquivo csv do Python e de um programa de terceiros, por exemplo, o mesmo Expert Advisor escrito em MQL5. Simplificando, o código Python grava periodicamente informações no arquivo csv, e o Expert Advisor MQL5 lê as informações dele e executa os comandos de que preciso. Esse acesso conjunto de ambos os lados é possível?

Atenciosamente, Vladimir.

Não, mas ambos os programas podem tentar abrir o arquivo se ele não estiver ocupado por outro programa. E eles devem fechá-lo após a leitura/gravação.

 
Maxim Dmitrievsky:

Não, mas ambos os programas podem tentar abrir um arquivo se ele não estiver ocupado por outro programa. E devem fechá-lo após a leitura/gravação.

Obrigado, Maxim, pela explicação, especialmente sobre o fechamento do arquivo após a leitura/gravação. Esse é o ponto que eu precisava entender.

Saudações, Vladimir.

 
Maxim Dmitrievsky:

Não, mas ambos os programas podem tentar abrir um arquivo se ele não estiver ocupado por outro programa. E devem fechá-lo após a leitura/gravação.

Olá, Maxim, levei esse ponto em consideração. Por favor, ajude-me a entender mais um ponto, a saber, a codificação de texto em um arquivo csv criado usando Python e a leitura subsequente desse texto por um Expert Advisor criado em MQL5. Analisei muitas informações no site da MQL5 e em outros recursos da Internet, mas não encontrei uma explicação clara. Em geral, o código do programa criado usando a linguagem Python abre um novo arquivo csv e grava nele as informações de que preciso. Para simplificar o ajuste, é escrita apenas uma palavra em russo, que na verdade foi extraída do site. A palavra no arquivo csv aberto é lida sem problemas, mas o Expert Advisor não entende a codificação dessa palavra. Isso é certo porque, ao escrever o EA (a propósito, consegui escrever o primeiro código independente!), usei um arquivo csv com o mesmo nome e escrevi a mesma palavra na célula A1, mas somente a partir do teclado. Tentei alterar tudo em ambos os códigos (quero dizer, no Python e no MQL5), mas nada funciona ainda.

Você pode me dizer qual codificação (encoding=?) usar no código Python:

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

e qual codificação (encoding=?) usar para o código MQL5:

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

para torná-los "amigos"? Estou mudando essas codificações há vários dias e não consigo pensar no que fazer em seguida. E há apenas um único ponto que impede o trabalho normal.

Talvez eu ainda não tenha encontrado todas as codificações para Python, mas o mais interessante é que, quando o código MQL5 tem a codificação FILE_ANSI, que é dada na linha acima, e quando eu escrevo a palavra, por exemplo, "buy" no teclado em um arquivo csv, então, depois de salvar esse arquivo, o Expert Advisor lê e funciona perfeitamente.

Às vezes eu penso: talvez não seja a codificação! Então, o que é?

Por favor, me ajude a entender qual é o motivo!

Atenciosamente, Vladimir.


P.S. Finalmente encontrei pelo menos uma explicação razoável: "No Python 3, a codificação padrão é UTF-8".

[Excluído]  
MrBrooklin:

Para evitar problemas, é melhor gravar em um arquivo binário e converter a saída de volta para caracteres. Neste artigo, em minha opinião, isso é o que é feito no exemplo com soquetes. Ou seja, o sinalizador FILE_BIN

 
Maxim Dmitrievsky:

Para evitar problemas, é melhor gravar em um arquivo binário e converter a saída de volta para caracteres. Neste artigo, em minha opinião, isso é o que é feito no exemplo com soquetes. Ou seja, o sinalizador FILE_BIN

Oi Maxim, graças às suas dicas, encontrei essas informações na Internet: "Os arquivos binários, ao contrário dos arquivos de texto, armazenam informações como um conjunto de bytes. Para trabalhar com eles no Python, você precisa do módulo pickle incorporado ".

Em outras palavras, se escrevermos qualquer palavra no código do programa Python como um conjunto de bytes usando o módulo pickle instalado , alterando 'w' para 'wb' .

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

e, em seguida, em um Expert Advisor escrito em MQL5, definir o sinalizador FILE_BIN em vez do sinalizador FILE_ANSI , tudo deverá funcionar? Provavelmente, você não deve gravar em um arquivo csv, mas em um arquivo dat.

Muito obrigado, Maxim, pela dica, vou tentar hoje à noite!

Atenciosamente, Vladimir.


[Excluído]  
MrBrooklin:

Oi Maxim, graças à sua ajuda, encontrei essas informações na Internet: "Ao contrário dos arquivos de texto, os arquivos binários armazenam informações como um conjunto de bytes. Para trabalhar com eles no Python, você precisa do módulo pickle incorporado ".

Em outras palavras, se escrevermos qualquer palavra no código do programa Python como um conjunto de bytes usando o módulo pickle instalado , alterando 'w' para 'wb' .

e, em seguida, em um Expert Advisor escrito em MQL5, definir o sinalizador FILE_BIN em vez do sinalizador FILE_ANSI , tudo deverá funcionar? Provavelmente, você não deve gravar em um arquivo csv, mas em um arquivo dat.

Muito obrigado, Maxim, pela dica, vou tentar hoje à noite!

Atenciosamente, Vladimir.


Não necessariamente, você pode simplesmente selecionar a codificação

st = b 'hello world'

ou

'helloworld '.encode('ascii')

e gravá-lo em um arquivo. Em seguida, tente lê-lo no mt5

 
Maxim Dmitrievsky:

Não é necessário, você pode simplesmente selecionar a codificação

st = b 'hello world

ou

'helloworld '.encode('ascii')

e gravá-lo em um arquivo. Em seguida, tente lê-lo no mt5

Mais uma vez, eu digo e não me cansarei de dizer um ENORME OBRIGADO, Maxim, e que Deus lhe conceda muitos anos de vida!

O mais importante para mim é que você me disse qual é a essência do problema, e achei a solução ainda mais fácil. Deixei tudo no Expert Advisor como estava ao testar o arquivo csv com a palavra na célula A1 inserida pelo teclado do computador. Mas para o código do programa escrito em Python, encontrei essa dica na Internet:

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

Destaquei em vermelho o que estava faltando! Espero que essa linha também seja útil para alguém que esteja escrevendo código em Python!

Saudações, Vladimir.

 

Boa tarde.

Tenho um problema para resolver em python no matplotlib/plotly:

1. Há um OHLC para renderização na janela principal

2. Há dados para desenhar na subjanela

Como codificar para ter um desenho simples? me dê um código python simples

exemplo

[Excluído]  

Estou tendo problemas com esse 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())

Ele diz

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

Ainda sou novato em python. Você pode me dizer o que está errado?

[Excluído]  
Сергей Таболин:

E tenho um problema com esse código:

ele diz

Ainda sou novato em python. Você pode me dizer o que está errado?

Dê uma olhada no exemplo do meu último artigo. Aqui foi usada uma versão antiga do pacote. E ela precisa ser instalada primeiro por meio do pip install, é claro