Um Expert Advisor MQL5 é um programa orientado a eventos no MetaTrader 5. Pode avaliar regras e enviar pedidos de negociação quando existem permissões. Processar um evento, autorizar um pedido e executar uma operação são estados diferentes. Anexar o programa a um gráfico não demonstra resultado de negociação.

O que é um Expert Advisor?

O MetaEditor compila código MQ5 para executável EX5. Um fornecedor pode distribuir apenas o executável: aprender a linguagem não revela um algoritmo cujo código não foi divulgado. EAs podem enviar pedidos permitidos. Indicadores têm outros eventos e restrições de funções de negociação; dizer que «só desenham» também é demasiado estreito, pois podem calcular e notificar.

MQL5 usa o ambiente MT5. O nome Expert Advisor também existe no MT4, com linguagem e interface próprias. Outros sistemas automáticos podem usar outras interfaces de ordens. Compare EAs no MT4 e MT5 e os primeiros passos algorítmicos pelas dependências concretas.

Índice zero não significa sempre última vela fechada

No modelo original, CopyBuffer termina com sucesso, start_pos=1, count=3, e devolve exatamente três elementos a um array simples sem AS_SERIES. A seleção inclui shifts 3, 2 e 1, nesta ordem física, com valores fictícios 103, 101 e 102. Assim, índice 0 contém 103, mais antigo; índice 2 contém 102, da última vela fechada. A vela atual, shift 0, não foi copiada.

Array simples: mais antigo primeiroCopyBuffer start_pos=1, count=3 devolve exatamente 3, sem erro ou cópia parcial, e não usa AS_SERIES.EXEMPLO DE CÁLCULOÍndice 0shift 3 =103Índice 1shift 2 =101Índice 2shift 1 =102
Array simples: mais antigo primeiro. CopyBuffer start_pos=1, count=3 devolve exatamente 3, sem erro ou cópia parcial, e não usa AS_SERIES.

Contagem correta não evita escolher a vela errada.

Índice 0
shift 3 =103 – Mais antigo; >102,5 passa
Índice 1
shift 2 =101 – Intermédio
Índice 2
shift 1 =102 – Última fechada; >102,5 falha

O teste «maior que 102,5» passa para 103 e falha para 102. Um erro na escolha do elemento inverte a mesma comparação sem qualquer falha aritmética. Registe posição inicial, contagem realmente devolvida e indexação do destino. Não aplique índice 2 universalmente a outros pedidos ou propriedades de array. Copiar a quantidade certa não comprova que a estratégia leu a vela certa.

Inicialização, ticks e desinicialização

OnInit trata a inicialização: confira recursos e devolva falha se não puder preparar o necessário. É um evento do ciclo de vida, não promessa de que ocorrerá apenas uma vez em toda a utilização. OnDeinit trata a desinicialização e respetivo motivo, incluindo remoção, encerramento ou alterações que provocam reinicialização. Faça gestão explícita de recursos e estado conservado.

OnTick recebe NewTick do símbolo do gráfico. Se já há um NewTick em fila ou em processamento, outro não é acrescentado. O EA também pode usar outros eventos e nem sequer precisa de implementar OnTick. Desativar AutoTrading proíbe novos pedidos do EA, mas não interrompe o handler atual nem deixa de executar cálculos. OnTimer e OnTradeTransaction podem ser essenciais. Num EA multissímbolo, tick do gráfico não comprova atualidade dos outros instrumentos.

CTrade, pedidos e reconciliação de exposição

OrderSend envia um pedido; devolver true não comprova execução da operação. Examine código de resposta e reconcilie ordens, deals e posições. OrderCheck é pré-verificação, não garantia de execução posterior. CTrade disponibiliza Buy, Sell e PositionClose. Mesmo que Buy passe a verificação, confira ResultRetcode e ResultDeal.

No ensaio de falha original, o EA pede compra de 0,10 lotes e perde certeza sobre a resposta. Repetir sem reconciliação pode produzir 0,20 se ambos os pedidos forem executados. Ausência de confirmação local não demonstra que o servidor nada fez. Distinga erro definitivo de estado incerto e defina recuperação antes de permitir novo pedido.

Segundo modelo original: sem posição inicial, duas compras confirmadas, D1=0,04 e D2=0,06 lotes. Um contador defeituoso repõe zero em ORDER_DELETE: D1,D2,ORDER_DELETE termina em zero; ORDER_DELETE,D1,D2 termina em 0,10. A soma das compras confirmadas é 0,10 em ambas. A documentação não garante prioridade de chegada destas notificações. Estado da ordem e exposição são campos diferentes. Um registo real também precisa de vendas, reversões, correções da história e modo de contabilização.

Contraprova de risco em EUR

