Neste artigo
Depois deste artigo, saberá…
- Identificar a última vela fechada no array simples especificado.
- Separar pedido, deal confirmado e posição reconciliada.
- Recusar valores indisponíveis sem os transformar em sinais zero.
Conceitos sem sair do artigo
Backtesting: teste histórico de regras Plano de negociação Conta de demonstração (demo) Drawdown — queda a partir de um máximo Stop loss (SL) Recotação (requote)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.
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.
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
- 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.
- 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.
- 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.
Verifique o que aprendeu
Aprox. 2 minutos de prática.
Ver resposta e explicação
A memória começa pelo mais antigo: shifts 3; 2; 1. Esta resposta depende do pedido e indexação declarados.
Mais perguntas
MQL5 e Python são a mesma infraestrutura?
Não. MQL5 usa eventos e funções MT5; Python pode usar API de fornecedor ou integração com terminal MT5, não necessariamente REST/FIX externo. Compare dependências, dados, eventos e reconciliação, sem vencedor universal por linguagem.
Preciso de programar para executar um EA?
Um EX5 documentado pode funcionar sem escrever código, mas exige verificar inputs, permissões, logs e recuperação. Saber MQL5 não revela fonte não divulgada. Não existe prazo de poucas semanas que garanta avaliação suficiente.
Por que pode um teste ótimo perder no real?
Dados, parâmetros escolhidos, spreads, taxas, tempo e execução podem diferir. Escolher a melhor variante na mesma história exagera evidência, sem garantir bom teste ou falha real. Guarde tentativas e avaliação separada com contratos coerentes.
Um VPS é obrigatório?
Escolha segundo continuidade, dados e execução; o nome VPS não garante latência, preço ou fills. Distinga Windows VPS e Virtual Hosting MetaQuotes, cuja instância remota não é controlada pelo botão local AutoTrading. Confirme condições atuais e recuperação.
Fontes e verificação
- MQL5: CopyBuffer
Posição desde vela atual, elemento mais antigo primeiro em memória física, contagem copiada.
- MQL5: OnTick
Eventos do símbolo do gráfico, NewTick não acumulado se já pendente e AutoTrading não para cálculos.
- MQL5: OrderSend
true não comprova execução; conferir resposta e estado posterior.
- MQL5: OnTradeTransaction
Deal e remoção da ordem são distintos; prioridade de chegada não garantida.
- MQL5: CTrade Buy
Verificação de ResultRetcode e ResultDeal após Buy.
- MQL5: BarsCalculated
Contagem calculada separada da existência de handle.
- MQL5: outras constantes
EMPTY_VALUE=DBL_MAX e marcador personalizado possível.
- MT5: migração de hosting
Ambiente remoto migrado com negociação automática permitida, distinto do botão local.
Os cálculos usam pressupostos explícitos. Não substituem os dados atuais do mercado nem as condições do prestador.
