TRADE_TRANSACTION_DEAL_ADD duplicado

 

Caros,

Estou desenvolvendo EAs (Expert Advisors) processando eventos OnTradeTransaction. Tudo funcionava bem até amanhã, quando uma posição aberta foi encerrada após o preço atingir o stop loss. Através dos meus logs, verifiquei que meu EA recebeu um evento TRADE_TRANSACTION_DEAL_ADD duas vezes . Para esclarecer (e facilitar meu processo de depuração), executei simultaneamente um EA simples em um timeframe diferente (em paralelo com os EAs que desenvolvi) que capturou todos os eventos que ocorreram no MT5 (está anexado a este tópico).

Os eventos capturados por este simples EA estão aqui:

...

QQ 0 13:27:32.068 test_tradetransaction (XAUUSD,H1) type = ORDER_ADD order=#501163722 symbol=XAUUSD order_type=ORDER_TYPE_BUY order_state=ORDER_STATE_STARTED price=4853.550000 price_sl=0.000000 price_tp=0.000000 volume=0.010000 position=#501089347 position_by=#0

ON 0 13:27:32.082 test_tradetransaction (XAUUSD,H1) type = ORDER_DELETE order=#501163722 symbol=XAUUSD order_type=ORDER_TYPE_BUY order_state=ORDER_STATE_FILLED price=4853.550000 price_sl=0.000000 price_tp=0.000000 volume=0.000000 position=#501089347 position_by=#0

DP 0 13:27:32.084 test_tradetransaction (XAUUSD,H1) type = HISTORY_ADD order=#501163722 symbol=XAUUSD order_type=ORDER_TYPE_BUY order_state=ORDER_STATE_FILLED price=4853.550000 price_sl=0.000000 price_tp=0.000000 volume=0.000000 position=#501089347

QE 0 13:27:32.094 test_tradetransaction (XAUUSD,H1) type = DEAL_ADD, deal=#326549189 order=#501163722 symbol=XAUUSD deal_type=DEAL_TYPE_BUY price=4853.790000 price_sl=4853.550000 price_tp=0.000000 volume=0.010000 position=#501089347 position_by=#0 entry=DEAL_ENTRY_OUT 

KS 0 13:27:32.094 test_tradetransaction (XAUUSD,H1) type = DEAL_ADD, deal=#326549189 order=#501163722 symbol=XAUUSD deal_type=DEAL_TYPE_BUY price=4853.790000 price_sl=4853.550000 price_tp=0.000000 volume=0.010000 position=#501089347 position_by=#0 entry=DEAL_ENTRY_OUT 

...

Esses resultados foram extraídos de um cliente MT5 fornecido pela Five Percent Online Ltd ( www.the5ers.com ) - omiti outras mensagens de log para enfatizar o problema. É importante mencionar que executei o mesmo ambiente (EAs, indicadores, scripts) em outros clientes MT5 (o que você baixa do site oficial do MT5 e o fornecido pela FTMO Global Markets Ltd ( www.ftmo.com )), em paralelo (mesmo horário, mesma máquina, contas diferentes) e não observei esse comportamento.

Minha pergunta é: é possível que eventos duplicados venham do servidor? Em que circunstâncias isso acontece? Preciso verificar informações adicionais dessas transações para diferenciá-las?

Eu poderia esperar a perda de eventos em ambientes de alta carga devido ao tamanho da fila de eventos do cliente MT5, mas mensagens duplicadas?

Desde já, obrigado.

Marcelo

The5ers: The Home of Funded Trading | Leader in Funded Trading
  • www.the5ers.com
My experience with 5 ers is just top notch.
Arquivos anexados:
 

Por favor, escreva em português neste fórum. Eu usei tradução automática.

Tem certeza de que essas entradas de log não vêm de instâncias EA diferentes?

 
Alain Verleyen #:

Por favor, escreva em português neste fórum. Eu usei tradução automática.

Tem certeza de que essas entradas de log não vêm de instâncias EA diferentes?

Prezado Alain,

Sim, estou escrevendo em Português do Brasil.

Tenho certeza, pois o EA que gerou a ordem que abriu essa posição também recebeu os eventos que apresentei aqui. O que eu não esperava era uma repetição de mensagem.

Eu poderia construir um filtro de eventos já processados, mas gostaria de saber se existe a possibilidade do servidor MT5 da corretora (estou apenas supondo que seja ele o causador disso) gerar eventos repetidos para justificar tal filtro.

 
Marcelo De Oliveira Rosa # :

Prezado Alain,

Sim, estou escrevendo em Português do Brasil.

Tenho certeza, pois o EA que gerou a ordem que abriu essa posição também recebeu os eventos que apresentei aqui. O que eu não esperava era uma repetição de mensagem.

Eu poderia construir um filtro de eventos já processados, mas gostaria de saber se existe a possibilidade do servidor MT5 da corretora (estou apenas supondo que seja ele o causador disso) gerar eventos repetidos para justificar tal filtro.

Obrigado. Reportei o problema à MetaQuotes.

Imagino que aconteça raramente e de forma aleatória. Por favor, mantenha-nos informados caso obtenha mais informações sobre o assunto.

 

Cara, dei uma olhada nesses logs: pode ficar sossegado que não é erro de lógica do teu EA não. Isso aí é o que eu chamo de "comportamento de borda" do MetaTrader 5 com o servidor de algumas corretoras.

O "pulo do gato" aqui é o deal=#326549189 . Como o ID do deal é idêntico e o timestamp bateu cravado no mesmo milissegundo, o servidor da The5ers simplesmente cuspiu o mesmo pacote duas vezes (ou o terminal deu aquele "eco" maroto ao processar a resposta do gateway deles).

Já cansei de ver isso acontecer em corretoras de forex não muito conhecidas.

Pra resolver isso e deixar teu EA "blindado" (rodando liso em qualquer corretora), a saída é tratar o OnTradeTransaction como uma fila que pode, sim, vir com uma "sujeirinha" de vez em quando. O segredo é garantir que seu código seja idempotente — ou seja, se o mesmo evento bater na porta dez vezes, seu EA só abre a porteira uma vez.

Anota aí o que eu faria: mete um cache de tickets (pode ser um static long last_deal_id ) e, logo no começo do processamento do DEAL_ADD , checa se aquele ID já passou por ali. Se for repetido, você só dá um return e segue o baile.

 
Marcelo De Oliveira Rosa # :

Prezado Alain,

Sim, estou escrevendo em Português do Brasil.

Tenho certeza, pois o EA que gerou a ordem que abriu essa posição também recebeu os eventos que apresentei aqui. O que eu não esperava era uma repetição de mensagem.

Eu poderia construir um filtro de eventos já processados, mas gostaria de saber se existe a possibilidade do servidor MT5 da corretora (estou apenas supondo que seja ele o causador disso) gerar eventos repetidos para justificar tal filtro.

A equipe de desenvolvimento da MetaQuotes precisa de mais informações. Qual servidor de corretagem foi usado?

Isso estava acontecendo em uma conta real ou em uma conta de demonstração?

Isso é reproduzível ou aconteceu apenas uma vez?

 
Jonathan Pereira #:

Cara, dei uma olhada nesses logs: pode ficar sossegado que não é erro de lógica do teu EA não. Isso aí é o que eu chamo de "comportamento de borda" do MetaTrader 5 com o servidor de algumas corretoras.

O "pulo do gato" aqui é o deal=#326549189 . Como o ID do deal é idêntico e o timestamp bateu cravado no mesmo milissegundo, o servidor da The5ers simplesmente cuspiu o mesmo pacote duas vezes (ou o terminal deu aquele "eco" maroto ao processar a resposta do gateway deles).

Já cansei de ver isso acontecer em corretoras de forex não muito conhecidas.

Pra resolver isso e deixar teu EA "blindado" (rodando liso em qualquer corretora), a saída é tratar o OnTradeTransaction como uma fila que pode, sim, vir com uma "sujeirinha" de vez em quando. O segredo é garantir que seu código seja idempotente — ou seja, se o mesmo evento bater na porta dez vezes, seu EA só abre a porteira uma vez.

Anota aí o que eu faria: mete um cache de tickets (pode ser um static long last_deal_id ) e, logo no começo do processamento do DEAL_ADD , checa se aquele ID já passou por ali. Se for repetido, você só dá um return e segue o baile.

Obrigado pelas informações, Jonathan. Eu queria mesmo checar se alguém já passou por isso, para só então "blindar" meu código. Muitíssimo obrigado!
 
Alain Verleyen #:

A equipe de desenvolvimento da MetaQuotes precisa de mais informações. Qual servidor de corretagem foi usado?

Isso estava acontecendo em uma conta real ou em uma conta de demonstração?

Isso é reproduzível ou aconteceu apenas uma vez?

Prezado Alain,

Servidores de corretagem:

- Five Percent Online Ltd (www.the5ers.com) - uso o cliente abaixo:

Aconteceu em uma conta demo desta corretora, e a repetição do evento TRADE_TRANSACTION_DEAL_ADD ocorreu duas vezes (a que reportei inicialmente aqui e outra no dia 17/fevereiro/2026).

Não consigo reproduzir o problema, Alain, pois ele simplesmente ocorre quando executo meus EAs em tempo real.


- FTMO Global Markets Ltd (www.ftmo.com) - uso o cliente abaixo:


Aconteceu em uma conta REAL desta corretora, e a repetição do evento TRADE_TRANSACTION_DEAL_ADD ocorreu uma vez (no dia 17/fevereiro/2026).

Não consigo reproduzir o problema, Alain, pois ele simplesmente ocorre quando executo meus EAs em tempo real.


Informo que as repetições ocorreram em máquinas distintas, em horários distintos, apesar do dia do evento ser o mesmo.

Fico à disposição para prover mais informações.

 
Marcelo De Oliveira Rosa # :

Prezado Alain,

Servidores de corretagem:

- Five Percent Online Ltd ( www.the5ers.com ) - uso o cliente abaixo:

Aconteceu em uma conta demo desta corretora, e a repetição do evento TRADE_TRANSACTION_DEAL_ADD ocorreu duas vezes (a que reportei inicialmente aqui e outra no dia 17/fevereiro/2026).

Não consigo reproduzir o problema, Alain, pois ele simplesmente ocorre quando executo meus EAs em tempo real.


- FTMO Global Markets Ltd ( www.ftmo.com ) - uso o cliente abaixo:


Aconteceu em uma conta REAL desta corretora, e a repetição do evento TRADE_TRANSACTION_DEAL_ADD ocorreu uma vez (no dia 17/fevereiro/2026).

Não consigo reproduzir o problema, Alain, pois ele simplesmente ocorre quando executo meus EAs em tempo real.


Informo que as repetições ocorreram em máquinas distintas, em horários distintos, apesar do dia do evento ser o mesmo.

Fico à disposição para prover mais informações.

Obrigado. Por favor, forneça os nomes dos servidores, conforme exibidos no MT5, e não apenas o nome da corretora.

Seria possível ter acesso a essas contas (pelo menos à de demonstração)?