Indicar uma nova barra - página 2

 
Doerk Hilger:

A maneira mais fácil:

data/hora estática tlastbar=0;

datetime tnewbar=iTime(NULL,PERIOD_CURRENT,0);

bool isewbar=tnewbar!=tlastbar;

tlastbar=tnewbar=tnewbar;

Tanto quanto sei, o tópico é para mql5. Seu código é apenas mql4.
 
Willbur:

Aqui está minha versão final.

Na verdade, estou um pouco preocupado porque é tão fácil.

Alain: Seria bom se você emitisse a bênção.

// -----------------------------------------------------------------------
bool NewBar(void)
{
bool iNewBar = false;
static double currPeriodProgress = 0;

   if(MathMod(TimeCurrent(),PeriodSeconds()) < currPeriodProgress) iNewBar = true;

   currPeriodProgress = MathMod(TimeCurrent(),PeriodSeconds());

   return(iNewBar);
}
// ------------------------------------------------------------------------
void OnTick()
{
    if(NewBar())     PlaySound("tick.wav");


Saudações de Colônia
Willbur

O problema é que ele só pode ser usado da OnTick(). De outros manipuladores de eventos, você nunca tem certeza se o TimeCurrent() está relacionado ao símbolo que você deseja.

E eu sugiro que você nunca faça o mesmo cálculo duas vezes:

bool NewBar(void)
  {
   bool iNewBar=false;
   static double currPeriodProgress=0;

   double lastPeriodProgress=MathMod(TimeCurrent(),PeriodSeconds());

   if(lastPeriodProgress<currPeriodProgress) iNewBar=true;

   currPeriodProgress=lastPeriodProgress;

   return(iNewBar);
  }
 
Alain Verleyen:
Tanto quanto sei, o tópico é para mql5. Seu código é apenas mql4.
O que você quer dizer com isso? É apenas um corte e pode ser incluído onde quer que se queira, por exemplo, dentro de sua função NewBar(). E imo é a solução mais simples e mais rápida e confiável. Incluí isto em um derivado da classe CSymbolInfo para todos os períodos de tempo separadamente e funciona perfeitamente.
 

Eu usei estes na MQL4

//global
long Bars_in_Chart;

   // detected new bar
   if(Bars_in_Chart<Bars)
   {
      Bars_in_Chart=Bars;
   }
 
Doerk Hilger:
O que você quer dizer com isso? É apenas um corte e pode ser incluído onde quer que se queira, por exemplo, dentro de sua função NewBar(). E imo é a solução mais simples e mais rápida e confiável. Incluí isto em um derivado da classe CSymbolInfo para todos os períodos de tempo separadamente e funciona perfeitamente.
Não há função iTime() em mql5.
 
Alain Verleyen:
Não há função iTime() em mql5.
MT5, realmente? Mas MQL5 não é apenas MT5, isto é, pelo menos como eu sempre entendi, pois MT4 usa o compilador MQL5. Mas na verdade não sabia disso, eu uso principalmente o MT4. De qualquer forma, obrigado pela informação sobre a restrição.
 
Doerk Hilger:
MT5, realmente? Mas a MQL5 não é apenas MT5, isto é, pelo menos como eu sempre entendi, pois a MT4 usa o compilador MQL5. Mas na verdade não sabia disso, eu uso principalmente o MT4. De qualquer forma, obrigado pela informação sobre a restrição.
Não, mql4 é para MT4, mql5 é para MT5. Eles têm um subconjunto de funções em comum, mas isso são 2 idiomas diferentes.
 

A MQL4 iTime() é fácil e compreensível para os comerciantes, assim como a maioria das outras funções da MQL4.

A MQL5 é diferente, você precisa de um diploma em ciência da computação para codificar isso, e é isso que coloca a maioria das pessoas no chão.

Eis um exemplo que encontrei na semana passada, quando quis começar e converter meus EA MT4 para MT5 e a solução que encontrei.


 
Alain Verleyen:
Não, mql4 é para MT4, mql5 é para MT5. Eles têm um subconjunto de funções em comum, mas isso são 2 idiomas diferentes.

O idioma é o mesmo, mas eles têm um pequeno subconjunto de funções não em comum ;) De qualquer forma, você provavelmente está certo com esta definição. A MQ fez muito para gerar confusão neste ponto.

 
Doerk Hilger:
MT5, realmente? Mas a MQL5 não é apenas MT5, isto é, pelo menos como eu sempre entendi, pois a MT4 usa o compilador MQL5. Mas na verdade não sabia disso, eu uso principalmente o MT4. De qualquer forma, obrigado pela informação sobre a restrição.
Você sabe se existe uma biblioteca/classe pública que implementa o antigo iClose, iTime ... funciona apenas para fins de compatibilidade? Faria sentido durante uma conversão passo a passo.
Razão: