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

 
Artyom Trishkin:

Ich werde nicht genau nachschauen - mir fehlt die Zeit. Ich dachte, es gäbe etwas, das "out of the box" ist - führen Sie es aus und sehen Sie das Ergebnis. Aber jetzt ... Ja, und das Skript funktioniert nicht sofort, und hängt, bis Sie zwangsweise schließen PKM auf sein Symbol. Und erst dann wird dort etwas gedruckt. Generell - mit Makros hat man aus irgendeinem Grund Schwierigkeiten.

Und mein Beitrag hat die Bedeutung des Themas Käfer bewegen?

 
Artyom Trishkin:

Ich werde nicht genau nachschauen - mir fehlt die Zeit. Ich dachte, es gäbe etwas, das "out of the box" ist - führen Sie es aus und sehen Sie das Ergebnis. Aber jetzt ... Ja, und das Skript funktioniert nicht sofort, und hängt, bis Sie zwangsweise schließen PKM auf sein Symbol. Und erst dann wird dort etwas gedruckt. Alles in allem sind Makros ein Ärgernis.

Ahh, da ist der Hund!

Hast du meine Tests gesehen? Da ist auch Roman

Die Tests dauern insgesamt 436 Sekunden = 7 Minuten!

;)

ZS: Ich sagte doch, dass böse Hände darüber gestolpert sind!...das Skript funktioniert nicht "out of the box"... ))))


Roman:

Macht es Sinn, meinen Beitrag in den Fehler-Thread zu stellen?

Welche Wanzen? - in Wine und Debian schreiben, dass sie die CPU-Kerne nicht voll auslasten können, für welches Betriebssystem haben Sie MT?

 
Igor Makanu:

Ahh, da ist das Hündchen!

Hast du meine Tests gesehen? Es gibt auch welche von Roman.

Die Tests dauern insgesamt 436 Sekunden = 7 Minuten!

;)

ZS: Ich sage dir, dass böse Hände es gestochen haben!...das Skript funktioniert nicht "out of the box"... ))))

Unheimlich :)

Wir sollten uns mehr ausruhen...

 
Igor Makanu:

Ahh, da ist das Hündchen!

Hast du meine Tests gesehen? Es gibt auch welche von Roman.

Die Tests dauern insgesamt 436 Sekunden = 7 Minuten!

;)

ZS: Ich sagte doch, dass böse Hände darüber gestolpert sind!...das Skript funktioniert nicht "out of the box"... ))))


Welche Wanzen? - gut, schreiben Sie in Wine und Debian, dass sie nicht vollständig die CPU-Kerne zu laden, haben Sie MT für welche OS?

MT natürlich unter Windows, aber was soll ich sagen...
In VS Code auf Debian, wenn ich die Last von anderem Code teste, werden alle Kerne geladen, also ist es unnötig, Debian die Schuld zu geben.
Wein ist vielleicht, oder besser gesagt, MT ist nicht dafür optimiert. Daher ist sie unter Wein unvollständig.
Es gibt viele Linux-Nutzer unter Wine.

 
Igor Makanu:

Ahh, da ist das Hündchen!

Hast du meine Tests gesehen? Es gibt auch welche von Roman.

Die Tests dauern insgesamt 436 Sekunden = 7 Minuten!

;)

ZS: Ich sage euch, böse Hände haben es gestochen!...das Skript funktioniert nicht "out of the box"... ))))


Gut. Ohne ungezogene Hände war der erste Test in fünf Minuten vorbei. Die anderen waren nach zwanzig Jahren noch nicht fertig. Die Kühlbox begann zu starten, der Kaffee daneben begann zu kochen... Wie auch immer, es hat mich umgehauen...
 
Wie lautet das Urteil über die Funktionsgeschwindigkeit - welche ist schneller?
 
Renat Akhtyamov:
Wie lautet das Urteil über die Geschwindigkeit der Funktionen - welche ist schneller?

