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

Para adicionar comentários, por favor Faça o login ou registrar
Otavio Konmin Clemente
275
Otavio Konmin Clemente  

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 

crisaf
7
crisaf  
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.
Bestxavier
49
Bestxavier  
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.
Otavio Konmin Clemente
275
Otavio Konmin Clemente  
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!
Bruno Salles Pereira
309
Bruno Salles Pereira  
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? 

Otavio Konmin Clemente
275
Otavio Konmin Clemente  
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 

Bestxavier
49
Bestxavier  
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;
Bruno Salles Pereira
309
Bruno Salles Pereira  
Bestxavier:

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

Pessoal, muito obrigado pela colaboração.
Para adicionar comentários, por favor Faça o login ou registrar