Indicar una nueva barra - página 2

 
Doerk Hilger:

La forma más fácil:

static datetime tlastbar=0;

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

bool isnewbar=tnewbar!=tlastbar;

tlastbar=tnewbar;

Que yo sepa el tema es para mql5. Tu código es sólo para mql4.
 
Willbur:

Aquí está mi versión final.

De hecho, estoy un poco preocupado porque es muy fácil.

Alain: Estaría bien que emitieras la bendición.

// -----------------------------------------------------------------------
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");


Saludos desde Colonia
Willbur

El problema es que sólo se puede utilizar desde OnTick(). Desde otros manejadores de eventos nunca estás seguro de si TimeCurrent() está relacionado con el símbolo que quieres.

Y te sugiero que nunca hagas el mismo cálculo dos veces :

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:
Que yo sepa el tema es para mql5. Tu código es sólo para mql4.
¿Qué quieres decir con eso? Es sólo un recorte y se puede incluir donde uno quiera, por ejemplo, dentro de su función NewBar(). Y en mi opinión es la solución más sencilla, rápida y fiable. He incluido esto en un derivado de la clase CSymbolInfo para todos los plazos por separado y funciona perfectamente.
 

He utilizado estos en MQL4

//global
long Bars_in_Chart;

   // detected new bar
   if(Bars_in_Chart<Bars)
   {
      Bars_in_Chart=Bars;
   }
 
Doerk Hilger:
¿Qué quieres decir con eso? Es sólo un recorte y se puede incluir donde uno quiera, por ejemplo dentro de su función NewBar(). Y, en mi opinión, es la solución más sencilla, rápida y fiable. Yo incluí esto en un derivado de la clase CSymbolInfo para todos los timeframes por separado y funciona perfectamente.
No hay función iTime() en mql5.
 
Alain Verleyen:
No hay función iTime() en mql5.
¿MT5, en serio? Pero MQL5 no es solo MT5, eso es al menos como lo he entendido siempre, porque MT4 usa el compilador MQL5. Pero de hecho no sabía eso, yo uso principalmente MT4. De todos modos, gracias por la información sobre la restricción.
 
Doerk Hilger:
MT5, ¿en serio? Pero MQL5 no es solo MT5, eso es al menos lo que yo entendí siempre, porque MT4 usa el compilador MQL5. Pero de hecho no sabía eso, yo uso principalmente MT4. De todos modos, gracias por la información sobre la restricción.
No, mql4 es para MT4, mql5 es para MT5. Tienen un subconjunto de funciones en común, pero son 2 lenguajes diferentes.
 

MQL4 iTime() es fácil y comprensible para los comerciantes como lo es con la mayoría de MQL4 otras funciones.

MQL5 es diferente, se necesita un título en ciencias de la computación para codificar eso, y eso es lo que pone a la mayoría de la gente.

Este es un ejemplo que encontré la semana pasada, cuando quise iniciar y convertir mis EA's de MT4 a MT5 y la solución que encontré.


 
Alain Verleyen:
No, mql4 es para MT4, mql5 es para MT5. Tienen un subconjunto de funciones en común, pero son 2 lenguajes diferentes.

El lenguaje es el mismo pero tienen un pequeño subconjunto de funciones que no son comunes ;) De todos modos, probablemente tengas razón con esta definición. MQ hizo mucho para generar confusión en este punto.

 
Doerk Hilger:
MT5, ¿en serio? Pero MQL5 no es solo MT5, eso es al menos lo que yo entendí siempre, porque MT4 usa el compilador MQL5. Pero de hecho no sabía eso, yo uso principalmente MT4. De todos modos, gracias por la información sobre la restricción.
¿Saben si hay alguna librería/clase pública que implemente las antiguas funciones iClose, iTime... por cuestiones de compatibilidad? Tendría sentido durante una conversión paso a paso.