Discussão do artigo "Simulação de mercado (Parte 12): Sockets (VI)"

 

Novo artigo Simulação de mercado (Parte 12): Sockets (VI) foi publicado:

Neste artigo, vamos ver como resolver algumas questões e ver alguns problemas que temos ao usar código feito em Python dentro de outros programas. No caso o que mostrarei aqui, é um típico problema que existe, quando você vai usar o Excel junto com o MetaTrader 5. Mas para fazer esta comunicação estaremos usando o Python. Porém existe um pequeno problema nesta implementação. Não em todos os casos, mas em alguns casos específicos e quando o problema ocorre você tem que entender por que ele ocorre. Neste artigo iniciarei a explicação de como resolver tal coisa.

No artigo anterior Simulação de mercado (Parte 11): Sockets (V), expliquei como você poderia criar uma aplicação em Python, que pudesse ser usada dentro do Excel. Se bem que aquela aplicação, tinha como objetivo mostrar como você poderia criar um servidor de eco no python. O grande detalhe ali, era o fato dos dados relacionados aos eventos de conexão e fechamento de conexão, serem mostrados no Excel.

Aquele servidor não é de fato de grande utilidade para nós. Principalmente pelo fato de que ele apenas permite fazermos uso, ou melhor dizendo, ele aceitar apenas e tão somente uma única conexão. De fato, um servidor cujo propósito é estabelecer apenas e somente uma única conexão, não tem grande serventia. Mas quero que você, caro leitor, não venha a focar neste detalhe. Quero que você se atente ao fato, de que o intuito ali, foi mostrar como um script feito em Python, poderia rodar no Excel. E isto de forma o mais transparente possível. Porém para o que precisamos, será preciso que o nosso servidor seja um pouco mais elaborado. E para fazer isto, precisaremos fazer algumas outras coisas.

A ideia aqui não é de fato, criar uma aplicação finalizada. Já disse e volto a repetir: Soquetes são um assunto extremamente denso e que envolve muito estudo e tempo de pesquisa. Não espere conseguir criar algo realmente seguro e perfeito, assim de uma hora para outra. Quando o assunto é soquetes, você terá realmente que se aprofundar em muitos detalhes. Alguns mais simples e outros mais complicados.

Neste artigo não iremos de fato mexer nem com Excel, tão pouco com MQL5. Se bem que, no caso do MQL5, poderemos vir a fazer um certo uso. Para ser mais preciso, iremos fazer uso de algo que desenvolvemos aqui, nesta mesma sequência de artigos. E para que você possa entender tudo que será explicado, talvez seja bom também dar uma olhada no que foi feito em MQL5.


Autor: Daniel Jose

 
Gostaria de expressar minha profunda gratidão pelo conhecimento e sabedoria que compartilha aqui.
 

Obrigado pelas informações... como os soquetes podem ajudar a conectar dois terminais MT5 de corretoras diferentes? em um forex no outro moex - a negociação emparelhada de dois terminais pode ser realizada por meio de soquetes?

Eu mesmo estou pesquisando esse tópico... desculpe-me antecipadamente se minha pergunta estiver um pouco fora do assunto.... Ainda estou lendo artigos e procurando soluções para dois MT5 negociando em conjunto e obtendo cotações de símbolos de diferentes bolsas em essência e negociando em conjunto depois de analisar dados sobre cotações de 2-3-4-5 símbolos.....

Estarei fazendo o socketing:

  • Troca entre terminais: os dados vão diretamente entre o MT5 A e o MT5 B.

  • Eventos: OnSocketEvent() é acionado instantaneamente quando os dados são recebidos.

  • Flexibilidade de dados: JSON, estruturas binárias e matrizes podem ser transferidos.

  • Velocidade: a latência é uma ordem de magnitude menor do que o polling variável.

  • Confiabilidade: há mecanismos para reenvio e confirmação.

Nesse contexto, estou planejando criar um servidor Python avançado com cálculo de propagação, ACK/NACK, armazenamento de estados de posição e interface da Web para monitoramento;

// Terminal A
string msg = "{\"cmd\":\"OPEN\", \"symbol\":\"USDRUBF\", \"volume\":1.0}";
SocketSend(socket, msg);

// Terminal B
string cmd;
SocketReceive(socket, cmd);  // Obteve a estrutura completa do sinal
Посмотрите, вроде работает даже на МТ5
Посмотрите, вроде работает даже на МТ5
  • 2025.10.29
  • www.mql5.com
Вот индикаторы эквити есть - мое прочтение это на МТ5. почему спрашиваю - поставил зеркальные в 4 - прокатило - GBPUSD и EURGBP - индикатор в мт5 исчез Реверс. А по индикаторам с МТ4 там в ветке они описаны как ими пользоваться
 
Roman Shiredchenko a negociação emparelhada de dois terminais pode ser realizada por meio de soquetes?

Eu mesmo estou pesquisando esse tópico... desculpe-me antecipadamente se minha pergunta estiver um pouco fora do assunto.... Ainda estou lendo artigos e procurando soluções para dois MT5 negociando em um soquete e obtendo cotações de símbolos de diferentes bolsas em essência e negociando em um soquete depois de analisar dados sobre cotações de 2-3-4-5 símbolos....

