Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 120

 
hoz:


Esto ya es un signo de somnolencia en mí.

Pero, de nuevo, ese no es realmente el punto. Estoy ejecutando el búho en el probador. En la captura de pantalla, como puede ver no hay órdenes pendientes ni órdenes de mercado.

Tanto la función separada como el comentario estándar que he duplicado la función separada para mostrar los valores requeridos muestran que hay órdenes de mercado y órdenes pendientes todo el tiempo.

Así es como funciona la función:

Lo llamo desde el principio, donde inicialmente también pongo a cero los valores del contador:

Bueno, por así decirlo, t++ funciona de cualquier manera
 
Forexman77:

Rehecho su EA un poco, los comentarios en el código. Observe la formación de la señal y la parada. Los puse especialmente sin pensar. Modifícalo a tu gusto si es necesario.

Archivos adjuntos:
 
artmedia70:
Bueno, el t++ funciona de cualquier manera


¿La única opción es ésta?

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
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);
   }
}

No parece mucho. No está optimizado. La repetición de t++ no es feliz...

 
hoz:


¿La única opción es ésta?

No parece mucho. No está optimizado. La repetición de t++ no es feliz...

¿Y por qué querrías aumentar t en cualquier caso? De hecho, lo que hay de todos modos:

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

Si el tipo de orden es mayor que 1 y menor que 6, aumenta p, aumenta t

En caso contrario (aunque el tipo de orden sea==6), volvemos a aumentar t

Es extraño, ¿no?

 
artmedia70:

De todas formas, ¿por qué querrías aumentar la t? De hecho, lo que hay de todos modos:

Si el tipo de orden es superior a 1 e inferior a 6, aumentamos p, aumentamos t

En caso contrario (incluso si el tipo de orden==6) volvemos a aumentar t

Es extraño, ¿no?




Mientras escribía tu comentario, ya había reescrito el mío. Arriba está la versión corregida.
 
hoz:

Mientras escribía tu comentario, ya había reescrito el mío. La anterior es la versión corregida.
¿Por qué debo aumentar t si la orden está pendiente y luego volver a aumentar t si la siguiente orden es de mercado?
 
Crea un array de seis elementos. Pásalo a la función por referencia. Una vez que se ha seleccionado una orden y ésta se ajusta a todos los filtros (símbolo, magik), se incrementa la celda de la matriz dirigida por el tipo de orden. Una vez ejecutada la función, tendrá el número de pedidos ordenados por su tipo en el array.
 
artmedia70:
¿Y por qué debemos aumentar t, si la orden está pendiente, y luego volver a aumentar t, si la siguiente orden es de mercado?


t es el número de todos los pedidos.

p - número de órdenes pendientes

Si la condición:

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

es verdadera, entonces tanto t como p se incrementan, ya que cualquier orden del tipo 2 a 5 es tanto una orden pendiente como una orden general. Esto significa que debemos incrementar ambos contadores. Y si la condición es verdadera:

else if (OrderType() < 2)

Entonces no hay una orden pendiente pero sí una orden de mercado. Significa que aumentaremos el contador t, es decir, el contador del número total de pedidos.

Y si no hay nada, entonces imprimiremos que no hay pedidos.

 
artmedia70:
Crea un array de seis elementos. Pásalo a la función por referencia. Una vez que se ha seleccionado una orden y ésta se ajusta a todos los filtros (símbolo, magik), se incrementa la celda de la matriz dirigida por el tipo de orden. Tras la ejecución de la función, tendrá el número de pedidos ordenados por su tipo en el array.

Ya he entendido que la matriz es más preferible aquí))) ¿Existe alguna incoherencia en la variante anterior? (Sólo por el interés, todo parece estar claro ahora).
 
hoz:

Que aquí será preferible el array, ya lo he entendido)) ¿Y en esa variante, que he descrito arriba es inexacta? (Sólo por interés. Creo que ya está todo claro)

¿Qué te parece esto?

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
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);
}