Entrada a una hora definida con los buffer de una señal

 

Hola a todos,


Hay algun articulo o tutorial donde puede ver como genero el codigo en MQ4 para ejecutar la entrada de una operacion a la hora que yo defina y que segun la señal del indicador en ese MOMENTO se genere la señal Buffer 0 y 1. Ya tengo gran parte del codigo mq4, pero no se con base en la entrada como hacer que se genere la señal a la hora unica que yo lo especifique

Ejemplo

Buffer



Agradezco su ayuda o referencia.


Gracias

 
Jhony Pacheco:

Hola a todos,

Hay algun articulo o tutorial donde puede ver como genero el codigo en MQ4 para ejecutar la entrada de una operacion a la hora que yo defina y que segun la señal del indicador en ese MOMENTO se genere la señal Buffer 0 y 1. Ya tengo gran parte del codigo mq4, pero no se con base en la entrada como hacer que se genere la señal a la hora unica que yo lo especifique

Ejemplo

Buffer

Agradezco su ayuda o referencia.

Gracias

Igual te puedo echar una mano. Escríbeme por privado. Es que sin ver lo que llevas escrito de código hasta ahora, no es fácil decirte qué te falta.

De todas formas voy a tratar de responderte por aquí de forma un poco más genérica y sencilla. Igual con eso te basta.

Yo lo que haría es esto:

En primer lugar, acotar el tiempo de funcionamiento del indicador, y añadir los inputs correspondientes

extern int TOD_From_Hour = 09; //time of the day (from hour)
extern int TOD_From_Min = 00;  //time of the day (from min)
extern int TOD_To_Hour = 17;   //time of the day (to hour)
extern int TOD_To_Min = 00;    //time of the day (to min)

Y crear la condición:

bool inTimeInterval(datetime t, int From_Hour, int From_Min, int To_Hour, int To_Min)
  {
   string TOD = TimeToString(t, TIME_MINUTES);
   string TOD_From = StringFormat("%02d", From_Hour)+":"+StringFormat("%02d", From_Min);
   string TOD_To = StringFormat("%02d", To_Hour)+":"+StringFormat("%02d", To_Min);
   return((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, TOD_To) <= 0)
     || (StringCompare(TOD_From, TOD_To) > 0
       && ((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, "23:59") <= 0)
         || (StringCompare(TOD, "00:00") >= 0 && StringCompare(TOD, TOD_To) <= 0))));
  }

Voy a considerar una condición muy sencilla, por ejemplo, que el MACD esté por encima del valor cero.

Lo hago para que veas ahora cómo combino la condición con el horario:

//Indicator Buffer X
      if(iMACD(NULL, PERIOD_CURRENT, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, i) > 0)

        {
         if(!inTimeInterval(Time[i], TOD_From_Hour, TOD_From_Min, TOD_To_Hour, TOD_To_Min)) continue; //Dibujar indicador solo en momentos específicos del día
         Buffer1[i] = Low[i]; //Establecer el valor del indicador en Candlestick Low
        }
      else
        {
         Buffer1[i] = EMPTY_VALUE;
        }

Creo que la forma en la que lo he puesto, visualmente se entiende muy bien. Pero quizá buscas algo más específico.

Espero que te sirva como punto de partida

 

No entiendo exactamente lo que necesitas. En el caso de que simplemente sea para un EA, y quieras acotar un horario, lo haremos así:


Ponemos Inputs:

int TOD_From_Hour = 09; //time of the day (from hour)
int TOD_From_Min = 00;  //time of the day (from min)
int TOD_To_Hour = 17;   //time of the day (to hour)
int TOD_To_Min = 00;    //time of the day (to min)

Definimos condición:

bool inTimeInterval(datetime t, int From_Hour, int From_Min, int To_Hour, int To_Min)
  {
   string TOD = TimeToString(t, TIME_MINUTES);
   string TOD_From = StringFormat("%02d", From_Hour)+":"+StringFormat("%02d", From_Min);
   string TOD_To = StringFormat("%02d", To_Hour)+":"+StringFormat("%02d", To_Min);
   return((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, TOD_To) <= 0)
     || (StringCompare(TOD_From, TOD_To) > 0
       && ((StringCompare(TOD, TOD_From) >= 0 && StringCompare(TOD, "23:59") <= 0)
         || (StringCompare(TOD, "00:00") >= 0 && StringCompare(TOD, TOD_To) <= 0))));
  }

Y con las condiciones de apertura de trades, hacemos como en el indicador: (Probablemente esto lo pondrás en OnTick)

 //Abrir orden de compra

   if(iMACD(NULL, PERIOD_CURRENT, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0) > 0 )

     {
      RefreshRates();
      if(!inTimeInterval(TimeCurrent(), TOD_From_Hour, TOD_From_Min, TOD_To_Hour, TOD_To_Min)) return; //Abrir trades solo dentro de este horario
      if(IsTradeAllowed())
        {
         ticket = myOrderSend(OP_BUY, Ask, TradeSize, "");
         if(ticket <= 0) return;
        } 
     }
  }
Razón de la queja: