Script para verificar se um novo candle foi se formado.

 

Olá.


As vezes durante o desenvolvimento do nosso Expert Advisor ou Script se torne necessário verificar se um novo candle foi formado.

Diante desta necessidade, segue um exemplo de Script para verificar se um novo candle foi formado:

void OnStart()
   {
      if(NewCandle(PERIOD_M1))
         Print("Started New Candle.");
   }

bool NewCandle(ENUM_TIMEFRAMES time_frame)
   {
      static int index = 0;
      int new_index = Bars(_Symbol, time_frame); 
      if(index != new_index)  
         {  
            index = new_index;   
            return true;  
         } 
      return false;     
   }

O argumento "PERIOD_M1" pode ser qualquer outro TIMEFRAME desejado.

Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Constantes de Gráfico / Janela temporal de Gráfico
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Constantes de Gráfico / Janela temporal de Gráfico
  • www.mql5.com
Todas as janelas de tempo (timeframes) pré-definidas de gráficos têm identificadores únicos. O identificador...
 
EngineerTraderDeveloper:

Olá.


As vezes durante o desenvolvimento do nosso Expert Advisor ou Script se torne necessário verificar se um novo candle foi formado.

Diante desta necessidade, segue um exemplo de Script para verificar se um novo candle foi formado:

O argumento "PERIOD_M1" pode ser qualquer outro TIMEFRAME desejado.

Usando Bars() acredito que pode vir a ser problema se seu número de velas estiver limitado no terminal, eu prefiro usar o iTime() e parece até natural já que tem um timeframe como parametro de entrada.

 
EngineerTraderDeveloper:

Olá.


As vezes durante o desenvolvimento do nosso Expert Advisor ou Script se torne necessário verificar se um novo candle foi formado.

Diante desta necessidade, segue um exemplo de Script para verificar se um novo candle foi formado:

O argumento "PERIOD_M1" pode ser qualquer outro TIMEFRAME desejado.

veja


https://www.mql5.com/pt/code/768

IsNewBar
IsNewBar
  • www.mql5.com
A classe СIsNewBar permite determinar o momento em que uma nova barra aparece.
 
Ricardo Rodrigues Lucca #:

Usando Bars() acredito que pode vir a ser problema se seu número de velas estiver limitado no terminal, eu prefiro usar o iTime() e parece até natural já que tem um timeframe como parametro de entrada.

Realmente, parece ser mais natural. Vou fazer alguns testes. Mas a princípio, não tive problemas utilizando o Bars().
 

Bom dia grande!

Há um artigo https://www.mql5.com/pt/articles/159 muito bom que você não precisa especificar o timeframe para utilizar, apenas precisa adicionar as linhas abaixo de código para codificar livremente.

#include <Lib CisNewBar.mqh>
CisNewBar current_chart; 

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int period_seconds=PeriodSeconds(_Period);                    
   datetime new_time=TimeCurrent()/period_seconds*period_seconds; 
   if(current_chart.isNewBar(new_time)) OnNewBar();              
  }

void OnNewBar()
  {
 // Aqui fica a implementação do seu código para ser implementada ao abrir uma nova barra
  }
Handler de evento "nova barra"
Handler de evento "nova barra"
  • www.mql5.com
A linguagem de programação é capaz de resolver problemas em um nível completamente novo. Mesmo as tarefas que já tenham soluções, graças à programação orientada a objeto elas podem atingir um nível ainda maior. Neste artigo, consideramos um exemplo especialmente simples de verificação de uma nova barra em um gráfico, que foi transformado em uma ferramenta bastante poderosa e versátil. Qual ferramenta? Descubra neste artigo.