[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 492

 
hoz:

A propósito, sim... Eu já acrescentei o código completo desta função acima:

Pensei que seria mais lógico não escrevê-lo desta forma:

e depois ajustar o laço desta maneira:

Certo? É que o contador do número de posições a partir do zero não é percebido como tal... Não é lógico e, portanto, não há motivo para nos confundirmos...

Você tem que ir a zero, não a um, para procurar por pedidos.

for(i=total; i>=0; i--)

Uma vez um profissional me explicou que estamos pesquisando uma série de pedidos, e é melhor começar a pesquisa com um número maior. Na matriz, o primeiro elemento tem índice 0 (zero), portanto não devemos chegar a 1 e esta é também a razão pela qual devemos ir para OrderTotal() - 1, ao invés de OrdensTotal() simples.

A busca de pedidos foi feita desta maneira:

for (int i=OrdersTotal()-1; i>=0; i--)
 
paladin80:

Você tem que ir até zero, não um, para procurar por pedidos.

Um profissional uma vez me explicou que é um conjunto de pedidos e então sim, é melhor começar com um dígito maior. Na matriz, o primeiro elemento tem um índice de 0 (zero), portanto não para 1 e também por esta razão precisamos de OrderTotal() - 1, não apenas OrderTotal().

É muito interessante. E a primeira coisa que eu fiz foi abrir o livro didático e tentar encontrar a resposta lá. E entãohttps://book.mql4.com/ru/trading/ordermodify viu como o tutorial fez o transbordamento:

 for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер

Este é o fator que me enganou...

 
hoz:

Muito interessante. E a primeira coisa que eu fiz foi abrir o livro didático e tentar encontrar a resposta lá. E entãohttps://book.mql4.com/ru/trading/ordermodify eu vi como o livro didático foi exagerado:

Esse é o fator que me enganou...


Você não notou a próxima linha?

   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер     
   {      
     if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
//
//Тут компенсируется отсутствие нуля с i-1
 
borilunad:


Você não notou a próxima linha?

Não. Mas de alguma forma é tortuoso escrevê-lo. Não quero criticar o livro didático, mas... é muito mais adequado contar a partir de 0 em vez de -1. Caso contrário, você já poderia ter começado de -30...

Comopaladino80 apontado acima, de 0 o valor das matrizes seria mais adequado do que de -N.

 
hoz:

Não. Mas de alguma forma é tortuoso escrevê-lo. Não quero criticar o livro didático, mas... é muito mais adequado contar a partir de 0 em vez de -1. Caso contrário, você já poderia ter começado de -30...

Comopaladino80 apontado acima, de 0 o valor das matrizes seria o mais adequado, se de -N.


Agora pense logicamente!

Essas variantes são idênticas, porque se i = 0, precisamos olhar de 1 para OrderTotal(), ou seja, de 0+1 para OrderTotal() - 1+1 (+1, porque i+++ está no final da afirmação) O mesmo no tutorial, apenas escrito de 1 para OrderTotal() e, para não contar de 2 para OrderTotal()+1, nafunção OrderSelect o autor do livro de texto adicionou -1 para i. Entendeu?

A propósito, por mais programadores que existam, há quase tantas variantes. Cada um tem sua própria visão, sua própria caligrafia!

 
hoz:

Não. Mas de alguma forma é tortuoso escrevê-lo. Não quero criticar o livro didático, mas... é muito mais adequado contar a partir de 0 em vez de -1. Caso contrário, você já poderia ter começado de -30...

Comopaladino80 apontado acima, 0 seria mais adequado para arrays do que -N.

Se você estiver interessado na busca de pedidos, posso sugerir o seguinte esquema:

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // ордер выбирается среди открытых
                                                    // и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue;     // если не наш символ, то уходим
         if (OrderMagicNumber()!=555) continue;     // если не наш магик номер, то уходим
                                                    // можно поставить любые другие фильтры
         // ... ваши вычисления
      }
   }
}
 
hoz:

Não. Mas de alguma forma é tortuoso escrevê-lo. Não quero criticar o livro didático, mas... é muito mais adequado contar a partir de 0 em vez de -1. Caso contrário, você já poderia ter começado de -30...

Comopaladino80 apontado acima, 0 seria a forma mais apropriada de ler arrays, em oposição a -N.

Eu tenho o mesmo ponto de vista, o tutorial foi escrito por uma pessoa específica, esta é sua visão das coisas (organização do ciclo da ordem), e SEMPRE existem muitas soluções corretas. Há vistas certas e, ao mesmo tempo, certas e elegantes. :)
 
borilunad:


E agora pense, incluindo a lógica!

Estas variantes são idênticas, porque se i = 0, tentamos de 1 para OrderTotal(), ou seja, de 0+1 para OrderTotal() - 1+1 (+1, porque i+++ está no final da declaração) E o mesmo está no livro de texto, apenas de 1 para OrderTotal() e para não contar de 2 para OrderTotal()+1, adicionamos -1 para i na função OrderSelect. Entendeu?

É claro, eu entendo. Mas nunca tinha visto pedidos analisados desta forma antes:

if (OrderSelect(i-1,SELECT_BY_POS)==true)

geralmente apenas sem ===verdadeiro... Eu até gostei deste ponto. Embora seja interessante, eu nunca havia encontrado tal método em outros EAs. Eu entendo a lógica, mas ainda assim.

 
Por favor, como você pode usar um valor muving de alguns compassos atrás para o cálculo, ou seja, da história? Se for apenas uma média móvel
AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
E se for -5 barras atrás?
 
hoz:

É claro que entendo. Exceto que eu nunca vi a presença de uma ordem analisada desta maneira antes:

geralmente apenas sem ===verdadeiro... Eu gostei desse ponto. Embora seja interessante, não tenho visto este método em outros EAs. Eu entendo a lógica, mas ainda assim.


Tente e experimente com diferentes variantes, será mais fácil entender tudo! Boa sorte!
Razão: