Come rilevare una nuova barra - pagina 3

 
Stephen Njuki:
Io uso questo...

Grazie amico

 
Stephen Njuki:
Io uso questo...

Ho avuto molti problemi usando il tempo come variabile e stavo cercando un modo per usare le barre variabili


grazie, lavoro!


 
Mladen Rakic:

Perché non usare semplicemente qualcosa come questo:

   static datetime prevTime=0;
          datetime lastTime[1];
          if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
          {
               prevTime=lastTime[0];
              
               // ...
          }
Dovrebbe funzionare in tutti i casi (anche quando c'è un errore con CopyTime() evita una trappola)

grazie fratello!

 
Mladen Rakic:

Perché non usare semplicemente qualcosa come questo:

   static datetime prevTime=0;
          datetime lastTime[1];
          if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
          {
               prevTime=lastTime[0];
              
               // ...
          }
Dovrebbe funzionare in tutti i casi (anche quando c'è un errore con CopyTime() evita una trappola)

Perfetto.

Stavo cercando la stessa cosa.


Dio vi benedica

 

Grazie Leonard, davvero utile.

Ho notato alcuni problemi quando lavoro con iHigh, iLow e iClose direttamente dopo aver aggiunto un rapido Sleep(10000) dopo la chiamata.

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

Ho scritto questa funzione, e di solito la uso in stato di ottimizzazione che può fare una vera differenza se si vuole chiamarla un milione di volte. Penso che questo sia il più veloce possibile per ottenere la nuova barra, e sembra pulito:

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

Ho scritto questa funzione, e di solito la uso in stato di ottimizzazione che può fare una vera differenza se si vuole chiamarla un milione di volte. Penso che questo sia il più veloce possibile per ottenere la nuova barra, e sembra pulito:

Grazie!

Domanda: cosa significa "Inline"?

 
fdesu: Domanda: cosa significa "Inline"?

In "C" e "C++", la parola chiave "inline" raccomanderebbe al compilatore di usare l'espansione in linea per l'ottimizzazione.

Tuttavia, in MQL, tale caratteristica non è documentata, anche se il compilatore la accetta e non dà un errore durante la compilazione. Potrebbe semplicemente essere tollerata ma non avere alcun effetto.

 
fdesu:

Grazie!

Domanda: cosa significa "Inline"?

12. MQL5: Aggiunto il supporto per gli specificatori inline, __inline e __forceinline durante l'analisi del codice. La presenza degli specificatori nel codice non causa errori e non influenza la compilazione. Al momento, questa caratteristica semplifica il trasferimento del codice С++ a MQL5.
Trovate maggiori informazioni sugli specificatori in 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.
Grazie per l'informazione! Peccato che non l'abbiano incluso nella documentazione, dato che non ho trovato alcuna menzione di ciò né nella versione online né nel file di aiuto di MetaEditor.