Fehler, Irrtümer, Fragen - Seite 2221

 

Synthetisches Werkzeug. Ich importiere Minutenbalken, jeder Minutenbalken unterscheidet sich um 1 Punkt (5 Ziffern).

Ich schließe das Fenster mit den Symbolen, dann öffne ich dieses Fenster erneut, frage nach den Minutenbalken der vorherigen Ladung und erhalte

Die Symbole sind für jeden vollen Tag die gleichen. Worin besteht der Fehler?

 
elibrarius:

Ein Blick in den Code des Alglib-Pakets. Er ist voll von solchen Konstruktionen, die das Lesen des Codes erschweren:

Ist es so nicht einfacher?

Ich habe den Eindruck, dass die Ausführungsgeschwindigkeit sogar noch höher sein würde.

Warum haben sie den Code so kompliziert gemacht? Oder haben sie es einfach aus einer anderen Sprache portiert, ohne irgendwelche Änderungen vorzunehmen? Aber ich frage mich trotzdem, warum eine solche Komplikation im Original?

Wahrscheinlich wird dies im Originalcode gemacht, um die Dinge zu beschleunigen.

Ob es in MMS schneller geht, muss gemessen werden, "scheinbar" geht hier nicht.

 
Koldun Zloy:

Dies isthöchstwahrscheinlich im Original zur Beschleunigung geschehen.

Ob es in MMS schneller geht, muss gemessen werden, "scheinbar" geht hier nicht.

"Höchstwahrscheinlich" funktioniert auch nicht.
Wie kann ein solches Formular schneller funktionieren? Wovon reden Sie eigentlich?

Zwei zusätzliche Schleifen und ein zusätzliches Array anstelle einer Variablen.

 

Nikolai Semko:

Zwei zusätzliche Schleifen und ein zusätzliches Array anstelle einer Variablen.

Solche primitiven Überlegungen sind für moderne Prozessoren nicht geeignet.

 
Koldun Zloy:

Solche primitiven Überlegungen sind für moderne Prozessoren nicht geeignet.

Sie wissen es besser. Sie haben mehr Erfahrung...

 


Koldun Zloy
:

Solche primitiven Überlegungen sind für moderne Prozessoren nicht geeignet.

Im Grunde genommen tut es mir leid, aber Sie haben Wahnvorstellungen.

Kein heute existierender Prozessor wird jemals

for(i=0;i<=npoints-1;i++)

schneller im Vergleich zu...

for(i=0;i<npoints;i++)

und der Zugriff auf ein Array wird nie schneller sein als der Zugriff auf eine einfache Variable,

drei identische Schleifen sind niemals schneller als eine kombinierte Schleife.


Ich bin nicht faul gewesen und habe die Geschwindigkeit von zwei verschiedenen Varianten direkt in der Original-ALGLIB getestet, um nicht unsubstantiiert zu sein:

      e=0;
      double tmp1;
      ulong t=GetMicrosecondCount();
      for(i=0;i<npoints;i++)
        {
         v=0.0;
         for(i_=0;i_<nvars;i_++)
           {
            tmp1=xy[i][i_]-ct[xyc[i]][i_];
            v+=tmp1*tmp1;
           }
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("fast = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );



      e=0;
      t=GetMicrosecondCount();
      for(i=0;i<=npoints-1;i++)
        {
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=xy[i][i_];
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v=0.0;
         for(i_=0;i_<=nvars-1;i_++)
            v+=tmp[i_]*tmp[i_];
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("slow = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );

Ergebnis:

2018.06.27 04:36:50.265 TestClasses (GBPUSD,M6) fast = 571 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.266 TestClasses (GBPUSD,M6) slow = 841 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.630 TestClasses (GBPUSD,M6) fast = 577 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.631 TestClasses (GBPUSD,M6) slow = 812 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.143 TestClasses (GBPUSD,M6) fast = 599 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.144 TestClasses (GBPUSD,M6) slow = 853 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.955 TestClasses (GBPUSD,M6) fast = 600 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.956 TestClasses (GBPUSD,M6) slow = 809 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) fast = 567 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.857 TestClasses (GBPUSD,M6) fast = 690 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.858 TestClasses (GBPUSD,M6) slow = 820 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.229 TestClasses (GBPUSD,M6) fast = 585 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.230 TestClasses (GBPUSD,M6) slow = 811 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.736 TestClasses (GBPUSD,M6) fast = 560 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.737 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40

Sie können also sehen, dass der Geschwindigkeitsgewinn mehr als 40 % beträgt.

Dateien:
dataanalysis.mqh  1150 kb
TestClasses.mqh  2762 kb
 
Nikolai Semko:

Nun, im Grunde genommen tut es mir leid, aber Sie haben Wahnvorstellungen.

Kein heute existierender Prozessor wird jemals

schneller im Vergleich zu...

und der Zugriff auf ein Array wird nie schneller sein als der Zugriff auf eine einfache Variable,

drei identische Schleifen sind niemals schneller als eine kombinierte Schleife.


Ich bin nicht faul gewesen und habe die Geschwindigkeit von zwei verschiedenen Varianten direkt in der Original-ALGLIB getestet, um nicht unsubstantiiert zu sein:

Ergebnis:

Sie können also sehen, dass der Geschwindigkeitsgewinn mehr als 40 % beträgt.

Vielen Dank für den Test! Ich denke, es wird nicht nur in MQL, sondern in allen Sprachen schneller funktionieren.

Die Gründe, an die ich dachte, waren, dass der Programmierer, der es geschrieben hat, nicht nur dafür bezahlt wurde, dass das Programm funktioniert, sondern auch für die Anzahl der Zeilen. Denn ein Programm mit 500 Zeilen ist für einen Kunden nicht so beeindruckend wie ein Programm mit 5000 Zeilen. Es ist schade, dass die Geschwindigkeit und die Lesbarkeit des Codes darunter gelitten haben.

 
elibrarius:
Ich denke, es wird nicht nur in MQL, sondern in allen Sprachen schneller funktionieren.

Ja, sicher.

 
Mir ist aufgefallen, dass bei der Anmeldung bei MQL ein Fehler auftritt und im Status des Browsers eine lange Antwort (wahrscheinlich Autorisierung) von Facebook steht
 
SEM:

Synthetisches Werkzeug. Ich importiere Minutenbalken, jeder Minutenbalken unterscheidet sich um 1 Punkt (5 Ziffern).

Ich schließe das Fenster mit den Symbolen, öffne dieses Fenster erneut und frage nach den Minutenbalken der vorherigen Ladung.

Die Symbole sind für jeden vollen Tag die gleichen. Worin besteht der Fehler?

Stabile Wiedergabe ? Welches Gebäude?