Sieht aus wie CopyXXX(), aber nicht wie CopyRates(). Wenn mehrere Daten gleichzeitig benötigt werden - CopyRates()

 
Artyom Trishkin:
Gut. Der erste Test wurde in fünf Minuten ohne böse Hände bestanden. Der Rest war nicht einmal in zwanzig Jahren vorbei. Die Kühlbox begann zu starten, der Kaffee daneben kochte... Wie auch immer, es hat mich umgehauen...

hmmm, ich glaube, Sie haben Bits, die nicht in Bytes eingebaut werden wollen...es gibt im Grunde keine weiteren Optionen! ))))

Wenn dieser Thread unter den Augen eines Moderators steht, muss etwas unternommen werden... Ich habe das Makro in seine Einzelteile zerlegt,

Artem, funktioniert das überhaupt?

#property script_show_inputs

input ulong LoopCount=500000000;

// Позволяет, как в 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()
  {
   double c,buff[1];
   MqlRates rates[1];
   ulong i;
//-----   
   Print("Start test № 1...");
   Sleep(125);
   srand(GetTickCount());
   uint start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      CopyClose(_Symbol,_Period,rand(),1,buff);
   printf("CopyClose : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 2...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      c = iClose(NULL,0,rand());
   printf("iClose : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 3...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      c = Close[rand()];
   printf("Close[i] : loops=%u , ms=%u",i,GetTickCount()-start);
//-----   
   Print("Start test № 4...");
   Sleep(125);
   srand(GetTickCount());
   start=GetTickCount();
   for(i=0;i<LoopCount && !_StopFlag;i++)
      CopyRates(_Symbol,_Period,rand(),1,rates);
   printf("CopyRates : loops=%u , ms=%u",i,GetTickCount()-start);
   Print("End script");
  }
//+------------------------------------------------------------------+

2019.07.30 19:42:16.639 tst_iXXX_Copy (EURUSD,H1) Start Test #1...

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) CopyClose : loops=500000000 , ms=23422

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) Start test #2...

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) iClose: loops=500000000 , ms=46609

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) Start Test #3...

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) Close[i] : loops=500000000 , ms=45156

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) Start test #4...

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) CopyRates : loops=500000000 , ms=29656

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) Skript beenden

Dateien:
 
Renat Akhtyamov:
Wie ist das Urteil über die Geschwindigkeit der Funktionen - welche ist schneller?

sie funktionieren gleich, imho sind Experimente für Experimente... hier ist der letzte Testaufruf für eine halbe Milliarde Mal, ja, Sie können den Unterschied sehen, das Einzige, was übrig bleibt, ist herauszufinden, wie viele Ticks in einer Minute (~60), wie viele in einem Tick in einer Stunde (~3600) und wie viele in einem Tag (~86400) und wie viel diese 23 Sekunden für eine halbe Milliarde Aufrufe laufen ...

5 787 Tage = 23 Sekunden Gewinn? wenn wir die schnellste Funktion bei jedem Tick verwenden! )))))

imho, verwenden Sie, was bequem ist und hören Sie auf niemanden

 
Igor Makanu:

sie funktionieren gleich, imho sind Experimente für Experimente... hier ist der letzte Testaufruf für eine halbe Milliarde Mal, ja, Sie können den Unterschied sehen, das Einzige, was übrig bleibt, ist herauszufinden, wie viele Ticks in einer Minute (~60), wie viele in einem Tick in einer Stunde (~3600) und wie viele in einem Tag (~86400) und wie viel diese 23 Sekunden für eine halbe Milliarde Aufrufe laufen ...

5 787 Tage = 23 Sekunden Gewinn? wenn wir die schnellste Funktion bei jedem Tick verwenden! )))))

imho, verwenden Sie, was bequem ist und hören Sie auf niemanden

ich habe mich an 4 Stück gewöhnt, die kompakter und besser lesbar sind

Über die Geschwindigkeit und die Funktionen kann ich mich nicht beschweren, sie sind in Ordnung.

;)