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

 
Obrigado, irmão. Esse artigo é ótimo. Você me ajudou muito.
 

Obrigado por este artigo.

Só gostaria de saber por que precisamos continuar chamando socket=SocketCreate() e SocketClose() em OnTick()?

Parece um pouco ineficiente fazer isso repetidamente.
Isso não mantém o soquete aberto/ativo? Ou melhor, é possível manter o soquete aberto/ativo?

 
Ernesto Che dados para desenhar fibs e canais. Em seu exemplo, o Python retorna dois valores, mas eu preciso retornar dados para até 12 estruturas diferentes com três pontos de coordenadas cada.
No início, fiquei preso ao fato de que o mt5 não retornava uma longa cadeia de caracteres descrevendo todas as estruturas de uma só vez. Fiz a troca por meio de várias consultas mais curtas. Tudo parece funcionar, mas de vez em quando.
Algo me diz que o problema está na configuração do tempo limite. Você poderia sugerir uma direção para encontrar uma solução?
Desde já, obrigado

Olá! Eu também estava criando um soquete. Estou com um problema: escrevi um indicador em python. Ele recebe muitos dados do mt5 e o quanto você quiser, mas retornar dados para o mt5 não é tão fácil. No soquete, é possível transmitir apenas uma string até 100 strings pequenas, mas preciso de mais. Que soluções existem além do soquete e das solicitações da Web/internet para a troca de dados entre Python e MT5? Não quero criar um banco de dados MySQL para isso. Estamos falando sobre a transferência do python para o MT5 de cerca de 40 pares de moedas com um histórico de 1.000 leituras recalculadas e a construção adicional de linhas de indicadores no MT5... Quero me afastar dos cálculos no MT5, pois o python faz isso muito mais rápido. Portanto, gostaria de ver todas as linhas do indicador e não apenas a última barra transmitida por uma string uma vez por segundo.
Alguém pode me aconselhar algo útil?

TCP/IP Socket - O MT5 receberá uma string de qualquer maneira e ela não caberá em 30.000 dados.... As limitações de uma variável de string, mesmo no formato jason, são de até 100 strings. Qual é a utilidade desse Socket?
Acontece que, para big data, uma saída é Python-->MySQL-->MT5

Também tive essa ideia:

O uso de multiprocessing.shared_memory em Python e WinAPI em MQL5 permite que você leia dados diretamente da memória.
 
Alex Renko #:
exceto para solicitantes da Web/internet de troca de dados entre Python->MT5? Não quero mencionar o banco de dados MySQL.

"trazer à tona o SQLite" - o MT5 o tem integrado, o python obviamente também o tem....

Você pode usar o soquete para informar o que precisa prontamente (sinais, alertas etc.) e colocar os dados grandes no SQLite. Ou seja, em python, você coloca tudo o que precisa no banco de dados e apita no soquete de "atualização de dados". E, em MQL, você pode reler o banco de dados com o apito.

O próprio banco de dados pode ser armazenado em um disco de estrutura

 
Maxim Kuznetsov #:

"bring up SQLite" - o MT5 tem esse recurso incorporado, e o python obviamente também o tem.

Você usa o soquete para informar o que precisa prontamente (sinais, alertas etc.) e coloca os dados grandes no SQLite. Ou seja, em python, você coloca tudo o que precisa no banco de dados e apita no soquete de "atualização de dados". E, em MQL, você pode reler o banco de dados com o apito

O próprio banco de dados pode ser armazenado em um disco de estrutura

Entendo seu ponto de vista, obrigado pela resposta... Eu pensei assim
O MetaTrader 5 usa sua própria linguagem de programação MQL5, que é executada em um processo isolado. Isso não permite a interação direta com a memória compartilhada do sistema operacional, como podem fazer outros aplicativos que usam APIs de baixo nível.

Shell dentro de um shell.... Já faz 20 anos que eles não conseguem criar uma versão nativa para o Mac...

 
Alex Renko #:

Entendo seu ponto de vista, obrigado pela resposta.... Bem, foi o que pensei
O MetaTrader 5 usa sua própria linguagem de programação MQL5, que é executada em um processo isolado. Isso não permite a interação direta com a memória compartilhada do sistema operacional, como outros aplicativos que usam APIs de baixo nível podem fazer.

Shell dentro de um shell.... Já faz 20 anos que eles não conseguem criar uma versão nativa para mac...

ninguém proíbe o uso de DLL - e lá você pode fazer o que quiser.

Você pode pesquisar a memória diretamente (provavelmente não é mais rápido :-)).

Ou soluções intermediárias eficientes, como o banco de dados de valor-chave na memória.

Somente na maioria dos casos, os freios e o gargalo estão do lado do Python

 
Para mim, o exemplo não funciona, alguém sabe por quê? Eu instalei a opção 127.0.0.1:9090 , executei o python socketserver.py e executei o EA socketclientEA.ex5 (depois de corrigir char para uchar), mas, novamente, ocorreu esse erro.
2025.10.09 10:41:44.665 socketclientEA (#GDAXIm,H1) Conexão localhost:9090 erro 4014