Bibliotheken: Die hochproduktive Bibliothek iTimeSeries - Seite 2

 
nicholishen:


Sie haben Recht. Der Test wurde so konzipiert, dass er den Benchmark Alain widerspiegelt. Hier ist ein Beispiel mit einer Zeitverschiebung, um die Verwendung dieses Algorithmus in der realen Welt genauer zu simulieren.

https://i.imgtc.com/rhYzQFj.png

iBarShift benchmark 3 based on 6417330 runs.
=======================================================
iBarShift(Alain Verleyen) for 2005.03.14 12:29:59 is 4295861 in 22086.599 milliseconds.
-------------------------------------------------------------
iBarShift3 for 2005.03.14 12:29:59 is 4295861 in 10717.378 milliseconds.
-------------------------------------------------------------
iBarShift(direct function call) for 2005.03.14 12:29:59 is 4295861 in 20133.535 milliseconds.
-------------------------------------------------------------
iBar.Shift(performance mode) for 2005.03.14 12:29:59 is 4295861 in 19648.571 milliseconds.
-------------------------------------------------------------
 
Was ist iBarShift3?
 
Stanislav Korotky:
Was ist iBarShift3?
Im Quellcode in diesem Thread.
 
fxsaber:
Sie testen diese im Debugging-Modus, nicht wahr? Kompilieren und testen Sie, indem Sie das Skript auf das Diagramm anwenden.
 
nicholishen:
Sie testen diese im Debugging-Modus, nicht wahr? Kompilieren und testen Sie, indem Sie das Skript auf das Diagramm anwenden.
Freigabe 1606
iBarShift benchmark 3 based on 100000 runs.
=======================================================
iBarShift(Alain Verleyen) for 2017.03.30 12:36:53 is 71117 in 349.886 milliseconds.
-------------------------------------------------------------
iBarShift3 for 2017.03.30 12:36:53 is 71117 in 168.600 milliseconds.
-------------------------------------------------------------
iBarShift(direct function call) for 2017.03.30 12:36:53 is 71117 in 315.877 milliseconds.
-------------------------------------------------------------
iBar.Shift(performance mode) for 2017.03.30 12:36:53 is 71117 in 284.332 milliseconds.
 

Fehler

#define  DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
  class CLASS##NAME                                                                                           \
  {                                                                                                           \
  public:                                                                                                     \
    static T Get(const string Symb,const int TimeFrame,const int iShift)                                      \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
      return((Copy##FUNC((Symb == NULL) ? _Symbol : Symb, _Period, iShift, 1, tValue) > 0) ? tValue[0] : -1); \
    }                                                                                                         \
                                                                                                              \
    T operator[](const int iPos) const                                                                        \
    {                                                                                                         \
      return(CLASS##NAME::Get(_Symbol, _Period, iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS##NAME  NAME;                                                                                           \
                                                                                                              \
  T i##NAME(const string Symb,const int TimeFrame,const int iShift)                                           \
  {                                                                                                           \
    return(CLASS##NAME::Get(Symb,  TimeFrame, iShift));                                                        \
  }

DEFINE_TIMESERIE(Volume,TickVolume,long)
DEFINE_TIMESERIE(Time,Time,datetime)
DEFINE_TIMESERIE(Open,Open,double)
DEFINE_TIMESERIE(High,High,double)
DEFINE_TIMESERIE(Low,Low,double)
DEFINE_TIMESERIE(Close,Close,double)

#include <iTimeSeries_nicholishen_v2.mqh>

#define  TOSTRING(A) (#A + " = " + (string)(A) + "\n")

void OnStart()
{
  CiTimeSeries iBar;
  
  if (iBar.Init())
  {
    const double PrevClose = iBar.Close(0);
    
    Print(TOSTRING(iBar.Close(0)) + TOSTRING(Close[0]));        
    
    while (!IsStopped() && (SymbolInfoDouble(_Symbol, SYMBOL_BID) == PrevClose))
      Sleep(100);
      
// iBar.Refresh();
    Print(TOSTRING(iBar.Close(0)) + TOSTRING(Close[0]));        
  }
}


Ergebnis

iBar.Close(0) = 1.17587
Close[0] = 1.17587

iBar.Close(0) = 1.17587
Close[0] = 1.17589
 
Das Skript lässt sich nicht kompilieren
 
Eine Sache, die Menschen, die diese Bibliothek verwenden, sollten vorsichtig sein:

m_periodSecAdjmöglicherweise nicht gut inited, und verursachen Null-Division Fehler
Bitte behandeln Sie es gut, bevor Sie diese Bibliothek anwenden