Wie erhalte ich Open, Low, High, Close Parameter in MQL5? - Seite 6

 
Artyom Trishkin:

Es gab einige Probleme mit SERIES_LASTBAR_DATE. Das wurde hier schon vor langer Zeit diskutiert. Vielleicht wurde sie repariert.

Die Funktion iXXX() funktioniert einwandfrei, ich benutze sie seit etwa 3 Monaten (seit ich mit MQL5 begonnen habe) - ich habe keine Bugs oder... - Es ist sehr praktisch und alles funktioniert!

SZZY: Es funktioniert wie in der Hilfe beschrieben:

Parameter

Symbol

[in] Name des Gerätesymbols. NULL bedeutet aktuelles Symbol.

Zeitrahmen

[in] Zeitraum. Kann einer der Werte der Aufzählung ENUM_TIMEFRAMES sein. 0 bedeutet den Zeitraum des aktuellen Diagramms.

 
Igor Makanu:

Schreibst du immer nur und versuchst nicht zu lesen? Ich habe dir einen Link zu einem ganzen Artikel über die neue Bar gegeben! Artikel werden geprüft - geprüft von Leuten mit einer anderen Kompetenz als denen, die ständig im Forum schreiben ;)

ZS: Wenn du aufhörst zu schreiben und anfängst zu lesen, wie z.B. den Artikel auf meinem Link, kannst du einen anderen Weg finden ( SERIES_LASTBAR_DATE ), um die iXXX() nicht zu verwenden - ich habe dir gesagt, sie nicht zu verwenden ))) - wer würde die Bugs und Fehler, die die Entwickler veröffentlicht schlampig ))))) sagen.

Danke für den Link. Ich habe Ihre Lösung nicht kritisiert, sondern nur auf den iTime-Aufruf hingewiesen, der selbst auf die Verwendung von iXXX-Funktionen hindeutet, was den Punkt der Fummelei mit CopyRates überflüssig macht. Das heißt, auf der Suche nach einer neuen Bar mit iTime, um CopyRates zu verwenden, um nicht iXXX Funktionen (iTime) zu verwenden.))) Teufelskreis.)))
 
// Для Тестера.
bool IsNewBar()
{
  static int PrevBars = 0;
  const int CurrBars = Bars;  

  const bool Res = (CurrBars != PrevBars);
  
  PrevBars = CurrBars;
  
  return(Res);
}
 
Roman:
Ich danke Ihnen.
 
fxsaber:
Ich danke Ihnen.
 
Konvertierungvieler MT4EAs zu MT5 ohne Änderung des Quellcodes. Ich habe den Treibspiegel als Open[i] veröffentlicht.
 
fxsaber:
Ich habe viele MT4 EAs auf MT5 umgestellt, ohne den Quellcode zu ändern. Ich habe den Treibspiegel als Open[i].

Haben Sie schon einmal Leistungsmessungen zwischen den Funktionen CopyXXX und iXXX durchgeführt? Diese Frage ist sehr interessant.

Bisher sehe ich einen offensichtlichen praktischen Nutzen der iXXX-Funktionen - weniger Neuentwicklung von MQL4-Code bei der Portierung auf MQL5.

In anderen Fällen (ohne Kenntnis der Leistung) basiert die Wahl nur auf den Präferenzen der Benutzer.

 
fxsaber:
Sabz in Form von Open[i] veröffentlicht.

Ich habe diesen Code nicht beachtet, habe ihn aber überprüft - er funktioniert!

ZS: Ich muss morgen sehen, wie ich [] bekommen habe, wenn ich einen klaren Kopf habe - ich habe es mehrmals versucht - es hat bei mir nicht funktioniert!

// Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#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)
void OnStart()
  {
   for(int i=0;i<10;i++)
     {
      ResetLastError();
      Print("Bar№ ",i," : ",Time[i]," , O = ",Open[i]," , H = ",High[i]," , L = ",Low[i]," , C = ",Close[i]);
      int err=GetLastError();
      if(err>0) Print("Error № ",err);
     }
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

Haben Sie schon einmal Leistungsmessungen zwischen den Funktionen CopyXXX und iXXX durchgeführt? Ich bin sehr an dieser Frage interessiert.

Das habe ich nicht. Ich habe sehr selten mit Bars zu tun. Nichts sollte schneller sein als CopyXXX-Funktionen. Nur wenn Sie es in den Cache stellen.

 
Artyom Trishkin:

Haben Sie schon einmal Leistungsmessungen zwischen den Funktionen CopyXXX und iXXX durchgeführt? Diese Frage interessiert mich sehr...


fxsaber:

Das habe ich nicht. Ich habe sehr selten mit Bars zu tun. Nichts sollte schneller sein als CopyXXX-Funktionen. Nur wenn Sie es in den Cache stellen.

Gemessen:

#define    test(M,S,EX)        {uint mss=GetTickCount();int nn=(int)pow(10,M);for(int tst=0;tst<nn&&!_StopFlag;tst++){EX;} \
                                printf("%s: loops=%i ms=%u",S,nn,GetTickCount()-mss);}
//+------------------------------------------------------------------+
void OnStart()
  {
   double buff[];
   test(10,"CopyClose",CopyClose(_Symbol,_Period,rand(),1,buff));
   test(10,"iClose",iClose(NULL,0,rand())); 
  }
//+------------------------------------------------------------------+

2019.07.30 00:44:29.156 tst_iXXX_Copy (EURUSD,H1) CopyClose: loops=1410065408 ms=69407

2019.07.30 00:45:29.408 tst_iXXX_Copy (EURUSD,H1) iClose: loops=1410065408 ms=60250