Parâmetros de Entrada - Horários de negociação

 

Boa tarde,

Criei meu primeiro EA pelo assistente MQL.

Para testar estratégias day trade no backtest estou precisando de colocar horário de início e fim de negociação diários

nos Parâmetros de entrada do EA, conforme na figura abaixo. 

Alguém poderia me ajudar?


 
TraderDoctor:

Boa tarde,

Criei meu primeiro EA pelo assistente MQL.

Para testar estratégias day trade no backtest estou precisando de colocar horário de início e fim de negociação diários

nos Parâmetros de entrada do EA, conforme na figura abaixo. 

Alguém poderia me ajudar?


Pela sua imagem é mais ou menos isso que você deve colocar no escopo global:

input string hor = "-------";  //Horários

input datetime hor_ini = D'09:00'; //Horário de Início

input datetime hor_encerra = D'16:00'; //Horário de Encerramento de Entradas

input datetime hor_fim = D'17:15'; //Horário de Encerramento

 
Silvio Vaiano:

Pela sua imagem é mais ou menos isso que você deve colocar no escopo global:

input string hor = "-------";  //Horários

input datetime hor_ini = D'09:00'; //Horário de Início

input datetime hor_encerra = D'16:00'; //Horário de Encerramento de Entradas

input datetime hor_fim = D'17:15'; //Horário de Encerramento

Valeu!!!

Muito obrigado, Silvio!!!

 
TraderDoctor:

Valeu!!!

Muito obrigado, Silvio!!!

Mas mesmo vc declarando essas variáveis é necessário vc tratar isso no código para que o seu EA saiba que se chegar em determinado horário deve fechar as operações, ou acompanhar as abertas sem abrir mais ate o encerramento.

 
Silvio Vaiano:

Pela sua imagem é mais ou menos isso que você deve colocar no escopo global:

input string hor = "-------";  //Horários

input datetime hor_ini = D'09:00'; //Horário de Início

input datetime hor_encerra = D'16:00'; //Horário de Encerramento de Entradas

input datetime hor_fim = D'17:15'; //Horário de Encerramento

Silvio,

Fiz do mesmo jeito que vc ensinou ao TradeDoctor, porem nos meus parametros em vez de mostrar somente "HH:MM" aparece "AAAA.MM.DD HH:MM:SS", como corrigir isso?

Abs.

Arquivos anexados:
 
Alberto Lira:

Silvio,

Fiz do mesmo jeito que vc ensinou ao TradeDoctor, porem nos meus parametros em vez de mostrar somente "HH:MM" aparece "AAAA.MM.DD HH:MM:SS", como corrigir isso?

Abs.

input group                "Horário de Negociação";
input string                                    inicio ="09:00";//Inicia envio das ordens (HH:MM)
input string                                    termino ="17:00";//Encerra envio das ordens (HH:MM)
input string                                    fechamento ="17:30";//Fechar todas as posições (HH:MM)

MqlDateTime horaAtual;
MqlDateTime horaInicio;
MqlDateTime horaTermino;
MqlDateTime horaFechamento;

int OnInit()
{
        TimeToStruct(StringToTime(inicio),horaInicio);
        TimeToStruct(StringToTime(termino),horaTermino);
        TimeToStruct(StringToTime(fechamento),horaFechamento);
        
        return(INIT_SUCCEEDED);
}

void OnTick()
{
        TimeToStruct(TimeCurrent(), horaAtual);
}

 Eu uso assim, agora você pode definir uma lógica para os horários ;)

 
Edilson Domingos:

 Eu uso assim, agora você pode definir uma lógica para os horários ;)

Eu tbm estou tentando fazer isso, mas o meu não esta abrindo os trades a partir do horario de inicio.

No backtest funciona mas no cenario real não. Pq no backtest funciona e no cenario real nao ?

Estou tentando assim.


//input string inicio = "09:35";

bool defineHorarioInicio(string inicio){

   MqlDateTime horario_atual;
   MqlDateTime horario_inicio;
     
   TimeToStruct(TimeCurrent(), horario_atual);
   TimeToStruct(StringToTime(inicio), horario_inicio); 
    
   if(StringLen(inicio) > 0){
      if((horario_atual.hour >= horario_inicio.hour) && (horario_inicio.min == NULL || horario_inicio.min == "")){
         //Alert("Horario de inicio - OK");
         return true;
      }else if((horario_atual.hour >= horario_inicio.hour) && (horario_atual.min >= horario_inicio.min)){
         //Alert("Horario de inicio com minuto - OK");
         return true;
      }   
   } 
   
   
   return false;

}