Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 120

 
hoz:


Isto já é um sinal de sonolência em mim.

Mas, novamente, essa não é realmente a questão. Eu estou dirigindo a coruja no testador. Na captura de tela, como você pode ver, não há ordens pendentes ou ordens de mercado.

Tanto a função separada quanto o comentário padrão que fiz duplicou a função separada para exibir os valores requeridos mostram que há ordens de mercado e ordens pendentes o tempo todo.

É assim que a função funciona:

Eu o chamo desde o início, onde inicialmente também reajustei os valores do contador para zero:

Bem, por assim dizer, t++ funciona de qualquer maneira
 
Forexman77:

Reformulou um pouco a sua EA, comentários no código. Preste atenção à formação do sinal e pare. Eu as coloco especialmente sem pensar. Se necessário, mude para o seu gosto.

Arquivos anexados:
 
artmedia70:
Bem, o tipo de t++ funciona de qualquer maneira


A única opção é esta?

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders(int& t, int& p)
{
   t = 0;
   p = 0;
 
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderType() > 1 && OrderType() < 6)
      {
          p++;
          t++;
      }
      else if (OrderType() < 2)
          t++;
      else 
      {
         Print("Позиций в рвнке нет!");
      }
      
      pr ("FindOrders(): " + "t = " + t);
      pr ("FindOrders(): " + "p = " + p);
   }
}

Não parece ser muito. Não está otimizado. A repetição do t++ não é feliz...

 
hoz:


A única opção é esta?

Não parece ser muito. Não está otimizado. A repetição do t++ não é feliz...

E por que você gostaria de aumentar t em qualquer caso? De fato, o que existe de qualquer forma:

if (OrderType() > 1 && OrderType() < 6)
      {
          p++;
          t++;
      }
      else t++;

Se o tipo de pedido for maior que 1 e menor que 6, aumente p, aumente t

Caso contrário (mesmo que o tipo de pedido seja===6), aumentamos novamente t

É estranho, não é?

 
artmedia70:

Por que você gostaria de aumentar de qualquer maneira? De fato, o que existe de qualquer forma:

Se o tipo de pedido for superior a 1 e inferior a 6, aumentamos p, aumentamos t

Caso contrário (mesmo que o tipo de pedido==6), aumentamos novamente t

É estranho, não é?




Enquanto eu escrevia seu comentário, eu já havia reescrito o meu. Acima está a versão corrigida.
 
hoz:

Enquanto eu escrevia seu comentário, eu já havia reescrito o meu. O acima é a versão corrigida.
Por que eu deveria aumentar t se a ordem está pendente e depois aumentar t novamente se a próxima ordem for uma ordem de mercado?
 
Criar um conjunto de seis elementos. Passe-o para a função por referência. Uma vez selecionado um pedido e que ele se encaixa em todos os filtros (símbolo, magik), aumente a célula da matriz endereçada pelo tipo de pedido. Depois que a função estiver em execução, você terá o número de ordens ordenadas por seu tipo na matriz.
 
artmedia70:
E por que devemos aumentar t, se a ordem está pendente, e depois aumentar t novamente, se a próxima ordem é uma ordem de mercado?


t é o número de todas as encomendas.

p - número de ordens pendentes

Se a condição:

if (OrderType() > 1 && OrderType() < 6)

é verdade, então tanto t como p são incrementados, já que qualquer ordem do tipo 2 a 5 é tanto uma ordem pendente como uma ordem geral. Isto significa que devemos incrementar os dois balcões. E se a condição for verdadeira:

else if (OrderType() < 2)

Então não há nenhuma ordem pendente, mas há uma ordem de mercado. Isso significa que vamos aumentar o contador t, ou seja, o contador do número total de pedidos.

E, se não houver nada, então, imprimiremos que não há pedidos.

 
artmedia70:
Criar um conjunto de seis elementos. Passe-o para a função por referência. Uma vez selecionada uma ordem e que ela se encaixa em todos os filtros (símbolo, magik), aumente a célula da matriz endereçada pelo tipo de ordem. Depois que a função estiver em execução, você terá o número de ordens ordenadas por seu tipo na matriz.

Eu já entendi que a matriz é mais preferível aqui)))) Existe alguma inconsistência na variante acima? (Só por interesse, tudo parece estar claro agora).
 
hoz:

Que aqui a matriz será preferível, eu já entendi)))) E nessa variante, que descrevi acima é imprecisa? (Só por interesse. Acho que tudo já está claro)

Que tal isso?

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders(int& t, int& p)
{
   t = 0;
   p = 0;
 
   for (int i=OrdersTotal() - 1; i>=0; i--)
      {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderType() > 1 && OrderType() < 6)   p++;
      if (OrderType() < 6)  t++;
       }
  pr ("FindOrders(): " + "t = " + t);
  pr ("FindOrders(): " + "p = " + p);
}
Razão: