Ayuda: Por qué el EA no cierra una operación - página 3

 
crossy:


Aquí si Orderselect es FALSE cómo el EA puede volver a la línea de código: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )

???

Puede ir al siguiente valor del bucle utilizando continue. . . o salir del bucle con break. . . haga clic en los enlaces para ver la documentación de cada uno.
 
crossy:

Aquí si Orderselect es FALSE como el EA puede volver a la línea de código: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )


???

Ese código está mal.......

cnt tiene que empezar en OrdersTotal() - 1 y decrecer hasta cnt >= 0 . . . la primera entrada es 0 no 1

Por eso pedí ver el código . . y has mostrado lo suficiente para identificar el problema . . probablemente. ;-)

 
RaptorUK:

Ese código está mal. . . .

cnt tiene que empezar en OrdersTotal() - 1 y disminuir hasta cnt >= 0 . . . la primera entrada es 0 no 1

Por eso pedí ver el código . . y has mostrado lo suficiente para identificar el problema . . probablemente. ;-)


Muy correcto. ¡Gracias, Wizeman!
 
crossy:

Muy correcto. ¡Gracias, Wizeman!


Y otra idea:

Si tengo muchas condiciones, puedes escribir

Si( X>b && B>S && NB<F......)

{

BBB= 5;

}f.e.

Aquí, el EA tiene que calcular cada condición dentro del paréntesis.

Pero, si usted está buscando para la eficiencia (4.000 líneas de código ...) prefiero tener:

Si ( X>b )

{

while (B>S)

{

Mientras (NB<F..)

{

BBB=5;

}

romper;

}

break;

}

¿Las 2 variaciones son iguales?

Y.

 

crossy, cuando escribas el código, por favor usa el botón SRC, será mucho más legible

Así que se mostrará así

   //--- first code
   If(X>b && B>S && NB<F......)
     {
      BBB=5;
     }
   
   // --- second code
   If(X>b)
     {
      while(B>S)
        {
         while(NB<F..)
           {
            BBB=5;
           }
         break;
         }
      break;
     }

Hay una explicación sobre el bucle "if, while y for" en mql4 https://book.mql4.com/operators/assign

En el segundo código, está bien, ya que el uso de romper, sin embargo, eso es un largo camino sólo para obtener BBB = 5, prefiero el primer código, que utilizan menos recursos

 
crossy:


Y otra idea:

Si tengo muchas condiciones, puedes escribir

Si( X>b && B>S && NB<F......)

{

BBB= 5;

}f.e.

Aquí, el EA tiene que calcular cada condición dentro del paréntesis.

Pero, si se busca la eficiencia (4.000 líneas de código...) prefiero tener:

Usando el while así puedes encontrarte en un bucle infinito. . .
 
¡Gracias a los dos!.
 
onewithzachy:

Utilice el botón SRC para mostrar su código para una mejor lectura, por favor :)

Tu OrderSelect() está codificado de forma incorrecta. Compara tu código con este. Luego escribe si sigues teniendo el problema o no :)


Gracias especiales a onewithzachy,

No sabía que el ORDERSELECT migth no captura, por lo que puede tener errores desconocidos.

Mi código que era de 4016 líneas de código se convirtió en casi 4500 líneas - pero sin errores.

Gracias a todos, amigos.

Y.

 

Hola amigos,

Después de un largo viaje aquí, tuve un buen advamtage con mi EA, pero tengo un problema más, como sigue:

Tengo la siguiente línea de código:

CLOSE_Single_P(Pair1, "LONG",OrderT,OrderL);

como:

Pair1 es el símbolo,

"LONG" es la señal de una operación larga,

OrderT es el número de entrada de la orden,

OrderL es el tamaño del lote de la orden.

La función es la siguiente

void CLOSE_Single_P(cadena SYMB, cadena TREN, int TICKET, double LOTT)
{
double PRC;
bool Check = false;
for ( int cntt=0; cntt<20000; cntt++ )
{
if ( Check )
{
Check_Ini();
return;
}
for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
{
if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
{
Check = false;
if ( TREN == "LONG" )
PRC = MarketInfo(SYMB,MODE_BID);
else
if ( TREN == "SHORT" )
PRC = MarketInfo(SYMB,MODE_ASK);

Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
if ( Check )
break;
}
}
}
return;
}

Mi PROBLEMA es: El EA a veces cierra la operación muy bien, pero a veces el EA cierra la tarde PERO sigue buscando la entrada para cerrarla, aunque ya estaba cerrada.

(Me sale el error: "Número de ticket desconocido.." .

Creo que tengo un error de lógica.

Gracias por su amable ayuda.

Y

 

Por favor...


Razón de la queja: