Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1188

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
Geralmente, a julgar por sua resposta, você não entende realmente como o programa funciona. Portanto, parece ser uma pergunta estúpida. Assim como o comentarista anterior pensa que isso pára. Apenas pela experiência de programação em outras linguagens, acho que ele executa seu corpo em loop, e quando chega um evento, ele mergulha nele. Se o programa executa seu corpo em loop, isso explica porque o programa é escrito dessa forma.
Quando ocorre um evento de "novo tick", o programa é iniciado no manipulador OnTick(), executado até a conclusão e parado. Com a chegada de um novo tique tudo se repete desde o início. Se um novo tick chegou durante a execução do programa, e o programa ainda não terminou de processar o tick anterior (ainda está em execução), então este tick é pulado.
Os programas em MQL não são looped. Eles têm três pontos de entrada - OnInit(), OnDeinit() e OnTick().
Na inicialização, OnInit() é executado, depois quando um tick é recebido - OnTick(), quando a operação é concluída - OnDeinit().
Há outros manipuladores também. Mas é melhor abrir a ajuda em vez de pedir a alguém que a duplique aqui.
Olá. Enquanto trabalhava no meu indicador, encontrei um bug ao reiniciar o terminal. Com base neste bug, fiz um pequeno código fonte para seus testes:
Se este exemplo for lançado em um gráfico (ou é o primeiro terminal a ser iniciado após a partida do sistema), tudo funciona bem. No registro, diz o seguinte:
2020.06.24 21:05:50.773 Loader::Loader symbol: EURUSD timeframe: PERIOD_H1
2020.06.24 21:05:50.773 Carregador::Barras carregadoras: 140433
2020.06.24 21:05:50.773 Loader::Loader Error: 0
2020.06.24 21:05:50.773 Loader::Loader bars (2): 140433
Mas se eu reiniciar o terminal com este indicador, recebo um erro:
2020.06.24 21:07:34.963 Carregador::Símbolo do carregador: EURUSD Prazo: PERÍODO_H1
2020.06.24 21:07:34.963 Loader::Barras Loader: 0
2020.06.24 21:07:34.963 Loader::Loader Error: 4401
2020.06.24 21:07:34.964 Loader::Loader bars (2): 140433
Símbolo e cronograma inicializados ok
2020.06.24 21:07:34.963 Carregador::Símbolo do carregador: EURUSD Prazo: PERÍODO_H1
Mas iBars(símbolo, cronograma) dá 0 por alguma razão
2020.06.24 21:07:34.963 Loader::Barras Loader: 0
Neste caso, aparece o erro 4401.
Mas iBars(Símbolo(), Período()) funciona bem.
2020.06.24 21:07:34.964 Loader::Loader bars (2): 140433
Pelo menos símbolo = Símbolo() e cronograma = Período() de acordo com as mensagens de registro (mesmo durante a defasagem, quando o terminal reinicia). Como o iBars(símbolo, prazo), com símbolo e prazo absolutamente corretos, pode dar zero, enquanto iBars(Símbolo(), Prazo()) funciona bem, se os parâmetros em funções são os mesmos, de acordo com o log?
Como abro uma conta demo MT4 em MetaQuotes Demo? Costumava funcionar sem nenhum problema, agora na última página do diálogo diz: Registro, Espere um pouco, por favor, e neste estado permanece ocioso indefinidamente, os campos com login e senha permanecem vazios. Nenhuma mensagem em log. Tentou tanto a "demonstração" como a "real" e diferentes tipos de contas.
UPD Tried one broker demo - a mesma coisa.
Quando ocorre um evento de "novo tick", o programa é iniciado no manipulador OnTick(), executado até a conclusão e parado. Com a chegada de um novo tique tudo se repete desde o início. Se um novo tick chegou durante a execução do programa, e o programa ainda não terminou de processar o tick anterior (ainda está em execução), então este tick é pulado.
Os programas em MQL não são looped. Eles têm três pontos de entrada - OnInit(), OnDeinit() e OnTick().
Na partida, OnInit() é executado, depois quando um tick é recebido - OnTick(), quando a operação é concluída - OnDeinit().
Há outros manipuladores também. Mas é melhor abrir a ajuda em vez de pedir a alguém que a duplique aqui.
Obrigado. Sim, eu entendo isso, é só que a função está escrita no corpo do programa. Talvez eu não tenha percebido que foi chamado em algum lugar.
Como podemos ver do que você está falando? Dê-nos um exemplo.
Como podemos ver do que você está falando? Dê-nos um exemplo.
Obrigado. Sim, eu entendo, é apenas a função que está escrita no corpo do programa. Talvez eu tenha perdido uma chamada para isso em algum lugar.
Em mql4 as funções são escritas em qualquer ordem, acima não importa, abaixo pode parecer que funciona mais cedo ou mais tarde. Não existe tal coisa em C++ onde todas as funções podem funcionar somente em ordem de escrita e se você quiser chamá-la, ela deve ser definida antes do local de chamada caso contrário o programa trava. O homem me mostrou como escrever funções em ordem diferente, mas não me lembro como fazer isso em C++.
Saudações. Por favor, me ajude. Eu tenho esta pergunta. Se entendo corretamente. O programa é executado do início ao fim, mas pára quando ocorre um evento, por exemplo, um tick, a função ontick começa a ser executada, depois termina sua execução e o programa é executado novamente desde o início? Esta pergunta está relacionada ao seguinte, onde devo escrever, por exemplo, o tamanho do lote comercial, no corpo do programa ou na função de pen drive?
Eu olho para o bot oficial, que é como um exemplo no terminal, há um cálculo de lote no corpo do programa, e não entendo porquê.
Meu lote é calculado da seguinte forma
está no início do Expert Advisor...e eu o coloco no final do código
Quando a função OnTick chama a variável Lots, então a EA a encontra e recalcula.
@Artyom Trishkin
Você é um moderador neste tópico?