Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 70

 
wishmast:

Por favor, díganme por qué la función OrdersTotal( ) escribe -1 cuando se buscan los pedidos.

Ejemplo: for (i=TotalPedidos()-1 ;i>=0; i--)

¿por qué no sólo OrdersTotal()?

¿El recuento de pedidos en esta función empieza por 0 o por 1? Es decir, si hay un pedido, ¿es OrdersTotal() igual a 0 o a 1?

contando desde cero
 
wishmast:

Por favor, díganme por qué la función OrdersTotal( ) escribe -1 cuando se buscan los pedidos.

Ejemplo: for (i=TotalPedidos()-1 ;i>=0; i--)

¿por qué no sólo OrdersTotal()?

¿El recuento de pedidos en esta función empieza por 0 o por 1? Es decir, si hay un pedido, ¿OrdersTotal() es igual a 0 o a 1?

OrdersTotal() muestra la cantidad, es decir, si hay un pedido, entoncesOrdersTotal() será igual a 1, pero en la lista de pedidos, el informe comienza con 0

0 - primer orden

1 - segundo orden

2 - tercero

y así sucesivamente.

Así, si empezamos la búsqueda desde el final de la lista, tenemos querestar uno al número total deOrdersTotal().

 
Sergey Gritsay:

OrdersTotal() muestra la cantidad, es decir, si hay un pedido, entoncesOrdersTotal() será uno, pero en la lista de pedidos el informe comienza desde cero

0 - primer orden

1 - segundo orden

2 - tercero

y así sucesivamente.

Por lo tanto, si empezamos la búsqueda desde el final de la lista, tenemos querestar uno al número total deOrdersTotal().

Pero si no restamos uno a la primera expresión, no será un error, porque si tenemos una orden, se producirán dos iteraciones. A menos que no necesitemos hacer dos iteraciones cuando podemos hacer todo lo que necesitamos en una, así que -1, ¿no?
 
wishmast:
Pero si la primera expresión no resta uno, no será un error, si tenemos una orden, entonces ocurrirán dos iteraciones. A menos que no haya necesidad de hacer dos iteraciones cuando todo lo que necesitamos se puede hacer en una, así que -1, ¿no?
Sí, así es.
 
Sergey Gritsay:
Sí, correcto

No es del todo correcto.

Puede utilizar el decremento del prefijo.

for(int i = OrdersTotal(); i >= 0; --i)
 
trader781:
Ya que tenemos una pila de pedidos, ¿por qué no podemos sacar el que necesitamos? (Las correctas) y hacer con ellas lo que queramos... Por ejemplo ordenar (i-4)
Porque sólo funcionará en el probador de MT4. O cuando se opera en un solo símbolo y sólo un este EA.
 
Vitalie Postolache:
Porque esto sólo funcionará en el probador de MT4. O cuando se opera en un solo símbolo y sólo un este EA.

Si lo piensas bien, el EA es el mismo para cada par, sólo el saldo de la cuenta es común (el cambio será el último)

el filtro va a todas las órdenes que satisfacen la condición mercado-abierto por el Asesor Experto-si el símbolo coincide

¿qué ocurre?

 
trader781:

Si lo piensas bien, el EA es el mismo para cada par, sólo el saldo de la cuenta es común (el cambio será el último)

el filtro se dirige a todas las órdenes que cumplen la condición de mercado abierto por el EA, si la simulación coincide

¿qué ocurre?

Bueno, ya se ha explicado más arriba lo que está mal. Podemos contar los pedidos sólo como nuestros y tomar los índices del array por la cantidad total - obtendremos un array con celdas vacías. ¿Y para qué es esto? Y si la matriz no estaba vacía, los campos "innecesarios" contendrán basura innecesaria que dará lugar a errores, y estamos hablando de dinero.
 
Vitalie Postolache:
Bueno, ya se ha explicado más arriba lo que está mal. Los pedidos cuentan sólo los suyos, y toman los índices del array para el número total - se obtiene un array con celdas vacías. ¿Y para qué es esto? Y si la matriz no estaba vacía, los campos "innecesarios" contendrán basura innecesaria que dará lugar a errores, y estamos hablando de dinero.

Bien, así es como funciona.

struct myorder
{
int    Ticket;
double orderopenprice;
int   ordertype;
double profit;
double stoploss;
double  lot;
};

myorder orders[];

int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }
}    


¿verdad?

 
Ayúdame a escribir la condición: Si la cantidad de fondos disponibles en la cuenta es inferior al 50% del depósito entonces {acción} MT5