[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

 
drknn:


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

 
Zhunko:

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.

 

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.

 
obrigado por sua resposta!
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.
 
paladin80:

Escrevi isto em minha EA logo após o início:

Experimente, talvez você ache algum útil.

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.
 

como estas linhas podem ser entendidas:

volume de pedidos de retorno

if(compra>0) return(compra);

senão devolve(-sells);

} ?

 

Escreva um roteiro:

int start(){
  Print("Попытка ретурна 136");
  return(136);
}

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) :

int start(){
  Print("Попытка ретурна -1");
  return(-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.

 
drknn:

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

 
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 .
 
drknn:


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.