Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 742
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Em código real, a função devolve um objecto.
Penso que o construtor de cópias deveria criar uma cópia temporária neste caso.
O código funciona correctamente em MQL5 build 1545.
Na nova construção, o construtor de cópias não pode redimensionar nem mesmo uma matriz unidimensional: Erro 4007.
Penso que não é correcto.
É difícil para mim fazer uma declaração definitiva neste caso. Há muito bons peritos para a sua pergunta, por isso recomendo que a dirija à filialhttps://www.mql5.com/ru/forum/1111.
Com as minhas edições o código funciona como deveria. Sem ele, não o faz. Mas se o seu código deve ou não funcionar é melhor para o ramo no link acima.
Em código real, a função devolve um objecto.
Penso que o construtor de cópias deveria criar uma cópia temporária neste caso.
O código funciona correctamente em MQL5 build 1545.
Na nova construção, o construtor de cópias não pode redimensionar nem mesmo uma matriz unidimensional: Erro 4007.
Isto não é correcto, na minha opinião.
O erro foi corrigido na construção 1580, obrigado, tudo funciona como deveria).
É difícil para mim dizer algo definitivo neste caso. Há muito bons especialistas na sua questão, por isso recomendo que a aborde com a filialhttps://www.mql5.com/ru/forum/1111.
Com as minhas edições o código funciona como deveria. Sem ele, não o faz. Mas se o seu código deve ou não funcionar é melhor ser direccionado para o ramo no link acima.
Obrigado pela ligação.
Talvez alguém me possa dar uma dica.
Não consigo descobrir como interromper a execução da EA depois de alterar manualmente as definições de entrada.
1) Executar o código EA desta forma no gráfico:
2) Abrir a janela de definições e alterar o parâmetro "Setting_" para 1.
3) E aplicar as alterações.
Assim, para começar a aplicar as alterações, o OnInit deve ser executado, mas o OnInit não será executado até que os cálculos no OnTick (ou qualquer outro) parem.
Tanto quanto sei, existe apenas uma verificação paraparar o programa através de _StopFlag - bandeira para parar um programa mql5, mas é apenas para a saída completa. Mas não sei como compreender que as definições de entrada tenham mudado para parar os cálculos.
Talvez alguém tenha enfrentado uma tal situação? Talvez haja algum hack secreto?
Talvez alguém me possa dar uma dica.
Não consigo descobrir como interromper a execução da EA depois de alterar manualmente as definições de entrada.
1) Executar o código EA desta forma no gráfico:
2) Abrir a janela de definições e alterar o parâmetro "Setting_" para 1.
3) E aplicar as alterações.
Assim, para começar a aplicar as alterações, o OnInit deve ser executado, mas o OnInit não será executado até que os cálculos no OnTick (ou qualquer outro) parem.
Tanto quanto sei, existe apenas uma verificação paraparar o programa através de _StopFlag - bandeira para parar um programa mql5, mas é apenas para a saída completa. Mas não sei como compreender que as definições de entrada tenham mudado para parar os cálculos.
Talvez alguém tenha enfrentado uma tal situação? Talvez haja algum hack secreto?
Verificar o código de desinicialização no OnInit()
Causas de desinicialização
Códigos de razão de desinicialização do Expert Advisor devolvidos por UninitializeReason(). Podem ter qualquer um dos seguintes valores:
Constante .
Valor
Descrição
RAZÃO_PROGRAMA
0
Expert parou o seu trabalho ao chamar ExpertRemove()
REASON_REMOVE
1
Programa retirado do gráfico
RACIOCÍNIO_RECOMPILAR
2
Programa recompilado
REASON_CHARTCHANGE
3
O símbolo ou período do gráfico foi alterado
REASON_CHARTCLOSE
4
O gráfico está fechado
PARÂMETROS_DE_RAZÃO
5
Os parâmetros de entrada foram alterados pelo utilizador
RAZÃO_COUNTURA
6
Outra conta foi activada ou reconectada ao servidor de negociação porque as definições da conta foram alteradas
REASON_TEMPLATE
7
Foi aplicado outro modelo de gráfico
REASON_INITFAILED
8
Um sinal de que o manipulador OnInit() devolveu um valor não nulo
RAZÃO_CLOSE
9
O terminal foi encerrado
Verificar o código de desinicialização no OnInit()
...
Um... Você não me entendeu :)
É preciso saber dentro da função (por exemplo noOnTick), que o utilizador alterou os parâmetros de entrada, ou seja, para saber que está na altura de terminar e deixar o programa ir para o OnDeinit.
Um... Não me entendeu bem :)
É preciso saber dentro da função (por exemplo, noOnTick) que o utilizador alterou os parâmetros de entrada, ou seja, saber que está na altura de lhe chamar um dia e deixar o programa sair para o OnDeinit.
Assim que um utilizador chama a janela de definições EA (F7) e clica aí no botão OK, OnDeinit() é imediatamente chamado, e este, por sua vez, escreve no código de desinicialização o valor de REASON_PARAMETERS. Então OnInit() é chamado, onde usando UninitializeReason() pode verificar o código de desinicialização e, se o seu valor for igual aREASON_PARAMETERS, decidir o que fazer a seguir.
Muito bem.
Por favor:
1) Primeiro executei o meu código, que dei no meu primeiro posto. Não o pus lá por uma questão de beleza. Pode executá-lo em qualquer gráfico.
2) Chamar a janela de definições da EA.
3) Alterar o parâmetro e premir OK.
Se olhar cuidadosamente para o meu código, então o resultado não o surpreenderá: OnDeinit() não será chamado.
Não só isso, acrescentei uma impressão no deinit, tanto a razão como o parâmetro, para que se possa certificar de que o perito NÃO atinge o deinit.
Por favor note a peça mais importante do código:
É uma emulação clara de um cálculo longo que não será interrompido por uma alteração nos parâmetros de entrada. E preciso de o interromper e a questão é como? :)
Só quero ter a certeza de que não estou a perder nada na MQL5 e não há realmente mais nada na língua a não ser_StopFlag, o que infelizmente não resolve esta situação.
Grosso modo, preciso de apanhar o momento em que os parâmetros de entrada mudam durante um cálculo pesado.
Não só isso, acrescentei uma impressão no deinit, tanto a razão como o parâmetro, para que se possa certificar de que o perito NÃO atinge o deinit.
Por favor note a peça mais importante do código:
É uma emulação clara de um cálculo longo que não será interrompido por uma alteração nos parâmetros de entrada. E preciso de o interromper e a questão é como? :)
Só quero ter a certeza de que não estou a perder nada na MQL5 e não há realmente mais nada na língua a não ser_StopFlag, o que infelizmente não resolve esta situação.
Grosso modo, preciso de apanhar o momento em que os parâmetros de entrada mudam durante um cálculo pesado.
Grosseiramente falando - releia cuidadosamente o que lhe escrevi e largue o loop infinito do seu código.
Tem a certeza de que conduzir o Expert Advisor para um loop infinito é a solução certa?