[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 267
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
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.