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

 
RaptorUK:

No necesitas la Función para nada.......deshazte de ella.



Hola Raptor,

Necesito esta función ya que el EA es bastante complejo, y uso esta función con muchas versiones o condiciones de cierre.

Espero que me entiendas.

Y.

 
onewithzachy:

Vamos a hacer de nuevo la parte 2 :(


Gracias onewithzachy, pero como respondí antes, necesito esta función para cerrar con muchas versiones de condiciones, Así que es demasiado complejo poner los comandos de código de cierre dentro de cada condición, especialmente que no es un comando de código único.

Gracias,

Y.

 
RaptorUK:

Haz esto... ( repetido desde aquí: https://www.mql5.com/en/forum/139543 )

. . y no necesitas la Función en absoluto.


Raptor, necesito esta función para superar situaciones de REQUATE, como puedes ver.

Y.

 
onewithzachy:

@ RaptorUK, estoy considerando usar el casco de protección para que al menos pueda pensar con bastante antelación de lo que estoy ahora. ¿No es eso lo que hacen los conductores, pensar con antelación? :D


@ skaboy, estoy pidiendo educadamente aquí, si no te importa, ¿podría utilizar el botón SRC para publicar su código. Ya lo hemos pedido demasiadas veces sólo en este hilo.

@ crossy, Ya ha pasado casi una semana desde tu primer post. Seguramente entiendo que no tengas la cabeza despejada ahora tratando con 4000 líneas, ahora mismo yo mismo tengo la mía aquí también. Si todavía no lo entiendes, - ehm - puedes pedirnos que escribamos ese código de Close por ti. Sin embargo todavía tienes que escribir el código aunque sea un poco - y mostrarnos. :D, el código de RaptorUK justo arriba es más directo que el mío, piénsalo y luego puedes seguir con tu EA.

Con la forma en que escribes el código aquí -demasiado código repetido innecesario- deberías tener un poco de preocupación con tus 4000 líneas de código que puede ralentizar tu EA y hace que tu EA pierda un tick. Está bien perder un par de puntos, sin embargo, ¿qué pasa si se pierde como 10 pips de distancia ? y probablemente sus 4000 líneas todavía puede ser reducido a sólo 400 líneas. ¿Quién sabe?, su EA, se vuelve más ligero y más rápido. :D


Gracias onewithzachy,

Mi EA tiene este pequeño error, que es:

1) Cierra la entrada relevante y la busca también.

2) Este error no aparece cada orden de cierre, y a veces funciona bien.

En cuanto a las otras 3.950 líneas de código, funcionan muy bien.

Adjunto las líneas de código relevantes, de nuevo.

Y.

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      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);
   }
   return;
}
//-----------------------------------------------+
 
crossy:



Hola Raptor,

Necesito esta función ya que el EA es bastante complejo, y uso esta función con muchas versiones o condiciones de cierre.

Espero que me entiendan.

Y.

Creo que no entiendes el código que has copiado y pegado de otro sitio . . y no es para requotes . . ni siquiera compruebas si un error que recibes es una recotización.
 
RaptorUK:
Creo que no entiendes la copia que has copiado y pegado de otro sitio . . y no es para requotes . . ni siquiera compruebas si un error que te sale es una recotización.


No Raptor, el error que recibí fue: No se encontró el número de ticket. Y te puedo decir que la resonancia es El ticket ya estaba cerrado un segundo antes.

No entiendo como se cierra el ticket y se sigue buscando en él...

 
crossy:


No entiendo como se cierra el ticket y se sigue buscando en él...

Es por el bucle que he dicho que no necesita... en la función que no necesita.

" ¿Por quétiene un bucle en la función Close_Single_P ? " del tercer post de la página 1

"¿Por qué el bucle?" de la página 4, 2º post

 

¿Me equivoco o esta función nunca cierra las órdenes SHORT?

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);
                               ^^^^ - You always pass LONG to variable TREN, so variable PRC (below) is always equal taken from LONG, but NEVER from SHORT.

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         ^^^   Never executed
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+
 
Waidas:

¿Me equivoco o esta función no cierra nunca las órdenes SHORT?


Waidas, tienes razón. Pero esto es sólo una pequeña pieza del EA, que cierra LONG y SHORT.

Gracias.

 
RaptorUK:

Es por el bucle que he dicho que no necesitas... en la función que no necesitas.

" ¿Por quétiene un bucle en la función Close_Single_P ? " de la página 1, 3er post

"¿Por qué el bucle?" de la página 4, 2º post


Raptor, estabas en lo cierto, y he eliminado los bucles, por lo que la función está ahora sin ningún bucle.

Lo adjunto de nuevo aquí.

Y.

...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+