Ayuda para añadir MaxTradesPerBar al EA - página 2

 
serpentsnoir:

megamixx,

Si todavía estás por ahí, puedo sugerir algunos cambios de código que harán lo que estás buscando. Hazme saber si todavía estás interesado.

Luego recompila para asegurarte de que no haya errores. Avísame cuando tengas esto y pegaré el siguiente cambio.

Lo tengo y compilado con éxito gracias sn.
 
megamixx:

Lo tengo y compilado con éxito gracias sn.


Vale, bien.

A continuación, hay un bloque de código como este

int openPositions()
{
//... blah...
}

copie todo el bloque, péguelo justo después y renómbrelo como OpenTradesOnThisCandle

Luego, recompila para asegurarte de que no haya errores.

Ahora me voy a trabajar, así que no tendrás noticias mías hasta más tarde. Publica los cambios si te quedas atascado.

 

Copié este bloque y le cambié el nombre, ahora se ve así

int OpenTradesOnThisCandle( )
{ int op =0;
for(int i=OrdersTotal()-1;i>=0;i--) // escanear todas las órdenes y posiciones...
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol()==Symbol() )
{
if ( OrderType() == OP_BUY ) op++;
if ( OrderType() == OP_SELL ) op++;
}
}
return(op);
}

Espero haberlo hecho bien sn. Compilé y no obtuve ningún error pero sí una advertencia:

La función "OpenTradesOnThisCandle" no está referenciada y será eliminada del archivo exp
0 error(es), 1 advertencia(es)

 

Bien. El mensaje es sólo una advertencia y desaparecerá pronto.

Ahora cambia la línea donde ves MODE_TRADES por MODE_HISTORY en la nueva subrutina que has creado.

Ahora sustituye las dos sentencias if con OrderType() por esto

if (OrderOpenTime() > Time[0]) op++;

Cuando tengas eso (y te saldrá el mismo aviso) compílalo para asegurarte de que no tiene errores.

 
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol()==Symbol() )
  1. ¿Qué son los valores de retorno de las funciones? ¿Cómo los utilizo? - Foro MQL4
  2. Si hay alguna llamada al servidor en el bucle Debe contar y comprobar los códigos de retorno Bucles y cierre o eliminación de órdenes - MQL4 forum
 

Así es como se ve el bloque ahora:

int AbrirOperacionesEnEstaVela( )
{ int op =0;
for(int i=Total de Órdenes()-1;i>=0;i--) // escanea todas las órdenes y posiciones...
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderMagicNumber() != MagicNumber) continuar;
if ( OrderSymbol()==Symbol() )
{
if (OrderOpenTime() > Time[0]) op++;
if (OrderOpenTime() > Time[0]) op++;
}
}
return(op);
}

Compilado, 0 errores, 1 advertencia

 

Hola megamix,

No he leído el hilo desde el principio, sin embargo ...

1. Utiliza el botón SRC cuando publiques el código

2. El retorno de OrderSelect() es verdadero o falso, por lo que esta es la forma correcta de escribir OrderSelect(),

int OpenTradesOnThisCandle( )
  { 
  int op =0;
  for(int i = OrdersTotal() - 1;i >= 0; i-- ) // scan all orders and positions...
    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true   // if order select is true ...
        && OrderMagicNumber() != MagicNumber                  // ... and magic number is our magic number ...
        && OrderSymbol()      == Symbol() )                   // ... and symbol is chart symbol
        { 
        if (OrderOpenTime() > Time[0]) op++;             
        if (OrderOpenTime() > Time[0]) op++; 
        }
    } 
    return(op);
  }

:D

 
onewithzachy:

Hola megamix,

No he leído el hilo desde el principio, sin embargo ...

1. Utiliza el botón SRC cuando publiques el código

2. El retorno de OrderSelect() es verdadero o falso, por lo que esta es la forma correcta de escribir OrderSelect(),

:D


Gracias por el consejo sobre la publicación del código. Tiene sentido. En cuanto al punto 2, voy a diferir a sn como él me está guiando a través de los pasos y no quiero echar a perder su proceso. Se agradece mucho.

 
megamixx:


Gracias por el consejo sobre la publicación del código. Tiene sentido. En cuanto al punto 2, voy a diferir a sn como él me está guiando a través de los pasos y no quiero echar a perder su proceso. Se agradece mucho.


lo mantendremos simple por ahora. onewithzacky tiene razón, que comprobar los códigos de retorno es un buen hábito.

if (OrderOpenTime() > Time[0]) op++; <<== esto sólo tiene que estar ahí una vez. Así que quita una.

Lo siguiente es buscar este código y duplicarlo justo debajo.

     if(TradesInThisSymbol > 0) 
     {
      return(0);
     }

A continuación, cambiar

(TradesInThisSymbol > 0)

a

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Luego compila - el error debería desaparecer.

 
serpentsnoir:


Lo mantendremos simple por ahora. onewithzacky tiene razón, que comprobar los códigos de retorno es un buen hábito.

if (OrderOpenTime() > Time[0]) op++; <<== esto sólo tiene que estar ahí una vez. Así que quita una.

Lo siguiente es encontrar este código y duplicarlo justo debajo.

A continuación, cambiar

(TradesInThisSymbol > 0)

por

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Luego compila - el error debería desaparecer.


Hecho.

Eliminado el duplicado if (OrderOpenTime() > Time[0]) op++;

y encontrado y cambiado

(TradesInThisSymbol > 0)

a

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Muchas gracias por su ayuda en esto.

Razón de la queja: