Neste artigo
Depois deste artigo, saberá…
- Separar condição falsa e valor ausente antes de negar uma comparação.
- Testar fronteiras float, Decimal e unidade inteira declarada.
- Distinguir reconexão de confirmação da execução anterior.
Conceitos sem sair do artigo
Backtesting: teste histórico de regras Execução de ordem Valor nominal da posição Comissão Conta de demonstração (demo) Spread Bid/AskMQL5 e Python oferecem formas diferentes de automatizar um processo definido. Escolha primeiro acesso à conta, dados e ambiente de funcionamento. Linguagem, script curto ou arquitetura híbrida não estabelecem regras lucrativas nem caminho universalmente mais rápido para execução fiável.
Compare arranjos de funcionamento
Um EA MQL5 funciona através de terminal MT5. Python pode usar pacote oficial MetaTrader5, API distinta de corretora ou apenas ficheiros históricos. O pacote oficial comunica com terminal, não liga diretamente a qualquer servidor. Distribuição deve corresponder a intérprete e sistema operativo. A versão PyPI consultada, 5.0.6231, apresenta wheels Windows x86-64; Python disponível noutros sistemas não significa pacote equivalente em todos.
initialize() pode iniciar terminal. Declare instalação pretendida e confira conta, servidor e estado demo/real, em vez de confiar na última conta usada. Ligação bem-sucedida não confirma resultado de ordem anterior. API separada tem entidade, produto, permissões e regras de dados próprias.
| Arranjo | Dependências | Primeira verificação |
|---|---|---|
| EA MQL5 | Terminal, código, parâmetros, conta | Versão ativa e respostas |
| Python via MT5 | Processo Python e terminal | Identidade da conta após ligar |
| Python via API | Autorização, adaptador, limites | Unidades e permissões |
| Pesquisa Python, execução MQL5 | Regras/versões correspondentes | Mesmas entradas de fronteira |
Menos processos podem simplificar supervisão, sem substituir procedimento para rejeição, parcial ou estado incerto. Consulte primeiros passos e fundamentos de EAs pelas dependências concretas.
Integração MQL5 tem condições
MQL5 reúne eventos, funções de negociação e tester. Confira dados, custos e pressupostos, sem tratar simulação como realidade histórica exata da corretora. Otimização cloud tem condições próprias. Modelos preparados fora podem executar através de ONNX suportado: machine learning não exige necessariamente Python durante execução. Verifique shapes, preparação de inputs e convenções de saída.
OnTick não garante callback separado para cada tick recebido: outro NewTick não entra na fila se um já está pendente ou em processamento. Meça carga e tempo relevantes. O nome MQL5 não comprova execução numa fração fixa de milissegundo, e H1 não torna qualquer atraso irrelevante.
Bibliotecas Python não resolvem o adaptador
Uma interface comum ainda precisa de símbolos, quantidades, sessões, dados disponíveis e ordens de cada fornecedor. Macro e várias contas são requisitos para avaliar, não razão automática de superioridade. Guarde versões e configuração. O repositório original ib_insync foi arquivado em 14 de março de 2024; isso não prova código existente inútil, mas tutorial antigo não certifica suporte atual.
Separe credenciais de código público e logs correntes. Um teste analítico de ficheiros não precisa de permissão para ordens. Defina identidade esperada e fonte dos dados; «ligou sem erro» não equivale a «está na conta pretendida e recuperou todas as posições».
Duas arquiteturas híbridas distintas
Numa, Python desenvolve modelo e regras verificadas são colocadas no EA: Python pode deixar de correr se a execução contiver toda a lógica. Noutra, Python envia pedidos continuamente pelo terminal: monitorize ambos os processos, idade do input e estado da conta. Virtual Hosting MetaQuotes migra ambiente suportado de EA/gráfico, não é desktop Windows geral para um processo Python externo.
Um EA de reserva não fecha posição através do mesmo terminal indisponível ou ligação partida. Confira proteção aceite no servidor separadamente. order_send() envia pedido e devolve estrutura; fechar exige ação e contexto da posição adequados. Não há função genérica position_close() documentada nesta interface. Depois de comunicação incerta, reconcilie ordens, deals e posições antes de decidir repetir.
Modelo original separado: pedido 0,10 lotes executa, mas perde-se resposta; repetição cega 0,10 também executa, total 0,20 em vez de 0,10. Com contrato linear EUR/USD 100000 EUR/lote, pip 0,0001 e conta USD, exposição ao pip duplica 1→2 USD. Ambos os fills são pressupostos explícitos; não implica que todo pedido incerto executou nem que todas as contas agrupem posições do mesmo modo.
Negar uma comparação pode aceitar informação ausente
No modelo original de Python escalar, x = float('nan') representa indicador ausente e limiar fictício 10. Não é zero ou número grande. x > 10 devolve False; x <= 10 também False; negar a segunda com not(x <= 10) dá True. Nos finitos podem parecer condições equivalentes, mas não para NaN.
Disponibilidade precede avaliação da regra.
- not(x <=10)
- True – Negação não repara input ausente
- x >10
- False – Comparação ordenada com NaN
- isfinite(x)
- False – Gate explícito bloqueia avaliação
Verifique tipo, disponibilidade e finitude antes de regra. math.isfinite(x) and x > 10 bloqueia este NaN. Conserve o caso ao portar lógica; arrays, Decimal e outras linguagens têm semânticas próprias. True da negação não comprova leitura de indicador. A figura não executa uma versão MQL5 nem demonstra vantagem.
Fronteiras e fills atribuídos
Sinal hipotético fica disponível após vela fechar em 1,1000. Modelo A compra ali, B a Ask posterior 1,1003: diferença de três pips com pip 0,0001. Tempo, movimento e lado da cotação podem contribuir; não rotule toda diferença como overhead Python ou spread. Compare registos individuais antes de retorno.
Um teste vetorizado pode incluir custos e um nome orientado a eventos não certifica fill. O tester MT5 não executa qualquer script Python arbitrário como EA nativo. Mantenha inputs e versões de regras correspondentes. No teste independente de float escalar, 0.1 + 0.2 produz 0.30000000000000004, maior que float(0.3). Decimal construído de strings soma exatamente 0,3 neste modelo; inteiros 1+2=3. Mostrar ambos como «0,3» não altera comparação armazenada.
Limite em EUR com unidade definida
Aplicação própria fictícia: componentes de custo 0,10 EUR e 0,20 EUR devem ser comparadas a teto 0,30 EUR. Float pode acusar soma estritamente superior ao teto, apesar da apresentação com duas casas. Em cêntimos inteiros 10+20=30, não superior a 30. Defina previamente precisão, arredondamento e unidade do contrato; não esconda discrepância arredondando só o ecrã. Isto testa uma política de limite, não tarifas reais ou regras fiscais.
Compare abaixo, igual, acima, ausente e infinito antes de transferir regra. Tolerância escolhida muda fronteira e precisa de justificação. Não generalize estes casos escalares a arrays ou prova de equivalência entre plataformas.
Escolha por requisito reproduzível
Escreva conta/API, dados, momento de decisão, bibliotecas, sistema operativo e supervisão. Avalie o que consegue manter. Protótipo pequeno pode ler e guardar sinal sem negociar. Número de linhas, prazo de instalação ou proporção de aprendizagem dois para um não decide. Identifique necessidade não satisfeita e alternativa mais simples. Se tempo importa, meça no arranjo proposto; período da vela não elimina requisito de execução.
Três ações antes de automatizar pedidos
- Congele uma regra pequena com disponibilidade, igualdade, unidades e saída esperada. Teste fronteiras finitas e dados inválidos independentemente da estratégia.
- Confira conta e estado, separando configuração demo, leitura de dados e permissões de ordens. Exercite indisponibilidade, reinício, rejeição e resposta incerta num ambiente apropriado; reconectar não prova falha da ordem anterior.
- Reconcilie sinais e pressupostos de execução antes dos lucros agregados. Guarde versões e limitações e continue no backtest Python para verificar seleção de inputs, sem certificar fiabilidade a partir de um script curto.
Verifique o que aprendeu
Aprox. 2 minutos de prática.
Ver resposta e explicação
Verifique disponibilidade e isfinite separadamente; True não valida indicador.
Mais perguntas
Preciso de Python sólido para começar?
Comece por tarefa de leitura com inputs e resultado verificáveis, guardando versões. Exemplo de ligação não é sistema completo; permissões, disponibilidade, respostas e reconciliação são trabalho separado. Não existe prazo ou número de linhas universal.
A arquitetura híbrida é estável no real?
Depende do arranjo. Reconectar confirma comunicação, não estado de pedido anterior. Confira ordens, deals e posições. EA de reserva não contorna automaticamente host ou ligação comuns indisponíveis; nenhuma arquitetura garante estabilidade ou perda máxima.
MQL5 serve para tick a tick?
Meça requisito e carga. NewTick pode não ser acrescentado enquanto outro está pendente ou em execução. Comunicação entre processos é dependência, não benchmark fixo de milissegundos. H1 ainda pode ter requisito temporal.
Quando devo migrar para Python?
Quando requisito concreto não pode ser satisfeito ou mantido no arranjo atual. Compare interfaces de modelos, dados e adaptadores; MQL5 suporta ONNX, Python também requer compatibilidade. Nem três meses nem dois sinais garantem retorno do desenvolvimento.
Fontes e verificação
- MetaQuotes: initialize
Ligação ao terminal, instalação, última conta por predefinição e possível início do terminal.
- MetaQuotes: pacote publicado
Release 5.0.6231 consultada com wheelsWindowsx 86-64; não generaliza disponibilidade a todo o sistema.
- MetaQuotes: ONNX
Interface de modelos MQL5, incluindo shapes e teste; não exige Python em toda a execução.
- MetaQuotes: OnTick
NewTick não é acrescentado se já pendente/em processamento.
- MetaQuotes: migração virtual
Ambiente suportado remoto não é desktop geral para processos Python externos.
- Python: expressões
Comparações ordenadas NaN e negação têm semânticas distintas.
- Python: math.isfinite
False para NaN/infinito, True para finitos incluindo zero.
- ib_insync: repositório original
Aviso oficial de arquivo 14/03/2024; não declaração de inutilidade do código existente.
- MetaQuotes: order_send
Pedido MqlTradeRequest e resposta MqlTradeResult; exemplo oficial fecha por pedido oposto identificado, sem função genérica position_close nesta interface.
Os cálculos usam pressupostos explícitos. Não substituem os dados atuais do mercado nem as condições do prestador.
