MetaTrader4
Como Detectar o Início de uma Nova Barra no MetaTrader 4: Dicas para Traders
Se você é um trader que utiliza o MetaTrader 4, provavelmente já percebeu que ao receber uma nova cotação, o terminal chama a função padrão OnTick(). No entanto, não existe uma função padrão para saber quando uma nova barra (ou candle) começa. Para detectar isso, é necessário monitorar o horário de abertura da barra mais recente. Assim que esse horário mudar, você saberá que uma nova barra começou e poderá reagir a essa mudança. O código abaixo, compatível tanto com MQL4 quanto com MQL5, ilustra uma maneira de realizar essa detecção: // Manipulador de eventos padrão de tick
void OnTick()
{
// Verifica se há uma nova barra (compatível com MQL4 e MQL5).
static datetime dtBarAtual = WRONG_VALUE;
datetime dtBarAnterior = dtBarAtual;
dtBarAtual = iTime( _Symbol, _Period, 0 );
bool bNovoEventoBarra = ( dtBarAtual != dtBarAnterior );
// Reage ao evento de nova barra e trata a situação.
if( bNovoEventoBarra )
{
// Detecta se este é o primeiro tick recebido e trata isso.
/* Por exemplo, quando é a primeira vez que é anexado a um gráfico e
a barra está em algum lugar no meio de seu progresso e
não é, de fato, o início de uma nova barra. */
if( dtBarAnterior == WRONG_VALUE )
{
// Faça algo no primeiro tick ou no meio da barra ...
}
else
{
// Faça algo quando uma barra normal começa ...
};
// Faça algo independentemente da condição acima ...
}
else
{
// Faça algo diferente ...
};
// Faça outras coisas ...
}; No código acima, a variável estática armazena o horário de abertura da barra, mesmo ao retornar da função OnTick(). Diferente de uma variável local comum, ela memoriza seu conteúdo e não o perde ao sair da função. Essa é a chave para detectar uma mudança no horário de abertura da barra atual. É importante ressaltar que, quando o EA é colocado pela primeira vez em um gráfico, o código acima reage como se a barra tivesse acabado de abrir. Essa condição requer um tratamento especial caso precise ser gerenciada de forma diferente.Ah, e não esqueça: todo o código que publico na CodeBase agora está disponível também na aba "Projetos Públicos" do MetaEditor sob o nome "FMIC".
2022.04.24