Cómo detectar un nuevo bar - página 3

 
Stephen Njuki:
Yo uso esto...

Gracias hombre

 
Stephen Njuki:
Yo uso esto...

He tenido muchos problemas al usar el tiempo como variable y estaba buscando una forma de usar las barras de variables


¡gracias, trabajo!


 
Mladen Rakic:

Por qué no usar simplemente algo como esto :

   static datetime prevTime=0;
          datetime lastTime[1];
          if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
          {
               prevTime=lastTime[0];
              
               // ...
          }
Debería funcionar en todos los casos (incluso cuando hay un error con CopyTime() evita una trampa)

¡gracias hermano!

 
Mladen Rakic:

Por qué no usar simplemente algo como esto :

   static datetime prevTime=0;
          datetime lastTime[1];
          if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
          {
               prevTime=lastTime[0];
              
               // ...
          }
Debería funcionar en todos los casos (incluso cuando hay un error con CopyTime() evita una trampa)

Perfecto.

Yo estaba buscando lo mismo.


Que Dios te bendiga

 

Gracias Leonard, realmente útil.

Notado algunos problemas cuando se trabaja con iHigh, iLow y iClose directamente después de lo que añadió un rápido Sleep(10000) después de llamar.

void OnTick()
   {
    if(isNewBar())
       {
       Sleep(10000);
       ...
       }
   }

bool isNewBar()
   {
   
    static datetime prevTime = 0;
    datetime lastTime[1];
    if(CopyTime(Symbol(), Period(), 0, 1, lastTime) == 1 && prevTime != lastTime[0])
       {
        prevTime = lastTime[0];
        return(true);
       }
    return(false);
   }
 

Yo escribí esta función, y normalmente la uso en el estado de ánimo de optimización que puede hacer una verdadera diferencia si usted quiere llamar a un millón de veces. Creo que esto es lo más rápido que se puede obtener la nueva barra, y se ve limpio:

inline bool IsNewBar(ENUM_TIMEFRAMES timeframe = PERIOD_CURRENT)
{
   static datetime lastBar;
   return lastBar != (lastBar = iTime(_Symbol, timeframe, 0));
}
 
Null_Pointer:

Yo escribí esta función, y normalmente la uso en el estado de ánimo de optimización que puede hacer una verdadera diferencia si usted quiere llamar a un millón de veces. Creo que esto es lo más rápido que se puede obtener la nueva barra, y se ve limpio:

¡Gracias!

Pregunta, ¿qué significa "Inline"?

 
fdesu: Pregunta, ¿qué significa "Inline"?

En "C" y "C++", la palabra clave "inline" recomendaría al compilador utilizar la expansión inline para la optimización.

Sin embargo, en MQL, no se documenta tal característica aunque el compilador lo acepta y no da un error durante la compilación. Puede que simplemente se tolere pero no tenga ningún efecto.

 
fdesu:

Gracias.

Pregunta, ¿qué significa "Inline"?

12. MQL5: Se ha añadido soporte para los especificadores inline, __inline y __forceinline al analizar el código. La presencia de los especificadores en el código no causa errores y no afecta a la compilación. Por el momento, esta característica simplifica la transferencia de código С++ a MQL5.
Encuentre más información sobre los especificadores en MSDN.

New MetaTrader 5 platform build 1930: Floating window charts and .Net libraries in MQL5
New MetaTrader 5 platform build 1930: Floating window charts and .Net libraries in MQL5
  • 2018.10.25
  • www.mql5.com
The updated version of the MetaTrader 5 platform will be released on October 26, 2018...
 
Alain Verleyen: 12. MQL5: Added support for the inline, __inline and __forceinline specifiers when parsing code. The presence of the specifiers in the code causes no errors and does not affect the compilation. At the moment, this feature simplifies transferring С++ code to MQL5. Find more information about specifiers in MSDN.
Gracias por la información. Lástima que no lo hayan incluido en la documentación, ya que no he podido encontrar ninguna mención al respecto ni en la versión online ni en el archivo de ayuda del MetaEditor.