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

 
Valeriy Yastremskiy #:

A pergunta não era sobre isso. A função de Dimitri não retorna um argumento por referência. Por que usar um argumento por referência? Sim, as áreas locais serão capazes de declarar uma variável em si mesmas e obter uma resposta à variável após a função ser chamada.

E é só isso????

1. Assim, a função internamente pode mudar e retornar qualquer variável passada para ela, não uma variável global específica.

2. Para que a função não copie nenhuma variável de grande tamanho - uma matriz, uma estrutura, uma cadeia de texto...

 
Alexey Viktorov #:

Se uma variável é declarada globalmente, não deve haver variáveis com o mesmo nome. Se você chamar uma função de várias funções, como em seu exemplo, você pode deixá-la em paz e declarar uma variável com o mesmo nome em cada função. É conveniente...

Ou seja, é apenas uma questão de localização de uso para áreas locais com os mesmos nomes de argumentos por referência. Bem, não muito, mas há algo. Pensei que houvesse mais.

 
JRandomTrader #:

1. Para que a função possa mudar internamente e retornar qualquer variável passada para ela, e não uma variável global específica.

2. Não copiar para uma função alguma variável de grande tamanho - uma matriz, uma estrutura, uma cadeia de texto...

A pergunta era sobre outra coisa. No terceiro exemplo, sua primeira resposta. 2й. Não acho que seja uma questão de poder mudar os campos ou os elementos da entidade. Na maioria dos casos eles não são constantes, portanto o argumento de referência é óbvio para a maioria dos casos. MAS, se a entidade for constante, então... mas os desenvolvedores decidiram não se incomodar.

 
Valeriy Yastremskiy #:

Ou seja, é apenas uma questão de localizar o uso para áreas locais com os mesmos nomes de argumento por referência. Bem, não muito, mas há algo. Pensei que havia mais a ver com isso.

Estas são apenas as coisas com as quais eu sei que me sinto confortável. Certamente existem outras vantagens, tais como a redundância de memória ou algo mais. Por que você não pergunta diretamente ao Fedoseev?
 
Alexey Viktorov #:
É exatamente isso que eu sei, o que é confortável para mim. Certamente existem outros benefícios, tais como redundância de memória ou o que quer que seja. Por que você não pergunta diretamente ao Fedoseev?

nível diferente de percepção)))) Talvez eu mesmo pequei, as coisas óbvias são muito difíceis de transmitir aos outros))))

 
Valeriy Yastremskiy #:

É possível fazer com um argumento x declarando r em âmbito global.

Pode-se prescindir de qualquer argumento declarando x em âmbito global. Além disso, é possível não devolver o resultado, mas escrevê-lo em uma variável global. Mas isso levará à confusão do código, à necessidade de lembrar o que e onde é armazenado e, com o aumento do código do programa, transformará a vida do programador em um inferno.
 
Boa tarde. Você poderia me dizer, por favor, o que está faltando? Meu objetivo é fechar as primeiras negociações com um volume mínimo. No momento estou selecionando apenas pedidos com um volume de 0,01.
     for(int i=0; i<OrdersTotal(); i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
       if(OrderLots()==0.01){ 
     OrderClose(OrderTicket(),0.01,OrderType()==OP_BUY?Bid:Ask,3,clrWhite);return;}}}    }

Se não for a partir de 0,01 então tenho que selecionar pedidos a partir de 0,02 e assim por diante. Como este ponto deve ser escrito?

 
Rustam Bikbulatov volume mínimo. Minha EA está atualmente selecionando apenas pedidos com um volume de 0,01.

Se não for a partir de 0,01 então tenho que selecionar pedidos a partir de 0,02 e assim por diante. Como escrever este ponto?

if(OrderLots()==0.01)

Você realmente não vê isso por si mesmo?

"Como verificar este ponto?" - você tem que calcular o valor mínimo do lote 0,01.

Talvez o deslize deva ser especificado em pontos, ou seja, 3*Ponto() e não 3

 
Rustam Bikbulatov volume mínimo. Meu robô está atualmente selecionando apenas pedidos com um volume de 0,01.

Se não for a partir de 0,01 então tenho que selecionar pedidos a partir de 0,02 e assim por diante. Como escrever este ponto?

Você precisa de 2 ciclos: você deve obter o volume mínimo no primeiro e fechá-lo no segundo. E você também deve levar em conta que ao fechar as ordens, elas são deslocadas por 1 posição, portanto você deve fazer um ciclo da posição máxima para 0.
 
Andrey Sokolov #:

Você realmente não vê isso por si mesmo?

"Como escrevo isto?" - onde diz 0,01 lote, você tem que calcular o mínimo disponível.

Eu posso ver isso. Se você definir para 0,02, o pedido com lote 0,02 será selecionado. Eu perguntei como definir para olhar primeiro para o lote 0,01, depois para 0,02 e assim por diante.

Razão: