Ajudar com função pra arredondar tempo de 5 em 5 minutos.

 

Alguem poderia me ajudar em como eu posso fazer pra arredondar para o horario atual até o quinto minuto? Ex:


Hora atual: 10:08 --> Gostaria que a operação fosse feita as 10:10.

Hora atual: 10:03 --> Gostaria que a operação fosse feita as 10:05.

Hora atual: 10:11 --> Gostaria que a operação fosse feita as 10:15.


Ou seja, de 5 em 5 minutos a partir da hora atual.

 
Outra pergunta, sou novo por aqui existe alguma forma de saber se a candle fechou verde ou vermelha?
 
wesleysiqueira02:

Alguem poderia me ajudar em como eu posso fazer pra arredondar para o horario atual até o quinto minuto? Ex:


Hora atual: 10:08 --> Gostaria que a operação fosse feita as 10:10.

Hora atual: 10:03 --> Gostaria que a operação fosse feita as 10:05.

Hora atual: 10:11 --> Gostaria que a operação fosse feita as 10:15.


Ou seja, de 5 em 5 minutos a partir da hora atual.

Segue um exemplo. Siga a logica e programe de acordo com sua estrategia.

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Limitar robô por horário e/ou numero de operções.

Willian De Caldas Leite, 2018.12.27 00:33

Se te ajudar eu uso esse padrao nos meus EA.


input string inicio="10:30"; //Horario de inicio(entradas);
input string termino="17:30"; //Horario de termino(entradas);
input string fechamento="17:45"; //Horario de fechamento(entradas);

MqlDateTime horario_inicio,horario_termino,horario_fechamento,horario_atual; 

int OnInit()
  {
//---
   TimeToStruct(StringToTime(inicio),horario_inicio);         //+-------------------------------------+
   TimeToStruct(StringToTime(termino),horario_termino);       //| Conversão das variaveis para mql    |
   TimeToStruct(StringToTime(fechamento),horario_fechamento); //+-------------------------------------+
   
//verificação de erros nas entradas de horario
   if(horario_inicio.hour>horario_termino.hour || (horario_inicio.hour==horario_termino.hour && horario_inicio.min>horario_termino.min))
     {
      printf ( "Parametos de horarios invalidos!" );
      return INIT_FAILED;
     }
     
    if(horario_termino.hour>horario_fechamento.hour || (horario_termino.hour==horario_fechamento.hour && horario_termino.min>horario_fechamento.min))
     {
      printf("Parametos de horarios invalidos!");
      return INIT_FAILED;
      }



bool HorarioEntrada()
      {
       TimeToStruct(TimeCurrent(),horario_atual);

      if(horario_atual.hour >= horario_inicio.hour && horario_atual.hour <= horario_termino.hour)
   {
      // Hora atual igual a de início
      if(horario_atual.hour == horario_inicio.hour)
         // Se minuto atual maior ou igual ao de início => está no horário de entradas
         if(horario_atual.min >= horario_inicio.min)
            return true;
         // Do contrário não está no horário de entradas
         else
            return false;
      
      // Hora atual igual a de término
      if(horario_atual.hour == horario_termino.hour)
         // Se minuto atual menor ou igual ao de término => está no horário de entradas
         if(horario_atual.min <= horario_termino.min)
            return true;
         // Do contrário não está no horário de entradas
         else
            return false;
      
      // Hora atual maior que a de início e menor que a de término
      return true;
   }
   
   // Hora fora do horário de entradas
   return false;
}


bool HorarioFechamento()
     {
      TimeToStruct(TimeCurrent(),horario_atual);
      
     
     // Hora dentro do horário de fechamento
   if(horario_atual.hour >= horario_fechamento.hour)
   {
      // Hora atual igual a de fechamento
      if(horario_atual.hour == horario_fechamento.hour)
         // Se minuto atual maior ou igual ao de fechamento => está no horário de fechamento
         if(horario_atual.min >= horario_fechamento.min)
            return true;
         // Do contrário não está no horário de fechamento
         else
            return false;
      
      // Hora atual maior que a de fechamento
      return true;
   }
   
   // Hora fora do horário de fechamento
   return false;
}



 
wesleysiqueira02:
Outra pergunta, sou novo por aqui existe alguma forma de saber se a candle fechou verde ou vermelha?

Verde ou vermelho eh apenas uma questão de estética. Você quer dizer se fechou em alta ou em baixa?

Alta:

Se fechamento > abertura


Baixa:


Se fechamento < abertura


Simples assim.

 
Joscelino Celso de Oliveira:

Segue um exemplo. Siga a logica e programe de acordo com sua estrategia.


obrigado!!!

 
Joscelino Celso de Oliveira:

Verde ou vermelho eh apenas uma questão de estética. Você quer dizer se fechou em alta ou em baixa?

Alta:

Se fechamento > abertura


Baixa:


Se fechamento < abertura


Simples assim.

Valeu amigo!

 
wesleysiqueira02:

Alguem poderia me ajudar em como eu posso fazer pra arredondar para o horario atual até o quinto minuto? Ex:


Hora atual: 10:08 --> Gostaria que a operação fosse feita as 10:10.

Hora atual: 10:03 --> Gostaria que a operação fosse feita as 10:05.

Hora atual: 10:11 --> Gostaria que a operação fosse feita as 10:15.


Ou seja, de 5 em 5 minutos a partir da hora atual.

Olá  wesleysiqueira02, uma forma simples e direta, em uma única linha de programação, de você fazer isso, é testar a existência de uma nova barra no instrumento e período escolhido, como por exemplo:

if(IsNewBar(_Symbol,PERIOD_M5)) {
  ...
}

Se você ainda não usa nenhuma função para testar uma nova barra, nesse fórum e no Codebase existem inúmeras formas de verificar isso, com maior ou menor qualidade, como por exemplo a simplificada abaixo, que é a mais elementar que me vem à mente:

static int barras;
bool IsNewBar(string symbol,ENUM_TIMEFRAMES period)
   {
      if(barras!=Bars(symbol,period))
        {
            barras=Bars(symbol,period);
            return(true);
        }
      return(false);
   }

Sds.,
Rogério Figurelli

Razão: