Como detectar um novo bar - página 3

 
Stephen Njuki:
Eu uso isto...

Obrigado, cara

 
Stephen Njuki:
Eu uso isto...

Tive muitos problemas usando o tempo como variável e estava procurando uma maneira de usar as barras de variáveis


obrigado, trabalhe!


 
Mladen Rakic:

Por que não simplesmente usar algo como isto :

   static datetime prevTime=0;
          datetime lastTime[1];
          if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
          {
               prevTime=lastTime[0];
              
               // ...
          }
Deve funcionar em todos os casos (mesmo quando há um erro com CopyTime() ele evita uma armadilha)

obrigado mano!

 
Mladen Rakic:

Por que não simplesmente usar algo como isto :

   static datetime prevTime=0;
          datetime lastTime[1];
          if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
          {
               prevTime=lastTime[0];
              
               // ...
          }
Deve funcionar em todos os casos (mesmo quando há um erro com CopyTime() ele evita uma armadilha)

Perfeito.

Eu estava procurando a mesma coisa.


Deus o abençoe.

 

Obrigado Leonard, realmente útil.

Notou alguns problemas ao trabalhar com iHigh, iLow e iClose diretamente depois de ter adicionado um rápido Sleep(10000) após a chamada.

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);
   }
 

Eu escrevi esta função, e normalmente a utilizo no clima de otimização, que pode fazer uma verdadeira diferença se você quiser chamá-la um milhão de vezes. Acho que isto é o mais rápido que você pode conseguir o novo bar, e parece limpo:

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

Eu escrevi esta função, e normalmente a utilizo no clima de otimização, que pode fazer uma verdadeira diferença se você quiser chamá-la um milhão de vezes. Acho que isto é o mais rápido que você pode conseguir o novo bar, e parece limpo:

Obrigado!

Pergunta, o que significa "Inline"?

 
fdesu: Pergunta, o que significa "Inline"?

Em "C" e "C++", a palavra-chave "inline" recomendaria ao compilador que utilizasse a expansão inline para otimização.

Entretanto, na MQL, nenhuma característica deste tipo é documentada, mesmo que o compilador a aceite e não dê um erro durante a compilação. Pode ser simplesmente tolerada, mas não tem efeito.

 
fdesu:

Obrigado!

Pergunta, o que significa "Inline"?

12. MQL5: Adicionado suporte para os especificadores inline, __inline e __forceinline ao analisar o código. A presença dos especificadores no código não causa erros e não afeta a compilação. No momento, esta característica simplifica a transferência do código С++ para a MQL5.
Encontre mais informações sobre os especificadores na 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.
Obrigado pela informação! Pena que não tenham incluído isso na documentação, pois não encontrei nenhuma menção na versão on-line nem no arquivo de ajuda do MetaEditor.