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

 
Renat Akhtyamov:

Ich bin an das 4er-Pack gewöhnt, es ist kompakter und besser lesbar.

;)

mein kompaktes Beispiel steht auf der Startseite... damit hat im Grunde alles angefangen ))))

 
Igor Makanu:

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?

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

Ja, es funktioniert:

2019.07.31 00:38:01.936 Start test № 1...
2019.07.31 00:38:31.097 CopyClose : loops=500000000 , ms=29015
2019.07.31 00:38:31.097 Start test № 2...
2019.07.31 00:41:25.095 iClose : loops=500000000 , ms=173875
2019.07.31 00:41:25.095 Start test № 3...
2019.07.31 00:44:29.777 Close[i] : loops=500000000 , ms=184547
2019.07.31 00:44:29.777 Start test № 4...
2019.07.31 00:45:01.074 CopyRates : loops=500000000 , ms=31172
2019.07.31 00:45:01.074 End script

Unterm Strich:

  • 29 Sekunden CopyClose()
  • 173 Sekunden iClose()
  • 184 sec Schließen[]
  • 31 Sekunden CopyRates()

Was ist los? Warum habe ich eine Differenz von mehr als dem Sechsfachen?

SZ-Lauf auf D1

 
Artyom Trishkin:

Was ist los? Warum habe ich eine Differenz von mehr als dem Sechsfachen?


Igor Makanu:

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

)))

 

Igor Makanu:

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

)))

Habe einen Test mit H1 gemacht, kein erkennbarer Unterschied:

2019.07.31 00:55:30.290 Start test № 1...
2019.07.31 00:55:58.234 CopyClose : loops=500000000 , ms=27812
2019.07.31 00:55:58.234 Start test № 2...
2019.07.31 00:58:59.095 iClose : loops=500000000 , ms=180734
2019.07.31 00:58:59.095 Start test № 3...
2019.07.31 01:02:06.834 Close[i] : loops=500000000 , ms=187610
2019.07.31 01:02:06.834 Start test № 4...
2019.07.31 01:02:38.365 CopyRates : loops=500000000 , ms=31406
2019.07.31 01:02:38.365 End script

und Bits und Bytes nichts damit zu tun haben?

 
Artyom Trishkin:

und Bits und Bytes nichts damit zu tun haben?

Ich werde Ihnen doch nicht sagen, dass Ihr Computer dumm sein muss, oder?

Ich habe mehrmals getestet, Roman hat getestet - die Ergebnisse sind vergleichbar.

Für diesen Test sollte die Geschwindigkeit der Festplatte nicht kritisch sein, es bleibt nicht viel übrig: Betriebssystem und Hardware = Speicher + CPU, irgendwo ist etwas langsam,

es gibt natürlich eine Option in einigen "inneren Welt" Core i3, ich habe einen Core™ i3-4170

 
Igor Makanu:

Ich werde Ihnen doch nicht sagen, dass Ihr Computer dumm sein muss, oder?

Ich habe mehrfach getestet, Roman hat getestet - die Ergebnisse sind vergleichbar

Für diesen Test sollte die Geschwindigkeit der Festplatte nicht kritisch sein, es ist nicht viel übrig: OS, und Hardware = Speicher + CPU, irgendwo gibt es etwas, das hinkt,

es gibt natürlich eine Option in einigen "inneren Welt" Core i3, ich habe einen Core™ i3-4170

Ich habe einen Test-EA, der an dem zweiten Symbol hängt, bei dem die Ereignissteuerung im Timer konstant ist. Wir können davon ausgehen, dass es sich irgendwie auswirkt. Und zwar nur beiNicht-CopyXXX-Funktionen . Es gibt keinen Grund, ihn im Moment aus dem Horoskop zu entfernen - seine Anwesenheit ist für meine aktuellen Angelegenheiten wichtiger als dieser Test.

 
Artyom Trishkin:

Habe einen Test auf H1 gemacht, kein merklicher Unterschied:

Die Entwickler haben einmal gesagt, dass die neuen iXXX-Funktionen in 5 nur ein Wrapper für CopyXXX-Funktionen sind.

Daher ist kein Unterschied bei einzelnen Abfragen zu erwarten.

 
Renat Akhtyamov:
Wie lautet das Urteil über die Funktionsgeschwindigkeit - welche ist schneller?
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int Count=5000000; // кол-во проходов
//---
void OnStart(void)
  {
   Print("Bench_1: ",Bench_1(Count)," msc");
   Print("Bench_2: ",Bench_2(Count)," msc");
  }
//+------------------------------------------------------------------+
//| Bench_1                                                                 |
//+------------------------------------------------------------------+
ulong Bench_1(const int _count)
  {
   const ulong  StartTime=GetMicrosecondCount();
//---
   for(int i=0; i<Count;i++)
     {
      datetime time  = iTime(Symbol(),Period(),0);
      double   open  = iOpen(Symbol(),Period(),0);
      double   high  = iHigh(Symbol(),Period(),0);
      double   low   = iLow(Symbol(),Period(),0);
      double   close = iClose(NULL,PERIOD_CURRENT,0);
      long     volume= iVolume(Symbol(),0,0);
     }
//---
   return(GetMicrosecondCount() - StartTime);
  }
//+------------------------------------------------------------------+
//| Bench_2                                                                 |
//+------------------------------------------------------------------+
ulong Bench_2(const int _count)
  {
   datetime  time[];
   double    open[];   // Open (цены открытия бара)
   double    high[];   // High (цены максимума бара)
   double    low[];    // Open (цены минимума бара)
   double    close[];    // Open (цены минимума бара)
   long      volume[]; // Close (цены закрытия бара)

   const ulong  StartTime=GetMicrosecondCount();
//---
   for(int i=0; i<Count;i++)
     {
      CopyTime(Symbol(),Period(),1,1,time);
      CopyOpen(Symbol(),Period(),1,1,open);
      CopyHigh(Symbol(),Period(),1,1,high);
      CopyLow(Symbol(),Period(),1,1,low);
      CopyClose(Symbol(),Period(),1,1,close);
      CopyTickVolume(Symbol(),Period(),1,1,volume);
//---
      datetime _time  = time[0];
      double   _open  = open[0];
      double   _high  = high[0];
      double   _low   = low[0];
      double   _close = close[0];
      long     _volume= volume[0];
     
}
//---
   return(GetMicrosecondCount() - StartTime);
  }
//+------------------------------------------------------------------+
der Autor des Drehbuchs kann sich nicht mehr erinnern, wer
 
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 das Testen und Optimieren vergessen, Igor. Hier ist die Geschwindigkeit gefragt.

 
Andrey Khatimlianskii:

Ich habe das Testen und Optimieren vergessen, Igor. Hier ist die Geschwindigkeit gefragt.

Ja, nun... Es gibt hier einfach nicht viele Leute, die ernsthaft über dieses Thema diskutieren, daher ist mir völlig entfallen, wozu das alles gut sein soll ))))

Sie haben Recht! - Aber wir brauchen eine bequeme Verwendung der CopyOpen()-Funktionen... zu tun, und wenn wir den CopyOpen()-Aufruf in eine zusätzliche Funktion verpacken, geht der Leistungsgewinn wahrscheinlich verloren.

ZZY: imho ist es wie überall - Sie schreiben in Assembler, Sie bekommen lange Entwicklungszeit und nicht die Tatsache, dass die endgültige Leistung höher sein wird als mit C++, die Sie in 15 Minuten geschrieben haben - Sie sollten es überprüfen