Executar função todo dia no mesmo horário

 

Olá,

Estou desenvolvimento meu primeiro EA. Ele é baseado no primeiro candle de 15 minutos do dia. De forma que eu quero que ele rode todo dia às 10:15:00.

Estou usando o seguinte código: 

void OnTick()
  { 
datetime horafpc=TimeCurrent();                              // Carrega na variável horafpc a data e hora do servidor
string stringhorafpc=TimeToString(horafpc,TIME_SECONDS);     // Carrega a hora, minuto e segundo na variável stringhorafpc
if(stringhorafpc=="10:15:00")                                // Verifica se são 10:15

Ocorre que eventualmente ele executa o código depois do IF mais de uma vez, acredito que isso ocorra quando existe mais de um ticket no mesmo segundo, mas não tenho certeza.

Eu fiz uma gambiarra para ele só executar uma vez, mas gostaria de saber se alguém consegui me sugerir uma solução mais "correta".

Obrigado,

Otávio 

 
otaviokc:

Olá,

Estou desenvolvimento meu primeiro EA. Ele é baseado no primeiro candle de 15 minutos do dia. De forma que eu quero que ele rode todo dia às 10:15:00.

Estou usando o seguinte código: 

Ocorre que eventualmente ele executa o código depois do IF mais de uma vez, acredito que isso ocorra quando existe mais de um ticket no mesmo segundo, mas não tenho certeza.

Eu fiz uma gambiarra para ele só executar uma vez, mas gostaria de saber se alguém consegui me sugerir uma solução mais "correta".

Obrigado,

Otávio 

Eu normalmente verifico se já existe uma ordem aberta com o MagicNumber no gráfico atual para impedir novas ordens. Mas não sei se isso pode te ajudar, não sei direito o que você quer.
 
otaviokc:

Olá,

Estou desenvolvimento meu primeiro EA. Ele é baseado no primeiro candle de 15 minutos do dia. De forma que eu quero que ele rode todo dia às 10:15:00.

Estou usando o seguinte código: 

Ocorre que eventualmente ele executa o código depois do IF mais de uma vez, acredito que isso ocorra quando existe mais de um ticket no mesmo segundo, mas não tenho certeza.

Eu fiz uma gambiarra para ele só executar uma vez, mas gostaria de saber se alguém consegui me sugerir uma solução mais "correta".

Obrigado,

Otávio 

Utiliza o calculo para detectar uma nova barra neste caso a cada 15 minutos Barhttps://www.mql5.com/en/articles/159.

 O OnTick() é acionado em varias circunstancias oque pode acionar este evento em termos de milissegundos.

https://www.mql5.com/en/articles/22 

The "New Bar" Event Handler
The "New Bar" Event Handler
  • 2010.10.11
  • Konstantin Gruzdev
  • www.mql5.com
MQL5 programming language is capable of solving problems on a brand new level. Even those tasks, that already have such solutions, thanks to object oriented programming can rise to a higher level. In this article we take a specially simple example of checking new bar on a chart, that was transformed into rather powerful and versatile tool. What tool? Find out in this article.
 
Bestxavier:

Utiliza o calculo para detectar uma nova barra neste caso a cada 15 minutos Barhttps://www.mql5.com/en/articles/159.

 O OnTick() é acionado em varias circunstancias oque pode acionar este evento em termos de milissegundos.

https://www.mql5.com/en/articles/22 

Muito obrigado Bestxavier, Era exatamente isso que eu estava precisando!
 
otaviokc:
Muito obrigado Bestxavier, Era exatamente isso que eu estava precisando!

Pessoal, eu to tentando obter somente o horário atual, por exemplo, o TimeTradeServer() me retorna '2016.06.17 21:40', pois bem, eu quero pegar somente a hora, que nesse caso é '21'.

 

Alguma sugestão? 

 
Bruno Salles Pereira:

Pessoal, eu to tentando obter somente o horário atual, por exemplo, o TimeTradeServer() me retorna '2016.06.17 21:40', pois bem, eu quero pegar somente a hora, que nesse caso é '21'.

 

Alguma sugestão? 

Bruno,

Lá no começo do post já tem um exemplo de como fazer isso.

Há outras formas, eu mesmo atualmente creio ser mais eficiente transformar a data em segundos para poder também definir intervalos que o robô deve trabalhar. 

Abs,

Otávio 

 
Bruno Salles Pereira:

Pessoal, eu to tentando obter somente o horário atual, por exemplo, o TimeTradeServer() me retorna '2016.06.17 21:40', pois bem, eu quero pegar somente a hora, que nesse caso é '21'.

 

Alguma sugestão? 

Também é possível utilizar o MqlDateTime conforme abaixo

MqlDateTime mqlDateTime;
     
TimeCurrent(mqlDateTime);
     
int hora = mqlDateTime.hour;
 
Bestxavier:

Também é possível utilizar o MqlDateTime conforme abaixo

Pessoal, muito obrigado pela colaboração.
 
oi pessoal sou novo com EA tenho um que quero colocar horario de inicio e de parada dentro de um dia alguem pode me ajudar?
 
Emerson2020:
oi pessoal sou novo com EA tenho um que quero colocar horario de inicio e de parada dentro de um dia alguem pode me ajudar?

Emerson, bom dia,

Use o "buscar/localizar", tem vários exemplos de códigos do que você quer fazer.

 
Ruy Christian Hoffmann:

Emerson, bom dia,

Use o "buscar/localizar", tem vários exemplos de códigos do que você quer fazer.

Na verdade, se tivesse ao menos lido o tópico já saberia como fazer.