Una condición con filtro.

 

Muy buenas a todos. Bueno decir que estoy aprendiendo en MQL4

A ver si alguien me puede ayudar y echarme una manita por favor....

Estoy creando un EA y quiero poner un filtro para usar una condición, en este caso un filtro horario. Lo tengo declarado asi.

extern string FiltroHorario = "-----------Usar filtro horario----";
extern bool FiltroHorario = False;
extern double HorarioInicio = 02;
extern double HorarioFinal = 22;

Después, dentro de las condiciones para abrir un largo (por ejemplo)

     if   
          (
               iMA(NULL,TimeFrame,150,0,MODE_LWMA,PRICE_CLOSE,0) > iMA(NULL,TimeFrame,300,0,MODE_LWMA,PRICE_CLOSE,0)                            
               && if (FiltroHorario =  True) Hour() >= HorarioInicio && Hour() <= HorarioFinal                                                       
          )

Seguidamente van las instrucciones para la apertura de la operación, pero no funciona

También he probado asi, y nada, tampoco.

                        iMA(NULL,TimeFrame,150,0,MODE_LWMA,PRICE_CLOSE,0) > iMA(NULL,TimeFrame,300,0,MODE_LWMA,PRICE_CLOSE,0)         
                        && if (FiltroHorario = True) 
                                   {
                                        Hour() >= HorarioInicio && Hour() <= HorarioFinal;
                                   }

Alguna sugerencia por favor.

Muchas gracias.

 
 if    ( iMA(NULL,TimeFrame,150,0,MODE_LWMA,PRICE_CLOSE,0) > iMA(NULL,TimeFrame,300,0,MODE_LWMA,PRICE_CLOSE,0)                            
               &&  FiltroHorario ==  True &&  Hour() >= HorarioInicio && Hour() <= HorarioFinal  )

Quizas organizando así te funcione
Saludos!!

 

Gracias por tu aporte Miguel.

Efectivamente, si que funciona como dices, pero no es exactamente eso lo que busco, ya que si por ejemplo, en vez de un filtro, quiero poner dos, uno para un tramo horario y otro para un spread máximo, entonces el EA ya no funcionaría correctamente.

Porque a un filtro que esté como "False", el robot ya no abriría ninguna operación.

Por eso estaba buscando la formula para poner una condición dentro del conjunto de condiciones, o sea un if dentro de otro if. De esta manera se pueden poner todos los filtros que tú quieras. Eso es lo que estoy buscando.

Seguiremos esperando más respuestas e ideas.

Muchas gracias de nuevo compañero.

 
bueno, pues divide la condicion de horario en 2 "posibilidades"
 if    ( iMA(NULL,TimeFrame,150,0,MODE_LWMA,PRICE_CLOSE,0) > iMA(NULL,TimeFrame,300,0,MODE_LWMA,PRICE_CLOSE,0))
{                            
  if(  FiltroHorario ==  True &&  Hour() >= HorarioInicio && Hour() <= HorarioFinal  )
	{
	//Hace Algo con el filtro activo
	}
	if(FiltroHorario==false)
	{
	//Hace Algo sin el filtro activo
	}	
}
 

Se desvia mucho de lo que intento hacer y creo que se complicaría mucho.

Para que lo veas mejor y entiendas lo que quiero hacer,  te paso el archivo.

Archivos adjuntos:
 
NachoMau:

Se desvia mucho de lo que intento hacer y creo que se complicaría mucho.

Para que lo veas mejor y entiendas lo que quiero hacer,  te paso el archivo.

Te recomiendo que pagues por tu desarrollo en la seccion freelancer https://www.mql5.com/es/job ,  pues no estas manejando para nada bien el codigo.
Es solo una sugerencia.
Saludos!!!


Aplicaciones comerciales para MetaTrader 5 por encargo
Aplicaciones comerciales para MetaTrader 5 por encargo
  • 2021.03.01
  • www.mql5.com
El servicio freelance con desarrolladores más grande en MQL5
 

Estoy aprendiendo, entonces claro, si lo encargo, no aprendo...

Y como tampoco hay ningún manual ni curso ... pues hay que sudar...

De todas maneras muchas gracias por tu ayuda.

Seguiré esperando a ver si alguien aporta otra idea.

 

Esto quizá te ayude, o quizá te marea un poco más. Yo lo haría así. No lo he probado, solo he revisado que no tuviera errores.

Quizá deberías buscar ejemplos similares para aprender, creo que la idea que tienes es buena, pero la lógica de programación aún la tienes un poco oxidada.


Por cierto, eso de start ya no se usa para los EA, solo para los scripts

Archivos adjuntos:
 
NachoMau:

Muy buenas a todos. Bueno decir que estoy aprendiendo en MQL4

A ver si alguien me puede ayudar y echarme una manita por favor....

Estoy creando un EA y quiero poner un filtro para usar una condición, en este caso un filtro horario. Lo tengo declarado asi.

Después, dentro de las condiciones para abrir un largo (por ejemplo)

Seguidamente van las instrucciones para la apertura de la operación, pero no funciona

También he probado asi, y nada, tampoco.

Alguna sugerencia por favor.

Muchas gracias.

Empieza con esta condición:

if(LotSize>=minLot&&((StartHour<StopHour&&Hour()>=StartHour&&Hour()<StopHour)||((StartHour>StopHour&&Hour()>=StartHour)||(Hour()<StopHour)))&&Spread<=MaxSpread){
        // Condición de entrada en LARGO.
        // Condición de entrada en CORTO.
        }

Después escribe un loop para cerrar posiciones fuera del horario si se cumplen las condiciones de salida:

else if(OrdersCount>0){
  for(int i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)&&
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
      if(OrderType()==OP_BUY){
        // Salida de posición LARGA.
        }
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL){
        // Salida de posición CORTA.
        }
      }
    }
  }

De esta manera te aseguras que la salida se produzca en el momento justo independientemente del filtro horario de entrada.