Spec Match Trade Copier MT5
- Utilitários
-
Quoc Dat Quach
Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself. - Versão: 1.1
- Atualizado: 30 setembro 2026
- Ativações: 10
Um copiador de trades local para o MetaTrader 5. Ele copia posições entre terminais MT5 no mesmo PC Windows ou VPS e dimensiona cada cópia a partir das especificações de contrato das duas corretoras (tamanho do contrato, valor do tick, moeda da conta), de modo que a cópia tenha a mesma exposição mesmo quando as duas corretoras definem o lote de forma diferente. Ele nunca abre uma segunda cópia da mesma posição do mestre.
O que ele faz
Você anexa o mesmo EA a um gráfico em cada terminal:
- No terminal mestre, defina o parâmetro Mode como Master.
- Em cada terminal receptor, defina o parâmetro Mode como Receiver.
O mestre grava suas posições abertas, as especificações dos seus símbolos e um sinal de vida (heartbeat) em um arquivo na pasta compartilhada Common\Files. Cada receptor lê esse arquivo a cada 100 ms e alinha suas próprias posições com as do mestre:
- abre novas posições
- altera stop loss e take profit
- fecha parcialmente
- fecha
Não há servidor, nem conexão de rede, nem DLL, nem WebRequest.
Tamanho do lote que segue o contrato, não o número de lotes
As corretoras definem "1 lote" de formas diferentes. O ouro pode ter 100 oz, 10 oz ou 1 oz por lote. Índices podem ter 1, 10 ou 25 unidades por ponto. Uma conta cent mostra 100 vezes o valor em dinheiro. Um copiador que copia o número de lotes pode abrir 100 vezes a mais ou a menos.
Este copiador mede quanto vale um lote de cada lado. Ele usa OrderCalcProfit, que é o próprio cálculo de lucro da corretora, na moeda da conta. Em seguida, converte o valor do mestre para a moeda da conta do receptor. O valor do tick também é verificado, e o painel mostra um aviso quando os dois divergem.
Uma posição do mestre gera no máximo uma cópia
O receptor mantém um mapa de cópias em disco, com uma linha por posição do mestre:
- Toda cópia leva o comentário SMC:<master position id>.
- Uma solicitação é gravada no mapa antes de ser enviada, de modo que uma falha ou reinicialização no meio de um trade não pode levar a uma segunda cópia.
- Após uma reinicialização, e após você alterar os parâmetros ou o timeframe do gráfico, o receptor recarrega o mapa. A alteração de parâmetros com cópias abertas foi testada ao vivo em receptores hedging e netting: nenhum negócio extra.
- Se o arquivo do mapa for perdido em um receptor hedging, o receptor reconstrói o mapa a partir dos comentários das posições.
- Um receptor netting não consegue reconstruir um mapa perdido, porque uma posição líquida não pode ser dividida de volta nas posições do mestre. Em vez disso, ele coloca em NET_HOLD cada símbolo que tem uma cópia aberta (veja "Quando o copiador para ou retém" abaixo).
Quando algo não bate, o receptor para de copiar e emite um alerta. Ele nunca faz suposições. Exemplos:
- duas posições do receptor levam o mesmo id do mestre
- uma posição copiada não tem id no comentário
- a conta do mestre muda
- o modo de margem da conta muda
- o arquivo do mapa está danificado
- o volume líquido de uma conta netting foi alterado manualmente
O painel mostra quantas duplicatas foram bloqueadas.
Posições copiadas só são fechadas por instrução do mestre
O mestre publica um registro de fechamento para cada posição que fecha, obtido do seu histórico de negócios. O receptor só fecha uma cópia quando vê esse registro. Uma posição também pode sumir do arquivo do mestre sem registro, por exemplo porque o arquivo foi danificado ou o histórico não foi carregado. Nesse caso, a cópia é colocada em HOLD e você recebe um alerta. Ela não é fechada.
O receptor pausa quando acontece qualquer um destes casos, e suas posições ficam como estão:
- o terminal mestre é parado
- o terminal mestre é encerrado à força
- o terminal mestre perde a conexão
- o arquivo do mestre para de ser atualizado (timeout do heartbeat, padrão 3 s)
Monitoramento
O painel de status fica no gráfico do receptor. Ele mostra:
- estado do mestre (ALIVE / SILENT / NOT CONNECTED)
- número de cópias ativas, fechadas, recusadas, retidas e filtradas
- exposição total do mestre versus a do receptor, na moeda da conta, com a diferença em %
- contagem de aberturas, fechamentos, fechamentos parciais, alterações de SL/TP e duplicatas bloqueadas
- a última ação, o último erro e os avisos
- uma linha por posição copiada, até 10 linhas, e depois uma linha "... N more"
Cada ação também é gravada em um diário CSV em Common\Files\SpecMatchCopier.
Quando o copiador para ou retém
O copiador nunca corrige uma inconsistência fazendo suposições. Você corrige a causa e depois o reinicia.
| O painel mostra | O que significa | O que fazer |
|---|---|---|
| COPYING STOPPED | O receptor encontrou algo que não consegue explicar: duas posições para um mesmo id do mestre, uma posição com o número mágico do copiador mas sem id, uma conta do mestre ou um modo de margem alterados, ou um arquivo de mapa danificado. O motivo aparece no painel e no diário. Nada é copiado até que o EA seja reiniciado. | Corrija a causa indicada na mensagem, depois remova o EA do gráfico e anexe-o novamente. Se a causa ainda estiver presente, ele para de novo. |
| COPYING STOPPED: master account changed | O canal agora traz outra conta mestre. | Se a troca for intencional: remova o EA, feche manualmente as cópias do mestre antigo, apague map_<login>_<magic>.txt em Common\Files\SpecMatchCopier (login e número mágico deste receptor) e anexe o EA novamente. |
| COPYING STOPPED: map file is damaged | O mapa de cópias falhou na verificação de checksum. | Hedging: apague o arquivo do mapa e anexe o EA novamente; o mapa é reconstruído a partir dos comentários. Netting: veja NET_HOLD. |
| NET_HOLD (receptor netting) | O volume líquido de um símbolo difere do que o copiador abriu, por exemplo após um trade manual ou a perda do mapa. Esse símbolo não é mais negociado. A retenção fica salva no mapa, então uma reinicialização não a remove. | Remova o EA. Feche manualmente as posições do copiador. Apague map_<login>_<magic>.txt. Anexe o EA novamente. A partir daí, ele copia as posições do mestre abertas depois disso. |
| HOLD em uma linha | Uma cópia está em dúvida. Por exemplo, uma posição do mestre sumiu sem registro de fechamento. Ou uma solicitação de negociação não foi confirmada, por exemplo porque a conexão caiu, e nenhuma posição apareceu em 15 segundos. Se a posição aparecer mais tarde, ela é vinculada à linha retida com um alerta, e nada é enviado duas vezes. Uma cópia retida permanece aberta, mesmo quando o mestre já fechou a posição dele. | Feche ou mantenha a cópia manualmente. O copiador não mexe mais em uma cópia retida. |
Modos de lote
| Modo | Volume do receptor | Considera o contrato |
|---|---|---|
| Same exposure (padrão) | volume do mestre x (valor de 1 lote do mestre / valor de 1 lote do receptor) x multiplicador | sim |
| Balance ratio | Same exposure x (saldo do receptor / saldo do mestre) | sim |
| Equity ratio | Same exposure x (capital líquido do receptor / capital líquido do mestre) | sim |
| Master lot x multiplier | volume do mestre x multiplicador. Um aviso é mostrado quando os contratos diferem | não |
| Fixed lot | o lote fixo, para cada cópia | não |
Em todos os modos, o volume é então:
- arredondado ao passo de volume do receptor (para o mais próximo ou para baixo)
- limitado pelo Max lot opcional e pelo máximo da corretora
- ignorado, ou elevado ao mínimo, quando fica abaixo do mínimo da corretora (à sua escolha)
- verificado com OrderCalcMargin em relação à margem livre antes do envio
Uma cópia é recusada quando um lote de um lado vale mais de 1.000 vezes um lote do outro lado. Esse limite pode ser alterado. Em geral, isso indica um mapeamento de símbolo errado.
Exemplo prático: ouro, de 100 oz por lote para 1 oz por lote
| Mestre (corretora A) | Receptor (corretora B) | |
|---|---|---|
| Símbolo | XAUUSD | XAUUSD.cs (correspondência automática) |
| Tamanho do contrato | 100 oz | 1 oz |
| Conta | USD | USD |
| Preço do ouro | 4.178,13 | 4.178,13 |
| Valor de 1 lote | 100 x 4.178,13 = 417.813 USD | 1 x 4.178,13 = 4.178,13 USD |
O mestre abre 0,10 lote, que equivale a 10 oz, no valor de 41.781 USD.
- Same exposure: 0,10 x 417.813 / 4.178,13 = 10,00 lotes no receptor, que equivalem a 10 oz, no valor de 41.781 USD. Um copiador que copia o número de lotes abriria 0,10 lote = 0,1 oz, um centésimo da exposição.
- Receptor cent (moeda da conta USC, contrato de 1 oz): a corretora informa 417.813 USC para 1 lote, o que corresponde a 4.178,13 USD após o fator de centavos. O receptor recebe os mesmos 10,00 lotes.
- Balance ratio (saldo do mestre 10.000 USD, saldo do receptor 1.000 USD): 10,00 x 1.000 / 10.000 = 1,00 lote.
Esses números são os testes unitários entregues com o relatório de testes. O mesmo cálculo também rodou ao vivo: XAGUSD com 5.000 oz por lote em uma conta USD foi copiado para XAGEUR com 1.000 oz por lote em uma conta EUR. 0,10 lote virou 0,50 lote.
Correspondência de símbolos
O receptor encontra o símbolo do mestre nesta ordem:
- Mapa manual (XAUUSD=GOLD.x,US30=DJ30). Ele sempre tem prioridade e nunca recorre a outro método.
- O mesmo nome.
- A dica Suffix / Prefix (.cs, m, #).
- O mesmo nome-base depois que as decorações da corretora são removidas: XAUUSD.cs, XAUUSDm, #XAUUSD, EURUSD.pro, US500Cash, fxEURUSD e similares.
- Aliases internos: GOLD/XAUUSD, SILVER/XAGUSD, US30/DJ30/WS30, NAS100/US100/USTEC, US500/SPX500, GER40/DE40/DAX, UK100, JP225, USOIL/WTI, UKOIL/BRENT, BTCUSD, ETHUSD.
Quando dois símbolos do receptor se encaixam igualmente, é usado o que está na Observação do mercado. Se ambos ou nenhum deles estiverem na Observação do mercado, a cópia é recusada e o painel pede um mapa manual. Por exemplo, a Exness oferece US30m (1 unidade de índice por lote) e US30_x10m (10 unidades por lote). Os dois se encaixam no US30 de um mestre, então adicione o que você quer à Observação do mercado ou mapeie-o. O lote é convertido em qualquer um dos casos.
Dígitos após um par de moedas não são tratados como decoração da corretora. O XAUUSD247m da Exness (ouro que também é negociado nos fins de semana) é um produto diferente, então o XAUUSD de um mestre é copiado para XAUUSDm, nunca para XAUUSD247m. Mapeie-o manualmente se realmente quiser usá-lo.
Antes da primeira cópia de um símbolo, o receptor compara os dois preços na moeda da sua conta. A cópia é recusada quando eles diferem em mais de 3%, valor que pode ser alterado. Isso detecta mapeamentos como "GOLD", que em algumas corretoras é uma ação de mineradora de ouro que vale cerca de 40 USD, e não ouro.
Parâmetros de entrada
| Parâmetro | Padrão | Significado |
|---|---|---|
| Mode of this terminal | Receiver | Master publica; Receiver copia |
| Channel | 1 | Liga um mestre aos seus receptores. Use um texto diferente para cada mestre no PC |
| Cent account (this terminal) | Auto | Auto trata as moedas de conta USC/EUC como cent. Defina Yes/No se a sua corretora usa outro código |
| Master scan interval, ms | 200 | Com que frequência o mestre verifica mudanças, além dos eventos de negociação |
| Master heartbeat interval, ms | 500 | Com que frequência o mestre regrava seu arquivo quando nada muda |
| Lot mode | Same exposure | Veja os modos de lote acima |
| Fixed lot | 0.01 | Usado pelo modo Fixed lot |
| Multiplier | 1.0 | Aplica-se a todos os modos, exceto Fixed lot |
| Max lot of one copied position | 0 (desativado) | Limite superior para uma cópia |
| Volume rounding | Nearest | Passo de volume mais próximo ou para baixo |
| Volume below the broker minimum | Skip | Ignorar a cópia ou usar o volume mínimo |
| Refuse if one lot is worth more than x times the other | 1000 | Protege contra mapeamentos errados |
| Manual symbol map | vazio | Pares MASTER=RECEIVER separados por vírgulas |
| Receiver symbol suffix hint | vazio | Por exemplo .cs |
| Receiver symbol prefix hint | vazio | Por exemplo # |
| Refuse a mapping if prices differ by more than, % | 3.0 | 0 desativa a verificação |
| Copy only these master symbols | vazio (todos) | Separados por vírgula |
| Never copy these master symbols | vazio | Separados por vírgula |
| Copy only these master magic numbers | vazio (todos) | Separados por vírgula |
| Never copy these master magic numbers | vazio | Separados por vírgula |
| Reverse copy | false | Compra vira venda; stop loss e take profit trocam de lugar |
| Copy stop loss and take profit | true | |
| Copy positions already open at the first start | false | Por padrão, só são copiadas as posições abertas depois que o receptor é iniciado |
| Skip if price moved more than, % since master entry | 0.10 | Protege contra cópias atrasadas após uma pausa. 0 desativa |
| Master heartbeat timeout, ms | 3000 | A cópia pausa quando o arquivo do mestre é mais antigo que isso |
| Hold if a master position vanishes without a close record, s | 30 | |
| Max slippage, points | 20 | Para símbolos com execução instantânea |
| Magic number of copied positions | 7310001 | Um receptor por conta e número mágico. Use outro número mágico para um segundo receptor na mesma conta |
| Expected master account | 0 | 0 aceita o primeiro mestre visto. Caso contrário, a cópia para se outra conta aparecer no canal |
| Show the status panel | true | |
| Panel X / Y offset, px | 12 / 24 | |
| Popup alerts / Push notifications | true / false | |
| CSV journal | true | Common\Files\SpecMatchCopier\journal_<account>_<magic>.csv |
Configuração
- Copie o EA para os dois terminais. Eles precisam rodar sob o mesmo usuário do Windows, porque a pasta Common\Files pertence ao usuário. Use a mesma versão do EA no mestre e em todos os terminais receptores: após uma atualização, atualize-o em todos eles.
- No terminal mestre, anexe o EA a qualquer gráfico com Mode = Master.
- Em cada terminal receptor, anexe o EA a qualquer gráfico com Mode = Receiver e o mesmo Channel.
- Ative o Algo Trading nos terminais receptores.
- Abra uma posição pequena no mestre. O painel do receptor mostra a cópia e a conversão do lote.
Testador de estratégia
O Testador de estratégia não tem um segundo terminal. Por isso, no testador, o EA executa um mestre simulado:
- ele abre, modifica, fecha parcialmente e fecha posições virtuais a cada poucas barras, cada uma dimensionada para perder cerca de 1% do saldo no stop loss e usar no máximo 10% do saldo como margem
- as posições virtuais nunca são enviadas como ordens
- ele copia essas posições virtuais para a conta do testador com o modo de lote selecionado e todas as verificações pré-negociação
Isso permite ver a lógica de cópia e a conversão de lote sem um segundo terminal. Não é uma estratégia de negociação, e os resultados dele no testador não dizem nada sobre lucro.
Limitações (por favor, leia antes de comprar)
- Somente no mesmo PC: o mestre e os receptores precisam rodar no mesmo PC Windows ou VPS, sob um único usuário do Windows. A cópia pela internet não é suportada.
- O VPS integrado do MQL5 não consegue executá-lo. Cada terminal migrado tem seu próprio armazenamento.
- Somente de MT5 para MT5. Ordens pendentes não são copiadas; uma ordem pendente é copiada quando é executada e se torna uma posição.
- Mercados fechados: quando o símbolo do receptor está fora da sua sessão de negociação, nada é enviado. O copiador espera a sessão abrir e então copia o que ainda for necessário. Uma nova posição continua sujeita ao limite "Skip if price moved". Um fechamento que o mestre fez enquanto o mercado do receptor estava fechado é executado quando esse mercado abre, ao preço daquele momento.
- Velocidade: em medições em contas demo, a posição do receptor ficou igual à do mestre de 0,2 a 1,1 s após o trade do mestre (mediana de 0,3 s, 60 medições; o caso de 1,1 s foi o fechamento de 10 posições de uma vez em uma conta netting). Isso corresponde a 100 ms de polling mais o tempo de execução da corretora. As cópias são executadas aos preços do próprio receptor, então podem diferir dos preços do mestre, especialmente perto de notícias.
- Níveis de stop loss e take profit:
- Quando os dois símbolos são cotados na mesma moeda, os níveis exatos são copiados.
- Caso contrário, por exemplo de XAGUSD para XAGEUR, os níveis são ajustados pela razão entre os preços.
- Em um receptor netting, o SL/TP só é copiado quando todas as posições do mestre naquele símbolo usam os mesmos níveis.
- Posições que você fecha ou reduz manualmente no receptor são deixadas como estão. Elas nunca são reabertas.
- Receptor offline por mais de 48 horas: o mestre guarda os registros de fechamento por 48 horas. Uma cópia cuja posição do mestre foi fechada antes disso não é fechada automaticamente. Ela vai para HOLD com um alerta, e você a fecha manualmente.
- Níveis de stop recusados na abertura: quando a corretora rejeita o stop loss ou o take profit de uma nova cópia (stops inválidos, por exemplo um nível de stops ampliado perto de notícias), a cópia é recusada e não é tentada novamente. O painel a mostra como REFUSED.
- Cópias limitadas: quando uma cópia é limitada pelo Max lot ou pelo volume máximo da corretora, um fechamento parcial no mestre só reduz a cópia quando o novo volume escalado fica abaixo do que está aberto. Até lá, a cópia permanece no limite.
- Sem gestão de risco: o copiador não limita drawdown nem perda diária e não gerencia contas. Ele copia o que o mestre faz.
- A mesma versão em todos os terminais: o mestre e os receptores medem o valor de um lote com o mesmo código. Rode a mesma versão do EA em todos os terminais. Por exemplo, um mestre v1.00 com um receptor v1.01 mantém o arredondamento de centavos da v1.00 para CFDs de ações e outros contratos com pequeno valor por lote.
- Dinheiro insuficiente na corretora: quando a corretora rejeita uma nova cópia por margem, a cópia é recusada e não é tentada novamente. Algumas corretoras cobram mais margem do que o próprio cálculo de margem do MetaTrader mostra; a demo da Exness usada nos testes cobrava.
- Ambiente testado:
- Testado ao vivo com contas MetaQuotes-Demo: mestre USD, receptor hedging EUR, receptor netting USD.
- O mestre também foi testado em uma conta netting USD, com aumentos de posição, uma reversão com um único negócio, um fechamento parcial e um fechamento total.
- Testado ao vivo entre duas corretoras, MetaQuotes-Demo e uma demo Exness Standard (USD, hedging, símbolos com o sufixo "m"), nas duas direções:
- MetaQuotes-Demo para Exness, correspondência automática: XAUUSD para XAUUSDm, XAGUSD para XAGUSDm, EURUSD para EURUSDm. Testado com abertura com SL/TP, alteração de SL, fechamento parcial, reinicialização do receptor, alteração de parâmetros e fechamento.
- Exness para uma conta EUR da MetaQuotes-Demo, correspondência automática: XAUUSDm para XAUUSD, XAGUSDm para XAGUSD, EURUSDm para EURUSD. Testado com abertura, alteração de SL, fechamento parcial e fechamento. O CFD de ação BACm (100 ações por lote) foi copiado para BAC (1 ação por lote): 0,10 lote virou 10.
- Tamanhos de contrato diferentes dentro da Exness, com mapa manual: US30m para US30_x10m (0,30 lote virou 0,03), USTECm para USTEC_x100m e US500m para US500_x100m (1,00 lote virou 0,01), e BTCUSDm para BTCUSDTm.
- Em todas as execuções: 0 duplicatas e uma diferença de exposição de 0,00% a 0,01% no painel. Mapeamentos errados foram recusados pela verificação de preço. Correspondências ambíguas foram recusadas até que um dos símbolos estivesse na Observação do mercado.
- Ouro de 1 oz e contas cent são cobertos por testes unitários com especificações de corretora sintéticas, não por contas ao vivo. Nenhuma das duas corretoras os oferecia em conta demo.
- Por favor, teste com as suas corretoras em contas demo antes de copiar dinheiro real.
