1. ok. Int start() foi declarado. Eu sempre retornei zero. Vi os comandos de retorno(-1) e até retorno(-2) no código também. Qual é a maneira correta de escolher este código?
2. Então a questão natural surge, é possível declarar início() de EA/indicador/script não do tipo int(), mas de qualquer outro tipo e então o que retornar ao terminal? Em outras palavras, o que faz o terminal com o valor retornado por retorno() ?
1. Como você decide o que uma função normal deve retornar?
2. Você pode ter qualquer tipo, assim como uma função normal. O terminal não faz nada com os valores devolvidos. Ela os ignora.
1) Como você decide o que uma função normal deve retornar?
2. Você pode ter qualquer tipo, assim como uma função normal. O terminal não faz nada com os valores devolvidos. Ela os ignora.
1. A fim de decidir o que uma função comum deve retornar, preciso saber por que o código principal precisa de tal valor. Por exemplo, se eu quiser tomar a decisão de abrir uma ordem de compra quando houver um sinal, escreverei uma função que retorna o número de ordens de compra que já estão abertas. Dependendo de quantos são, o código tomará uma decisão seguindo a lógica embutida no código. Eu não sei qual lógica está embutida no código de retorno. Hoje eu estava vendo um artigo sobre a criação de um semáforo e encontrei um código de retorno (-2). Surpreendido, fiz uma pergunta aqui. Isso é tudo. ( https://www.mql5.com/ru/articles/1412 - artigo aqui).
2. O terminal ignora os valores devolvidos. É assim? Se assim for, surge novamente uma pergunta legítima, por que na criação de um EA/indicador/script, o desenvolvedor coloca em um modelo exatamente int, porque seria mais razoável colocar lá vazio - então o terminal não precisa ignorar nada - ganharíamos 1 tato de tempo de processador? Talvez haja alguma lógica em O QUE retornar das funções int init(), int deinit() e int start()? Acho que Roche já explicou isso a alguém em algum lugar - ele se lembrou de uma descrição de quando retornar zero e quando retornar (-1). Era esta mesma explicação que eu estava procurando. Pena que não consegui encontrá-lo...
P.S.
O autor do artigo utiliza a devolução(-2) para seus próprios fins. Mas o fato é que às vezes a função start() termina com o código retornando um valor diferente de zero. E não é apenas uma pessoa que o faz. Esta é exatamente esta lógica que queremos entender.
Funções pré-definidas podem ter parâmetros. Entretanto, quando estas funções são chamadas pelo terminal do cliente, nenhum parâmetro será passado externamente, mas os valores padrão serão usados.
Trata-se dos parâmetros que entram na função, não dos parâmetros devolvidos por ela.
drknn: Este é um contador de pedidos. Bem, pode ser o caso, por exemplo, que você queira saber no código se há ordens de compra no mercado para um determinado par de moedas e com um certo número mágico, por exemplo. Se houver, por exemplo, outra ordem de compra não pode ser aberta. Portanto, o contador de pedidos é necessário para tomar uma decisão.
Obrigado, encontrei meu erro. Quando minha EA ficou presa por causa da razão dada no artigo (link acima), eu a fechei e comecei novamente, mas esqueci de mudar o mestre de pedidos de 123 para 124 e dois EAs de direcionamento diferente conseguiram os mesmos mags e começaram a competir para ver quem abre os pedidos mais rápido. Se a primeira ordem foi aberta primeiro, não foi o mesmo que, digamos, Vender ou vice-versa. Assim que mudei a segunda atualização da magia da EA, ambos começaram a trabalhar normalmente. Se o erro acontecer novamente, vou seguir seu conselho. Obrigado pelas respostas.
2012.07.20 12:08:19 111 NZDUSD,M15: carregado com sucesso
O terminal parece se importar se o zero é devolvido ou não.
P.S.
De modo geral, na web, esta resposta foi encontrada:
retornar 0 - o programa completou seu trabalho sem erros retornar 1 - ou número superior, o programa terminou seu trabalho com um erro e retorna o código de erro para processamento posterior.
Em qualquer sistema operacional, qualquer programa sempre retorna um código de erro.
O único problema é que nosso retorno não devolve o código para o sistema operacional, mas para o terminal. Isto deixa a questão em aberto.
Você está ligeiramente confuso, UNINIT REASON não tem nada a ver com retornos relativos a funções padrão. Escreva um EA e chame o "init" de "início" com diferentes resultados de retorno e veja. Na verdadehttps://docs.mql4.com/ru/basis/functions/special, o documento diz tudo isso perfeitamente. Basta relê-lo novamente com cuidado .
1. Para decidir exatamente o que uma função normal deve retornar, eu deveria saber porque o código principal precisa de tal valor. Por exemplo, se eu quiser tomar a decisão de abrir uma ordem de compra quando houver um sinal, eu escreverei uma função que devolva o número de ordens de compra já abertas. Dependendo de quantos são, o código tomará uma decisão seguindo a lógica embutida no código. Eu não sei qual lógica está embutida no código de retorno. Hoje eu estava vendo um artigo sobre a criação de um semáforo e encontrei um código de retorno (-2). Surpreendido, fiz uma pergunta aqui. Isso é tudo. ( https://www.mql5.com/ru/articles/1412 - artigo aqui).
2. O terminal ignora os valores de retorno. Isto é preciso? Se assim for, surge novamente uma pergunta legítima, por que ao criar um EA/indicador/script o desenvolvedor colocou um modelo exatamente int, porque seria mais lógico colocá-lo vazio - então o terminal não teria que ignorar nada - então ganharíamos 1 tato de tempo de processador? Talvez haja alguma lógica em O QUE retornar das funções int init(), int deinit() e int start()? Acho que Roche já explicou isso a alguém em algum lugar - ele se lembrou de uma descrição de quando retornar zero e quando retornar (-1). Era esta mesma explicação que eu estava procurando. Pena que não consegui encontrá-lo...
P.S.
O autor do artigo utiliza a devolução(-2) para seus próprios fins. Mas o fato é que às vezes a função start() termina com o código retornando um valor diferente de zero. E não é apenas uma pessoa que o faz. Esta é exatamente esta lógica que eu quero entender.
1. Não posso acrescentar nada a isso. O que você quiser, devolva-o.
2. o terminal o ignora e seu código não o ignora, se é assim que ele é construído. A chamada do sistema ignora os dois parâmetros e o valor de retorno. É bastante óbvio. Para onde se volta neste caso?
Só podemos adivinhar na criação do padrão. Os desenvolvedores devem ter procedido a partir da INT padrão.
1. ok. Int start() foi declarado. Eu sempre retornei zero. Vi os comandos de retorno(-1) e até retorno(-2) no código também. Qual é a maneira correta de escolher este código?
2. Então a questão natural surge, é possível declarar início() de EA/indicador/script não do tipo int(), mas de qualquer outro tipo e então o que retornar ao terminal? Em outras palavras, o que faz o terminal com o valor retornado por retorno() ?
1. Como você decide o que uma função normal deve retornar?
2. Você pode ter qualquer tipo, assim como uma função normal. O terminal não faz nada com os valores devolvidos. Ela os ignora.
Funções especiais
1) Como você decide o que uma função normal deve retornar?
2. Você pode ter qualquer tipo, assim como uma função normal. O terminal não faz nada com os valores devolvidos. Ela os ignora.
1. A fim de decidir o que uma função comum deve retornar, preciso saber por que o código principal precisa de tal valor. Por exemplo, se eu quiser tomar a decisão de abrir uma ordem de compra quando houver um sinal, escreverei uma função que retorna o número de ordens de compra que já estão abertas. Dependendo de quantos são, o código tomará uma decisão seguindo a lógica embutida no código. Eu não sei qual lógica está embutida no código de retorno. Hoje eu estava vendo um artigo sobre a criação de um semáforo e encontrei um código de retorno (-2). Surpreendido, fiz uma pergunta aqui. Isso é tudo. ( https://www.mql5.com/ru/articles/1412 - artigo aqui).
2. O terminal ignora os valores devolvidos. É assim? Se assim for, surge novamente uma pergunta legítima, por que na criação de um EA/indicador/script, o desenvolvedor coloca em um modelo exatamente int, porque seria mais razoável colocar lá vazio - então o terminal não precisa ignorar nada - ganharíamos 1 tato de tempo de processador? Talvez haja alguma lógica em O QUE retornar das funções int init(), int deinit() e int start()? Acho que Roche já explicou isso a alguém em algum lugar - ele se lembrou de uma descrição de quando retornar zero e quando retornar (-1). Era esta mesma explicação que eu estava procurando. Pena que não consegui encontrá-lo...
P.S.
O autor do artigo utiliza a devolução(-2) para seus próprios fins. Mas o fato é que às vezes a função start() termina com o código retornando um valor diferente de zero. E não é apenas uma pessoa que o faz. Esta é exatamente esta lógica que queremos entender.
Funções especiais
Parece que está no texto.
Funções pré-definidas podem ter parâmetros. Entretanto, quando estas funções são chamadas pelo terminal do cliente, nenhum parâmetro será passado externamente, mas os valores padrão serão usados.
Trata-se dos parâmetros que entram na função, não dos parâmetros devolvidos por ela.
Este é um contador de pedidos. Bem, pode ser o caso, por exemplo, que você queira saber no código se há ordens de compra no mercado para um determinado par de moedas e com um certo número mágico, por exemplo. Se houver, por exemplo, outra ordem de compra não pode ser aberta. Portanto, o contador de pedidos é necessário para tomar uma decisão.
Escrevi isto em minha EA logo após o início:
Experimente, talvez você ache algum útil.
como estas linhas podem ser entendidas:
volume de pedidos de retorno
if(compra>0) return(compra);
senão devolve(-sells);
} ?
Escreva um roteiro:
jogue-o na tabela e observe o tronco:
2012.07.20 12:04:11 111 NZDUSD,M15: removed
2012.07.20 12:04:11 111 NZDUSD,M15: uninit reason 0
2012.07.20 12:04:11 111 NZDUSD,M15: Попытка ретурна 136
2012.07.20 12:04:11 111 NZDUSD,M15: loaded successfully
(aqui 111 é o nome do roteiro). Vemos a linha " uninit reason 0 " - aparentemente o terminal estava esperando por zero!
Tente o mesmo com (-1) :
O resultado é o mesmo:
2012.07.20 12:08:19 111 NZDUSD,M15: removido
2012.07.20 12:08:19 111 NZDUSD,M15: razão uninit 0
2012.07.20 12:08:19 111 NZDUSD,M15:Tentativa de retorno -1
2012.07.20 12:08:19 111 NZDUSD,M15: carregado com sucesso
O terminal parece se importar se o zero é devolvido ou não.
P.S.
De modo geral, na web, esta resposta foi encontrada:
retornar 0 - o programa completou seu trabalho sem erros
retornar 1 - ou número superior, o programa terminou seu trabalho com um erro e retorna o código de erro para processamento posterior.
Em qualquer sistema operacional, qualquer programa sempre retorna um código de erro.
O único problema é que nosso retorno não devolve o código para o sistema operacional, mas para o terminal. Isto deixa a questão em aberto.
Escreva um roteiro:
jogue-o na tabela e observe o tronco:
(aqui 111 é o nome do roteiro). Vemos a linha " uninit reason 0 " - aparentemente o terminal estava esperando por zero!
Tente o mesmo com (-1) :
O resultado é o mesmo:
Aparentemente, o terminal se preocupa se um zero é devolvido ou não.razão não-init é o código do motivo da rescisão do Expert Advisor
https://docs.mql4.com/ru/constants/uninit
1. Para decidir exatamente o que uma função normal deve retornar, eu deveria saber porque o código principal precisa de tal valor. Por exemplo, se eu quiser tomar a decisão de abrir uma ordem de compra quando houver um sinal, eu escreverei uma função que devolva o número de ordens de compra já abertas. Dependendo de quantos são, o código tomará uma decisão seguindo a lógica embutida no código. Eu não sei qual lógica está embutida no código de retorno. Hoje eu estava vendo um artigo sobre a criação de um semáforo e encontrei um código de retorno (-2). Surpreendido, fiz uma pergunta aqui. Isso é tudo. ( https://www.mql5.com/ru/articles/1412 - artigo aqui).
2. O terminal ignora os valores de retorno. Isto é preciso? Se assim for, surge novamente uma pergunta legítima, por que ao criar um EA/indicador/script o desenvolvedor colocou um modelo exatamente int, porque seria mais lógico colocá-lo vazio - então o terminal não teria que ignorar nada - então ganharíamos 1 tato de tempo de processador? Talvez haja alguma lógica em O QUE retornar das funções int init(), int deinit() e int start()? Acho que Roche já explicou isso a alguém em algum lugar - ele se lembrou de uma descrição de quando retornar zero e quando retornar (-1). Era esta mesma explicação que eu estava procurando. Pena que não consegui encontrá-lo...
P.S.
O autor do artigo utiliza a devolução(-2) para seus próprios fins. Mas o fato é que às vezes a função start() termina com o código retornando um valor diferente de zero. E não é apenas uma pessoa que o faz. Esta é exatamente esta lógica que eu quero entender.
1. Não posso acrescentar nada a isso. O que você quiser, devolva-o.
2. o terminal o ignora e seu código não o ignora, se é assim que ele é construído. A chamada do sistema ignora os dois parâmetros e o valor de retorno. É bastante óbvio. Para onde se volta neste caso?
Só podemos adivinhar na criação do padrão. Os desenvolvedores devem ter procedido a partir da INT padrão.