Estarei fazendo um socket:

  • Troca entre terminais : os dados vão diretamente entre o MT5 A e o MT5 B.

  • Eventos : OnSocketEvent() é acionado instantaneamente quando os dados são recebidos.

  • Flexibilidade de dados : JSON, estruturas binárias e matrizes podem ser transmitidos.

  • Velocidade : a latência é uma ordem de magnitude menor do que a sondagem variável.

  • Confiabilidade : há mecanismos de reenvio e confirmação.

Nesse contexto, estou planejando criar: um servidor Python avançado com cálculo de propagação, ACK/NACK, armazenamento de estados de posição e interface da Web para monitoramento;

Sua pergunta é relevante e interessante. Mas acho que você está tirando conclusões precipitadas. Deixe-me esclarecer: embora a MQL5 implemente soquetes, como explico em meus artigos, ela não permite a criação de um servidor. Somente um cliente. Portanto, muito do que você está planejando fazer é impossível. É IMPOSSÍVEL de ser implementado na MQL5. Você precisará de código externo. No seu caso, você menciona o uso do Python, que já é uma solução em si.

De fato, muito do que você precisa pode ser implementado em Python. No entanto, há um pequeno problema com o que você está tentando fazer: interagir diretamente com o corretor. Por que estou dizendo isso? Por motivos de segurança, os corretores geralmente não aceitam acesso por meio de soquetes. Há um protocolo especial para essa interação, projetado especificamente para evitar interrupções nos mecanismos internos do corretor. Mas não é impossível tentar. Eles podem lhe informar o protocolo de comunicação para que você possa acessá-lo quando for conveniente. Mas não pense que isso será fácil, a menos que você tenha um amigo MUITO próximo na corretora que possa lhe fornecer as informações de que você precisa.

Outro aspecto que chamou minha atenção foi a interação e a troca de informações entre duas instâncias diferentes do MetaTrader 5. Na minha humilde opinião, o que você está tentando fazer não é uma boa ideia. Você não entende alguns conceitos de programação paralela e problemas relacionados. Se não se importar, tente estudar a tarefa "produtor-consumidor". Ela o ajudará a entender o nível de complexidade e as armadilhas que você pode encontrar ao transferir informações entre diferentes instâncias do MetaTrader 5 para fins de negociação.

De qualquer forma, boa sorte com seu projeto 🙂👍

 
Daniel Jose #:

Sua pergunta é relevante e interessante. Mas acho que você está tirando conclusões precipitadas. Deixe-me esclarecer: embora a MQL5 implemente soquetes, como explico em meus artigos, ela não permite que você crie um servidor. Somente um cliente. Portanto, muito do que você está planejando fazer é impossível. É IMPOSSÍVEL ser implementado na MQL5. Você precisará de código externo. No seu caso, você menciona o uso do Python, que já é uma solução em si.

De fato, muito do que você precisa pode ser implementado em Python. No entanto, há um pequeno problema com o que você está tentando fazer: interagir diretamente com o corretor. Por que estou dizendo isso? Por motivos de segurança, os corretores geralmente não aceitam acesso por meio de soquetes. Há um protocolo especial para essa interação, projetado especificamente para evitar interrupções nos mecanismos internos do corretor. Mas não é impossível tentar. Eles podem lhe informar o protocolo de comunicação para que você possa acessá-lo quando for conveniente. Mas não pense que isso será fácil, a menos que você tenha um amigo MUITO próximo na corretora que possa lhe fornecer as informações de que você precisa.

Outro aspecto que chamou minha atenção foi a interação e a troca de informações entre duas instâncias diferentes do MetaTrader 5. Na minha humilde opinião, o que você está tentando fazer não é uma boa ideia. Você não entende alguns conceitos de programação paralela e problemas relacionados. Se não se importar, tente estudar a tarefa "produtor-consumidor". Isso o ajudará a entender o nível de complexidade e as armadilhas que você pode encontrar ao transferir informações entre diferentes instâncias do MetaTrader 5 para fins de negociação.

De qualquer forma, boa sorte com seu projeto 🙂👍

MUITO OBRIGADO pelo feedback que você forneceu..... não tenho amigos nas corretoras!!! ) tenho terminais MT5 em duas corretoras diferentes! preciso torná-los amigos..... ) esse é um projeto para o próximo ano!!!

aqui - tentando... obrigado pelos artigos - estou lendo-os e estudando o conteúdo!!! se a velocidade permitir - então talvez eu faça isso diretamente através dos arquivos... acesso - como os discos rígidos anteriores conectados no BIOS em duas partes: um mestre e um escravo... )

Então aqui... em um computador potente, dois terminais MT5, um mestre (o principal) e o outro escravo (o segundo), em um deles a bolsa de valores e no outro o MT5 forex! talvez a realização por meio de arquivos), a leitura e a gravação serão suficientes... mas eu gostaria de implementar uma variante de leitura e recebimento de dados mais rápida e fácil.... por tipo de variáveis globais do terminal do cliente (não uso arquivos - há muito tempo), mas as variáveis globais do terminal do cliente são visíveis somente nesse terminal..... você precisa conectar processos externos... talvez criar tabelas na memória... como as bibliotecas de dll de conexão que eu vou perceber!

Tenha um bom dia!