Modelo próprio linear, não especificação real de corretora: um lote paga 10 EUR por pip. Para 0,10 lotes, movimento adverso de 20 pips representa 20 EUR antes de custos; duplicação para 0,20 representa 40 EUR. A aritmética do stop pode estar correta e o orçamento falhar porque a exposição duplicou. Os 20 pips são cenário de preço, não garantia de perda máxima; gaps, slippage e custos precisam de avaliação separada.

O tester verifica implementação sob condições declaradas

O Strategy Tester pode usar ticks gerados ou recolhidos pela corretora, conforme modo e dados disponíveis. Registe origem, tempo, contrato e custos; «ticks reais» não significa fonte universal de preços MetaQuotes. Selecionar parâmetros na história depois usada como avaliação pode exagerar evidência, mas não garante matematicamente curva bonita ou falha real.

Preserve período de avaliação não consultado e todas as escolhas de pesquisa. Backtesting exige cronologia e contratos comparáveis. Um resultado favorável não demonstra persistência futura. O tester emula atrasos, mas isso não mede todas as execuções que ocorrerão no mercado.

Quando a automatização ajuda ou prejudica

Um EA pode repetir verificações e vigiar instrumentos. Duzentas operações mensais, funcionamento noturno e decisões rápidas são possíveis requisitos, não provas de vantagem. Defina informação, eventos e condições de não negociar. Publicações económicas invulgares requerem teste e supervisão; não desqualificam automaticamente qualquer automatização.

Um gráfico comercial ou inquérito de fórum não identificado não estima fiabilidade futura. Use testes de aceitação para dados ausentes, reinício, passo de volume inválido, resposta incerta e intervenção manual. Recupere exposição atual antes de retomar, em vez de confiar num sinal local antigo.

Escrever o próprio EA e operá-lo são tarefas diferentes

Um projeto pequeno ajuda a verificar implementação de regras precisas. O orçamento de aprendizagem depende de conhecimentos e funções; três a seis meses ou construir em vez de comprar não garantem resultado superior. Funcionamento sem presença exige infraestrutura, permissões e recuperação.

O botão local AutoTrading não fecha posições. Um stop normal aceite pelo servidor pode continuar após fechar o terminal; uma saída apenas calculada pelo EA exige programa ativo e ligação ao servidor. MetaQuotes Virtual Hosting é ambiente migrado separado com negociação automática permitida: o botão local não desliga essa instância remota. Um VPS Windows é outro serviço. Consulte infraestrutura e latência segundo o caminho real de execução, sem prometer preenchimentos.

Em netting, estratégias no mesmo símbolo partilham posição líquida. Magic Number não cria capital ou margem separados. Confirme o modo da conta e alterações manuais na reconciliação; comentários identificadores não substituem o estado financeiro.

Handle existente não significa valor pronto

BarsCalculated devolve contagem calculada ou −1 em erro. Depois confira buffer, offset da vela e quantidade efetivamente copiada. No modelo de um valor: A tem handle inválido, sem leitura; B tem handle mas zero copiados, precisa de esperar; C copia um EMPTY_VALUE, sem sinal utilizável; D copia valor válido fictício 45, permitindo avaliar a regra. O 45 não é recomendação de investimento.

Quatro verificações de disponibilidadeHandle, cálculo, contagem copiada e valor utilizável são estados diferentes.EXEMPLO DE CÁLCULOA / BHandle inválido / zerocopiadosCUm EMPTY_VALUE copiadoDUm valor válido 45
Quatro verificações de disponibilidade. Handle, cálculo, contagem copiada e valor utilizável são estados diferentes.

Não substitua informação ausente por zero.

A / B
Handle inválido / zero copiados – Sem avaliação de sinal
C
Um EMPTY_VALUE copiado – Contagem correta, valor indisponível
D
Um valor válido 45 – Só agora avaliar a regra definida

EMPTY_VALUE corresponde por defeito a DBL_MAX, que é finito. Testar apenas finitude não chega. Um indicador personalizado pode definir outro marcador; confira o contrato, sem rejeitar todo o zero. Substituir leitura falhada por zero de RSI fabrica um estado extremo, não representa «ainda indisponível». Exercício: um valor foi copiado, mas é EMPTY_VALUE. Registe indisponibilidade e volte a tentar no evento apropriado; não avalie o limiar. Dados de API exigem ainda verificação de disponibilidade histórica; regras dependentes de gráfico exigem examinar modo visual.

Três ações num ambiente controlado

  1. Num demo apropriado, abra o tester e um exemplo incorporado, Moving Average ou MACD Sample, em EUR/USD H1. Leia curva, drawdown e profit factor com pressupostos, sem interpretar execução demo como réplica do real.
  2. Leia OnInit, OnTick e CTrade na referência oficial. Escreva entradas, saídas, volume e condições de não negociar, marcando decisões discricionárias explicitamente.
  3. Planeie um projeto pequeno com testes de dados, eventos, reinício e respostas. Confira o fluxo em demo e guarde logs antes de considerar exposição real. Duração depende da tarefa; um mês ilustrativo não certifica prontidão.